■ VectorStoreRetrieverMemory 클래스의 load_memory_variables 메소드를 사용해 메시지 히스토리를 구하는 방법을 보여준다.
※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다.
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import faiss from dotenv import load_dotenv from langchain_openai import OpenAIEmbeddings from langchain.docstore import InMemoryDocstore from langchain.vectorstores import FAISS from langchain.memory import VectorStoreRetrieverMemory load_dotenv() openAIEmbeddings = OpenAIEmbeddings() indexFlatL2 = faiss.IndexFlatL2(1536) faiss = FAISS(openAIEmbeddings, indexFlatL2, InMemoryDocstore({}), {}) vectorStoreRetriever = faiss.as_retriever(search_kwargs = {"k" : 1}) vectorStoreRetrieverMemory = VectorStoreRetrieverMemory(retriever = vectorStoreRetriever) vectorStoreRetrieverMemory.save_context( inputs = {"human" : "안녕하세요, 오늘 면접에 참석해주셔서 감사합니다. 자기소개 부탁드립니다."}, outputs = {"ai" : "안녕하세요. 저는 컴퓨터 과학을 전공한 신입 개발자입니다. 대학에서는 주로 자바와 파이썬을 사용했으며, 최근에는 웹 개발 프로젝트에 참여하여 실제 사용자를 위한 서비스를 개발하는 경험을 했습니다."} ) vectorStoreRetrieverMemory.save_context( inputs = {"human" : "프로젝트에서 어떤 역할을 맡았나요?"}, outputs = {"ai" : "제가 맡은 역할은 백엔드 개발자였습니다. 사용자 데이터 처리와 서버 로직 개발을 담당했으며, RESTful API를 구현하여 프론트엔드와의 통신을 담당했습니다. 또한, 데이터베이스 설계에도 참여했습니다."} ) vectorStoreRetrieverMemory.save_context( inputs = {"human" : "팀 프로젝트에서 어려움을 겪었던 경험이 있다면 어떻게 해결했나요?"}, outputs = {"ai" : "프로젝트 초기에 의사소통 문제로 몇 가지 어려움이 있었습니다. 이를 해결하기 위해 저희 팀은 정기적인 미팅을 갖고 각자의 진행 상황을 공유했습니다. 또한, 문제가 발생했을 때는 적극적으로 의견을 나누고, 합리적인 해결책을 찾기 위해 노력했습니다."} ) vectorStoreRetrieverMemory.save_context( inputs = {"human" : "개발자로서 자신의 강점은 무엇이라고 생각하나요?"}, outputs = {"ai" : "제 강점은 빠른 학습 능력과 문제 해결 능력입니다. 새로운 기술이나 도구를 빠르게 습득할 수 있으며, 복잡한 문제에 직면했을 때 창의적인 해결책을 제시할 수 있습니다. 또한, 팀워크를 중시하며 동료들과 협력하는 것을 중요하게 생각합니다."} ) print(vectorStoreRetrieverMemory.load_memory_variables({"prompt" : "면접자 전공은 무엇인가요?"})["history"]) print(vectorStoreRetrieverMemory.load_memory_variables({"human" : "면접자가 프로젝트에서 맡은 역할은 무엇인가요?"})["history"]) """ human: 안녕하세요, 오늘 면접에 참석해주셔서 감사합니다. 자기소개 부탁드립니다. ai: 안녕하세요. 저는 컴퓨터 과학을 전공한 신입 개발자입니다. 대학에서는 주로 자바와 파이썬을 사용했으며, 최근에는 웹 개발 프로젝트에 참여하여 실제 사용자를 위한 서비스를 개발하는 경험을 했습니다. human: 프로젝트에서 어떤 역할을 맡았나요? ai: 제가 맡은 역할은 백엔드 개발자였습니다. 사용자 데이터 처리와 서버 로직 개발을 담당했으며, RESTful API를 구현하여 프론트엔드와의 통신을 담당했습니다. 또한, 데이터베이스 설계에도 참여했습니다. """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
aiohappyeyeballs==2.4.4 aiohttp==3.11.11 aiosignal==1.3.2 annotated-types==0.7.0 anyio==4.8.0 async-timeout==4.0.3 attrs==24.3.0 certifi==2024.12.14 charset-normalizer==3.4.1 dataclasses-json==0.6.7 distro==1.9.0 exceptiongroup==1.2.2 faiss-gpu==1.7.2 frozenlist==1.5.0 greenlet==3.1.1 h11==0.14.0 httpcore==1.0.7 httpx==0.28.1 httpx-sse==0.4.0 idna==3.10 jiter==0.8.2 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.3.14 langchain-community==0.3.14 langchain-core==0.3.29 langchain-openai==0.3.0 langchain-text-splitters==0.3.5 langsmith==0.2.10 marshmallow==3.25.1 multidict==6.1.0 mypy-extensions==1.0.0 numpy==1.26.4 openai==1.59.6 orjson==3.10.14 packaging==24.2 propcache==0.2.1 pydantic==2.10.5 pydantic-settings==2.7.1 pydantic_core==2.27.2 python-dotenv==1.0.1 PyYAML==6.0.2 regex==2024.11.6 requests==2.32.3 requests-toolbelt==1.0.0 sniffio==1.3.1 SQLAlchemy==2.0.37 tenacity==9.0.0 tiktoken==0.8.0 tqdm==4.67.1 typing-inspect==0.9.0 typing_extensions==4.12.2 urllib3==2.3.0 yarl==1.18.3 |
※ pip install python-dotenv langchain-community langchain_openai faiss-gpu 명령을 실행했다.