본문 바로가기

IT/개발

(9) Langchain에서 VectorStore에 저장된 사용자 데이터를 재사용해보자(user data, embedding)

반응형

이제 저장된 embedding vector db를 사용해 보겠습니다. 

 

아래 글에 이어서 VectorStore를 이용해서 저장한 사용자 데이터 Vector DB를 로드하고 사용해보는 예제 입니다.

 

https://yongeekd01.tistory.com/100

 

(8) Langchain에서 사용자 데이터를 VectorStore에 저장해보자(user data, embedding)

LLM의 막강한 자연어 처리 기능에 자신만의 데이터를 추가하여 서비스를 구성하기 위해서 prompt에 사용자 데이터를 함께 보내주는 방식을 통해 이를 해결하고자 하는 다양한 시도들이 진행 되고

yongeekd01.tistory.com

 

1. VectoreStore를 이용하여 저장된 데이터 사용하기

HuggingFace의 embedding vector 도구와 FAISS DB를 사용한다는 것을 알려주고 저장한 데이터를 로드한후 쿼리를 실행해 보겠습니다.

 

import os
import apikeys #user defind, apikeys 숨기기

from langchain.chat_models import ChatOpenAI

#https://platform.openai.com/account/api-keys 에서 발급받는다. 유료
OPENAI_API_KEY = apikeys.OPENAI_API_KEY

#환경 변수에 넣어준다
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

#LLM 모델 지정
chatAI = ChatOpenAI(model_name='gpt-3.5-turbo', temperature=0.1)

#vector embedding 도구는 지정하기 여기서는 HuggingFace를 사용해서 만듬
#pip install sentence_transformers # HuggingFace Embedding 사용 위해서 필요
from langchain.embeddings import HuggingFaceEmbeddings #무료
embeddings = HuggingFaceEmbeddings()

# FAISS vectorstore를 이용하여 저장된 db 읽어오기
from langchain.indexes.vectorstore import VectorStoreIndexWrapper
from langchain.vectorstores import FAISS   #무료

myData = FAISS.load_local("faiss-rus-ukr", embeddings)

#유사도 검색 FAISS 동작 시험
#result = myData.similarity_search("우크라이나 전쟁이 일어난 년도는?")
#print(result)

index = VectorStoreIndexWrapper(vectorstore=myData)

#로컬에 저장한 데이터와 질문을 chat모델에 전달하여 답을 얻는다
result = index.query("2022년 이후 러시아 우크라이나 전쟁의 상황에 대해 설명해줘", llm=chatAI, verbose=True)
print(result)

'''
2022년 이후 러시아-우크라이나 전쟁은 여러 전선에서 치열하게 전개되고 있습니다. 러시아는 우크라이나의 다양한 지역을 타격하고 점령하려는 시도를 하고 있으며, 우크라이나는 이에 대항하기 위해 저항을 펼치고 있습니다.
전쟁은 2022년 2월 24일에 러시아의 침공으로 시작되었습니다. 러시아는 키이우, 하르키우, 크림반도, 도네츠크, 루한스크 등 다양한 지역에서 공격을 진행하였습니다. 우크라이나는 러시아의 침공에 대항하기 위해 강력한 저항을 펼치고 있으며, 미사일 공습과 지상 공격을 통해 러시아군에 대항하고 있습니다.
전선의 상황은 지속적으로 변화하고 있습니다. 일부 지역에서는 우크라이나군의 저항으로 인해 러시아군이 손실을 입고 후퇴하는 경우도 있었습니다. 그러나 러시아는 계속해서 새로운 공세를 시작하고 있으며, 전선은 계속해서 변화하고 있습니다.
전쟁은 국제적으로 침략 전쟁으로 비난받고 있으며, 국제사회는 러시아의 전면 철수를 요구하는 결의안을 통과시키고 있습니다. 여러 국가들은 러시아에게 경제 제재를 가하고 우크라이나에게 인도적, 군사적 지원을 제공하고 있습니다.  
전쟁의 상황은 계속해서 변화하고 있으며, 정확한 현재 상황을 알려드리기는 어렵습니다. 하지만 전쟁은 여전히 진행 중이며, 양측은 각자의 목표를 달성하기 위해 계속해서 전투를 벌이고 있습니다.
'''

 

문제 없이 잘 동작하네요. 

 

반응형

 

반응형