VectorDB에 저장된 레퍼런스 문서를 참고해서 답변을 해주는 chatbot 만들기 (simple ver.)
import os
from openai import OpenAI
def pdf_chat(query: str) -> str:
# 1. 사용자 쿼리 벡터화
query_vector = query_embed(query)
# 2. Hybrid Search 통해 레퍼런스 문서 반환
query_response = index.query(
namespace="test--pdf-chat",
top_k=10,
include_values=True,
include_metadata=True,
vector=query_vector,
filter={
"file": {"$in": [FILE_NAME]},
},
)
reference = query_response["matches"][0]["metadata"]
# 3. 프롬프트에 레퍼런스 문서 정보와 사용자 쿼리 정보 입력
client = OpenAI()
OpenAI.api_key = os.getenv('OPENAI_API_KEY')
resp = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "\n".join([
"Your role is to answer the user's query based on the references provided.",
"You must base your answer solely on the references, regardless of your own knowledge, and you must include the page information in your answer.",
])},
{"role": "system", "content": f"reference: {reference['text']}, page: ({int(reference['page'])})"},
{"role": "user", "content": query},
]
)
# 4. LLM 생성 답변 반환
answer = resp.choices[0].message.content
return answer
** 2번 과정에서 매칭되는 문서가 없으면 인덱스 오류가 발생하니 예외처리 필요할 것 같다.
# 확인
response = pdf_chat("What advantages do transformers have over RNNs?")
response