본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~)/AI

1일1개 (42) - 랭체인 메모리 관리 모듈

by poetDeveloper 2024. 9. 26.
반응형

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#42. 랭체인 메모리 관리 모듈

랭체인에서 메모리를 관리하는 여러 모듈이 존재한다. 이들을 적절히 사용해야 효율적인 맥락 관리가 가능하다. 오늘은 랭체인의 메모리 관리 모듈에 대해 알아보자. 영어로 써놓은 것은 단순히 번역이 아니라, 모듈 이름이니 이런식으로 불러와야한다.

from langchain.memory import ConversationBufferMemory

from langchain.memory import ConversationBufferWindowMemory

...

 

 

1. 대화 버퍼 메모리 (ConversationBufferMemory)

대화 버퍼 메모리는 대화의 모든 내용을 "순차적으로 기록"해 기억하는 가장 기본적인 형태의 메모리이다. 이전의 모든 대화를 그대로 유지하고 제공하므로 사용자는 맥락을 쉽게 연결할 수 있다.

  • 특징 : 모든 대화를 그대로 저장하기 때문에 긴 대화를 할수록 메모리 용량이 커질 수 있다.
  • 사용 상황 : 전체 대화의 흐름을 계속 기억할 필요가 있을 때 유용하다.

2. 대화 버퍼 윈도우 메모리 (ConversationBufferWindowMemory)

대화 버퍼 윈도우 메모리는 전체 대화를 저장하는 대신, 최근 대화의 일부만을 기억한다. (ex. 마지막 5개의 답변)

  • 특징 : 오래된 대화는 잊고 최근 대화만 기록함으로써 메모리 부담을 줄인다.
  • 사용 상황 : 대화가 길어지더라도 최근 맥락만 필요할 때 적합하며, 리소스도 효율적이다.

3. 대화 토큰 버퍼 메모리 (ConversationTokenBufferMemory)

토큰 기반 메모리로, 대화의 텍스트를 토큰 단위로 관리한다. 일정 수의 토큰을 초과하면 가장 오래된 토큰부터 제거하는 방식이다.

  • 특징 : GPT 모델 자체가 토큰 단위로 텍스트를 처리하니까 특정 토큰 수 내에서 처리할 때 효율적이다. 예를 들면, 내가 돈이 없어서 많은 토큰을 못쓴다면 특정 토큰 내에서 처리해야한다.
  • 사용 상황 : 토큰에 제한을 둘 때 유용하다. 특히 큰 GPT 모델을 사용하는 경우 적합하다.

4. 대화 엔티티 메모리 (ConversationEntityMemory)

대화에서 등장하는 특정 엔티티(ex. 사람, 장소, 개념 등)를 추적하며 기억하는 메모리이다. 대화 도중 특정 엔티티에 대한 정보를 기억하고, 다시 언급될 때 그 정보를 활용한다.

  • 특징 : 개별 대화 중 중요한 엔티티를 계속 기억하므로 대화의 맥락을 깊게 이해할 수 있다.
  • 사용 상황 : 대화 중 특정 인물이나 객체에 대한 정보가 자주 언급되거나, 이들의 정보를 계속 쓰일 때 유용하다.

5. 대화 지식그래프 메모리 (ConversationKGMemory)

대화 도중 추출된 정보를 지식 그래프 형식으로 저장하여 관련성을 구조화한다. 정보를 개념-관계로 연결해 기억한다.

  • 특징 : 단순히 문장을 기억하는 것이 아니라, 정보의 관계를 파악하고 이를 통해 복잡한 맥락을 이해하는 능력을 향상시킨다.
  • 사용 상황 : 추론이나 복잡한 관계를 처리할 때 유용하다.

6. 대화 요약 메모리 (ConversationSummaryMemory)

전체 대화를 요약하여 저장한다. 전체 내용을 모두 저장하지 않고, 중요한 포인트를 요약해 기억한다.

  • 특징 : 긴 대화를 효율적으로 관리하고, 요약된 정보로 대화의 흐름을 유지한다.
  • 사용 상황 : 긴 대화를 효율적으로 요약하고, 중요한 맥락만 유지하고 싶을 때 유용하다.

