개발새발

강화학습을 활용한 잔소리 AI 봇 팀원 모집 본문

AI

강화학습을 활용한 잔소리 AI 봇 팀원 모집

비숑주인 2024. 11. 20. 22:11

https://github.com/his0si/NoExcuses

 

GitHub - his0si/NoExcuses: 강화학습을 활용한 잔소리 AI 봇

강화학습을 활용한 잔소리 AI 봇. Contribute to his0si/NoExcuses development by creating an account on GitHub.

github.com


데이터 분석과 인공지능 동아리 겨울 프로젝트 주제를 고민하다가 OpenAI API를 사용한 챗봇을 강화학습 시키면 어떨까하는 아이디어가 떠올라서 바로 관련 자료들을 찾아보았다.
 
https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE11481312

 

DBpia

논문, 학술저널 검색 플랫폼 서비스

www.dbpia.co.kr

 
컴공이 아닌 부원들도 많은 동아리이기 때문에 다른 팀원들은 강화학습 모델 구축에 집중할 수 있도록 미리 챗봇의 초기 세팅을 완료해두었다. 팀원들간의 버전을 통일하고, 관리의 용이성을 위해서 conda에서 가상환경을 만들어 작업을 시작했다. 
 

 
일단 기본적으로 잔소리 챗봇 컨셉이기 때문에 적당한 초기 프롬프트를 넣어놨다. 
 

from openai import OpenAI
from dotenv import load_dotenv
import os

# .env 파일 로드
load_dotenv()

class ChatModel:
    def __init__(self):
        api_key = os.getenv('OPENAI_API_KEY')
        if not api_key:
            raise ValueError("OPENAI_API_KEY not found in environment variables")
        self.client = OpenAI(api_key=api_key)
        self.model = "gpt-3.5-turbo"
        self.system_message = {
            "role": "system",
            "content": (
                "당신은 잔소리 봇입니다. 사용자가 묻거나 말하는 것에 대해 강하게 잔소리를 하며, "
                "잘못된 행동이나 무지함을 지적하고 올바른 행동을 강하게 권장합니다. "
                "비꼼과 풍자를 적극적으로 활용하며, 사용자가 느끼기에 부담스러울 정도로 잔소리를 이어가세요. "
                "그러나 항상 사용자의 개선을 위한 좋은 의도로 대답하세요. 한국어로만 대답하세요."
    )
}


    def get_response(self, user_message):
        messages = [
            self.system_message,
            {
                "role": "user",
                "content": user_message
            }
        ]

        try:
            response = self.client.chat.completions.create(
                model=self.model,
                messages=messages
            )
            # 단순히 content를 반환
            return response.choices[0].message.content
        except Exception as e:
            return f"죄송합니다. 오류가 발생했습니다: {str(e)}"

 
 
아직 학습을 안 시켜서 그런 지 프롬프트가 문제인 지 말투가 묘하다...
 

 
 
프론트는 나에게 가장 익숙한 React, 백은 인공 지능의 근본 python 기반의 flask로 정했다. DB가 필요할지는 아직 잘 모르겠으나 최대한 간단하게 구현하고자 SQLite를 골랐다. 
 

 
모델은 PPO(Proximal Policy Optimization) 를 사용하려고 한다. 실시간으로 데이터가 들어오는 챗봇의 특성상, Episode 단위로 결과를 반영하여 학습하는 REINFORCE 모델과 달리, PPO는 Step 단위로 학습 데이터를 생성하고 학습에 반영할 수 있어 보다 즉각적인 학습이 가능할 것으로 판단했다. 
 
 
아래는 팀원을 모집하기 위해서 만든 ppt인데 ppt만 봐도 알겠지만 내가 디자인을 참 못해서...디자인을 잘하는 팀원이 들어오면 너무 좋을 것 같다. 물론 디자인 역할을 하는 팀원이 안 들어온다면 멋진 공대생답게 그냥 최소한의 css만 짜고 모델 구축에 집중하려고 한다....ㅎㅎ

 
 

'AI' 카테고리의 다른 글

잔소리 AI 봇 팀원 모집 성공!!  (3) 2024.12.26
CNN 입문  (0) 2024.11.03
Perceptron (퍼셉트론)  (0) 2024.09.12
딥러닝을 이용한 배터리 수명 예측 알고리즘  (1) 2024.08.13