본문 바로가기
AI 작업물

langchain - memory

by useSword 2024. 5. 30.


Memory 관련 주요 클래스 및 메소드


1. ConversationBufferMemory
ConversationBufferMemory 클래스는 대화의 모든 내용을 메모리에 저장합니다.

메소드
save_context(context): 주어진 대화 내용을 메모리에 저장합니다.
load_memory_variables(inputs): 메모리에 저장된 대화 내용을 불러옵니다.

 

 


2. ConversationSummaryMemory
ConversationSummaryMemory 클래스는 대화 내용을 요약하여 메모리에 저장합니다.

메소드
save_context(context): 주어진 대화 내용을 메모리에 저장합니다.
load_memory_variables(inputs): 메모리에 저장된 대화 내용을 불러옵니다.
summarize(): 대화 내용을 요약합니다.

 

 

 


3. ConversationSummaryBufferMemory
ConversationSummaryBufferMemory 클래스는 대화 내용을 일정 토큰 수 이상으로 유지하지 않도록 요약하여 메모리에 저장합니다.

메소드
__init__(self, llm, max_token_limit, memory_key, return_messages): 객체를 초기화합니다.
save_context(context): 주어진 대화 내용을 메모리에 저장합니다.
load_memory_variables(inputs): 메모리에 저장된 대화 내용을 불러옵니다.
summarize(): 대화 내용을 요약합니다.
check_memory_limit(): 메모리의 토큰 수를 확인하고, 최대 토큰 수를 초과할 경우 요약합니다.

 

 

 

 

4. EntityMemory
EntityMemory 클래스는 대화 중에 등장하는 개체(Entity)에 대한 정보를 메모리에 저장합니다.

메소드
save_entity(entity): 주어진 개체 정보를 메모리에 저장합니다.
load_entities(): 메모리에 저장된 개체 정보를 불러옵니다.
update_entity(entity): 주어진 개체 정보를 업데이트합니다.
remove_entity(entity): 주어진 개체 정보를 삭제합니다.

 

 

 


5. CombinedMemory
CombinedMemory 클래스는 여러 메모리를 결합하여 사용할 수 있도록 합니다.

 

메소드
__init__(self, memories): 여러 메모리를 결합합니다.
save_context(context): 주어진 대화 내용을 모든 결합된 메모리에 저장합니다.
load_memory_variables(inputs): 모든 결합된 메모리에 저장된 대화 내용을 불러옵니다.

 

 

 

 

가장 헷갈리는ConversationSummaryMemory와ConversationSummaryBufferMemory의 차이점.

ConversationSummaryMemory

장점:

  1. 간단한 구현: 주기적으로 대화 내용을 요약하므로 구현이 비교적 간단합니다.
  2. 중요한 내용 유지: 대화의 주요 흐름을 요약하여 중요한 내용을 유지할 수 있습니다.
  3. 유연성: 특정 토큰 제한이 없으므로 대화의 길이에 따라 유연하게 대응할 수 있습니다.

단점:

  1. 메모리 사용량 증가: 대화 내용이 많아지면 메모리 사용량이 증가할 수 있습니다.
  2. 실시간 요약 부재: 설정된 빈도에 따라 요약이 이루어지므로, 즉각적인 요약이 필요할 경우 실시간 요약이 어렵습니다.
  3. 토큰 제한 없음: 토큰 수를 제한하지 않으므로, 매우 긴 대화에서는 메모리 관리가 어려울 수 있습니다.

ConversationSummaryBufferMemory

장점:

  1. 토큰 수 제한: max_token_limit을 설정하여 메모리 사용량을 효과적으로 관리할 수 있습니다.
  2. 자동 요약: 토큰 수가 제한을 초과할 경우 자동으로 요약을 수행하여 메모리 크기를 일정하게 유지합니다.
  3. 효율성: 메모리 사용량을 일정하게 유지함으로써 효율적인 메모리 관리가 가능합니다.

단점:

  1. 복잡성 증가: 토큰 수를 관리하고 요약하는 로직이 추가되어 구현이 더 복잡할 수 있습니다.
  2. 요약 품질 저하 가능성: 자동 요약 과정에서 중요한 내용이 생략될 가능성이 있습니다.
  3. 설정 필요: 적절한 max_token_limit 값을 설정하는 데 고민이 필요할 수 있습니다.

상황별 사용 권장

  • ConversationSummaryMemory는 다음과 같은 경우에 유용합니다:
    • 대화의 주요 흐름을 요약하여 유지하고자 할 때
    • 메모리 사용량이 큰 문제가 되지 않는 경우
    • 간단한 구현을 원할 때
  • ConversationSummaryBufferMemory는 다음과 같은 경우에 유용합니다:
    • 메모리 사용량을 엄격하게 관리해야 할 때
    • 매우 긴 대화 내용을 다루어야 할 때
    • 메모리 크기를 일정하게 유지하고자 할 때

예제 시나리오

  1. ConversationSummaryMemory 사용 예제:
    • 챗봇이 대화 내용을 요약하여 사용자에게 주기적으로 업데이트할 때 유용합니다.
    • 메모리 사용량이 상대적으로 적은 애플리케이션에서 대화의 주요 내용을 요약하여 유지할 때 적합합니다.
  2. ConversationSummaryBufferMemory 사용 예제:
    • 대화 내용이 길어질수록 메모리 사용량이 급격히 증가하는 애플리케이션에서 유용합니다.
    • 실시간으로 긴 대화를 관리해야 하며, 메모리 사용량을 제한해야 할 때 적합합니다.

결론

  • ConversationSummaryMemory는 단순하고 유연하지만 메모리 사용량이 많아질 수 있습니다.
  • ConversationSummaryBufferMemory는 메모리 사용량을 효과적으로 제한할 수 있지만 구현이 더 복잡할 수 있습니다.

'AI 작업물' 카테고리의 다른 글

(runpod) stable diffusion 템플릿 - 통합 설치팩  (0) 2024.07.11
top-p, temperature  (1) 2024.04.26