7. 벡터저장소 검색 메모리 (VectorStoreRetrieverMemory)

벡터로 변환된 정보를 저장하고, 필요할 때 검색하여 활용하는 메모리이다. 대화에서 추출한 텍스트 정보를 벡터로 변환하여 벡터 DB에 저장하고, 벡터들 간의 유사성을 기반으로 정보를 검색한다.

  • 특징 : 의미론적 유사성을 기반으로 한 검색이 가능하므로, 대화에서 비슷한 의미의 내용을 쉽게 찾아 활용한다.
  • 사용 상황 : 문맥이나 의미 기반의 정보 검색 및 활용이 필요할 때 적합하다.

 

가장 유용한 메모리 모듈은 ??

엄청난 메모리 모듈들을 간단하게 살펴보았다. 그럼 제일 인기있는 모듈이 무엇일까 ?? 아래 순서는 인기 순위라기보다는 .... 제일 많이 쓰이는 모듈 3개이다. 인기 순위도 아마 아래 순서일 것 같은데, 오피셜은 아님.

 

1. 대화 버퍼 메모리 (ConversationBufferMemory)

  • 간단하고 직관적 : 대화 내역을 단순히 버퍼에 저장하기 때문에 사용하기도 쉽다. 복잡한 처리도 없고, 대화 전체를 기록하고 사용자가 쉽게 이를 참조할 수 있다. 그래서 챗봇이나 고객 지원 시스템, FAQ 봇 등에서 사용된다. 대화형 애플리케이션이 대화의 전체 흐름을 유지해야 하는 경우에 특히 적합하다.

 

2. 대화 요약 메모리 (ConversationSummaryMemory)

  • 효율적 : 전체 대화를 저장하는 대신 요약하여 저장하므로 효율적이다. 긴 대화에서도 효율적으로 맥락을 유지할 수 있고 메모리 부담도 줄일 수 있다.
  • 긴 대화에 적합 : 요약 기능은 길어지는 대화에서 맥락을 유지하는 데 유용하다. 그래서 긴 대화에서 자주 사용되고, 교육용 챗봇, 상담 시스템 등에서 긴 대화의 중요한 부분을 요약해주는 역할을 수행한다.

 

3. 벡터저장소 검색 메모리 (VectorStoreRetrieverMemory)

  • 유사성 기반 대화 : 벡터화된 데이터를 저장하고, 유사한 정보를 검색하는 기능을 제공하므로 의미상 유사한 정보를 기반으로 대화를 이어갈 수 있다. 단순한 키워드 검색이 아닌 의미 유사성에 기반한 검색이 가능한 것이 큰 장점이다.
  • AI 모델과 높은 호환성 : 언어 모델의 임베딩을 활용하여 문맥을 의미적으로 분석하고 검색할 수 있으므로, 다양한 챗봇과 AI 시스템에서 복잡한 질의응답 시스템을 구축할 때 유용하다. 그래서 대규모 지식을 가진 검색 시스템, 문서 검색 AI, FAQ 봇 등에서 "의미적으로 관련된 정보"를 찾을 때 효과적이다.

요약

  • 대화 버퍼 메모리 : 단순성, 직관성이 좋다. 전체 대화 흐름을 유지하는 데 효과적
  • 대화 요약 메모리 : 긴 대화에서 중요 정보를 요약하여 효율성을 높임. 특히 긴 대화를 처리하는 시스템에서 유용.
  • 벡터저장소 검색 메모리 : 의미 기반 검색이 가능해 대규모 데이터셋에서 정보를 빠르게 검색해야 하는 시스템에서 유용함.

 

그럼 DB 없이 메모리 모듈에만 저장해 ??

아니다. 이건 RAM을 쓰는 일시저장용이다. 램에 저장해서 빠르게 데이터를 읽고 쓸 수 있다. 그러나 장기적으로는 DB에 저장해서 사용해야한다. 이전 대화기록을 불러오기 위해 SQL DB, NOSQL 등을 이용해야한다.

반응형