LangChain 실습 2 - LLM 캐시와 메모리

1. LLM / ChatModel

LLM?

  • GPT와 같은 AI모델을 활용하여 Prompt에 대한 응답을 생성하는 컴포넌트

  • GPT, Hugging Face, Cohere등 다양한 ai모델들을 일관된 인터페이스로 사용할 있게 설계하였다

ChatModel ?

  • 사용자와의 대화형 메세지를 기반으로 응답을 생성하는 챗봇 등에서 사용하는 컴포넌트.

  • 기본적으로 LLM컴포넌트와 비슷하나 , 대화형 메세지 응답에 최적화된 컴포넌트이다.

2. Caching

1) InMemoryCache

  • RAM을 활용하여 빠르게 데이터를 저장하고 검색할 수 있는 기능을 제공하는 컴포넌트

  • 응답결과를 RAM에 저장하기 때문에 프로그램이 종료되면 캐시 데이터도 사라짐(영속성X)

from langchain.globals import set_llm_cache
from langchain.cache import InMemoryCache

# 인메모리 캐시
set_llm_cache(InMemoryCache())

2) SQLiteCache

  • SQLite DB를 활용하여 데이터를 저장 및 검색할 수 있는 기능을 제공하는 컴포넌트

  • InMemory방식보다 속도는 느리지만 데이터를 영구적으로 저장할 수 있다

  • SQLite Viewer

3) RedisCache

  • Redis서버를 활용하여 데이터를 저장 및 검색할 수 있는 기능을 제공하는 컴포넌트

  • SqlLite와 같이 데이터를 영구적으로 저장할 수 있으며, 데이터를 RAM에 저장하기 때문에 조회속도도 빠르다.

  • 단, InMemoryCache에 비해 설정이 복잡하고 , 서버관리와 비용이 별도로 추가됨.


3. Memory

LangChain에는 사용자와의 대화이력을 관리하는 다양한 메모리가 있습니다. 각 메모리들의 특징과 활용방법에 대해 알아보도록 하겠습니다.

참고문서 : https://python.langchain.com/api_reference/langchain/memory.html

1) ConversationBufferMemory

  • LangChain에서 대화 이력을 저장하기 위해 사용하는 메모리 클래스.

  • 챗봇이 사용자와 나눈 대화내용을 기억시켜 응답에 필요한 적절한 문맥을 유지하도록 도와준다.

  • 대화 내용을 버퍼형태로 저장하며, 버퍼의 크기에 제한이 없기 때문에 이전 대화내용을 모두 저장 시킬 수 있다. 단, 대화내용이 너무 많은 경우 성능이 저하될 수 있다.

2) ConversationBufferWindowMemory

  • 최근 N개의 대화이력만 저장하는 메모리로 사용자와 길게 대화하더라도 최근 맥락만 유지할 수 있기 때문에 메모리에 너무 많은 데이터가 쌓이는 것을 방지할 수 있다.

  • 오래된 대화내용을 자동으로 삭제하여 메모리를 최적화 한다.

3) ConversationTokenBufferMemory

  • 메세지를 개수가 아닌 토큰 개수를 기준으로 일정량만을 저장하는 메모리. openAi와 같은 api기반에서 최대 토큰 제한을 유지시킬 때 유용하게 사용한다.

4) ConversationSummaryMemory / ConversationSummaryBufferMemory

  • 전체 대화를 요약한 내용만 유지하는 방식의 메모리

  • 핵심적인 맥락을 유지하면서 메모리를 최적화 할 수 있다.

  • 요약시에는 LLM을 다시 이용해야 하므로 API 비용이 추가로 발생한다.

5) ConversationEntityMemory

  • 대화속에서 사용자가 언급한 개념(Entity)을 추출하여 저장하여 관리하는 메모리

  • 사용자가 자주 묻는 주제를 기억하여 맞춤형 답변을 제공할 수 있다.

6) ConversationKGMemory

  • 대화내용을 KG(Knowledge Graph)로 변환하여 저장하는 메모리

  • 개별적인 문장이 아닌 개념관계를 중심으로 정보를 저장(Graph-prompt)

  • 대화에서 점점 축적되는 정보를 바탕으로 더 똑똑한 응답기 가능해진다.

  • 사용자의 이전 질문과 관련된 개념을 이해하여 연관 질문을 추천한다.

7) VectorStoreRetrieverMemory

  • 대화 기록을 벡터로 변환하여 저장하고 검색할 수 있는 메모리

  • 단순한 최근 대화가 아니라 의미적으로 유사한 이전 대화도 검색할 수 있따.

  • 기존의 단순한 히스토리 저장방식 보다 문맥의 이해도가 높다

  • 사용자의 이전 질문과 비슷한 질문을 메모리에서 검색하여 답변을 개선한다.

Last updated