카테고리 없음

나만의 챗봇 만들기 (코랩 사용)

yumin630 2024. 11. 7. 02:14

 

 

코랩을 사용해서 나만의 챗봇을 만들어보겟다

#구글 드라이브 연결
from google.colab import drive
drive.mount('/content/drive')

#라이브러리 설치(항상 설치해야함)

!pip install -r /content/drive/MyDrive/langchain/requirements.txt
import pandas as pd
import numpy as np
import os
import sqlite3
from datetime import datetime

import openai

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, Document
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA, ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)

 

 

def load_api_key(filepath):
    with open(filepath, 'r') as file:
        return file.readline().strip()

path = '키 경로'

# API 키 로드 및 환경변수 설정
openai.api_key = load_api_key(path + 'api_key.txt')
os.environ['OPENAI_API_KEY'] = openai.api_key
print(openai.api_key[:15])

키 경로는 구글드라이브에 폴더 생성후 넣어놧다면

/content/drive/MyDrive/폴더명/
일 것이다

 

 

원하는 정보를 모아서 CSV 파일 형태로 만들어 놓은것을 활용해서 Vector DB를 만든다

data = pd.read_csv(path + 'qa.csv', encoding='utf-8')
print(data.head())

embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
database = Chroma(persist_directory="./db", embedding_function = embeddings )

 

#데이터 입력 
'''기존 입력을 모두 제거하고 추가 사항만 모두 입력
meta data로 '구분' 칼럼 값 추가하기'''

ids = database.get()
if ids['ids']:
    database.delete(ids = ids['ids'])
    
qa_list = data['QA'].tolist()
cat_list = [{'category':text} for text in data['구분'].tolist()]

# 각 행의 데이터를 Document 객체로 변환
documents = [Document(page_content=qa_list[i], metadata = cat_list[i]) for i in range(len(qa_list))]

# 데이터프레임에서 문서 추가
database.add_documents(documents)


#입력된 데이터 조회
database.get()

 

RAG+LLM모델

  • 모델 : ConversationalRetrievalChain
    • LLM 모델 : gpt-3.5-turbo
    • retriever : 벡터DB
      • 유사도 높은 문서 3개 가져오도록 설정
    • memory 사용

 

 

chat = ChatOpenAI(model="gpt-3.5-turbo")

k=3
retriever = database.as_retriever(search_kwargs={"k": k})

# 대화 메모리 생성
memory = ConversationBufferMemory(memory_key="chat_history", input_key="question",
                                  output_key="answer", return_messages=True)

# ConversationalRetrievalQA 체인 생성
qa = ConversationalRetrievalChain.from_llm(llm=chat, retriever=retriever, memory=memory,
                                           return_source_documents=True,  output_key="answer")

 

# 질문
query = "지원하는데 나이 제한이 있나?"   # 질문할 문장

# 답변
result = qa(query)
answer = result["answer"]
print(answer)

 

 

모델 설명은 다음에 추가하겟다