NLP 자연어처리

Langchain Memory 종류

수진97 2025. 11. 3. 14:26

안녕하세요~!

오늘은 Langchain의 Memory에 대해 포스팅해 보겠습니다!

 

1. Memory 란?

- AI가 계속해서 대화를 이어나가기 위해 이전 대화를 기억하는 장소를 의미

- 이전 질문과 답변에 대해 Memory에 저장하고, 이를 Prompt에 포함시킴.

- 메모리를 사용하기 위해 LLM과 Memory를 chain으로 엮어야 함.

 

 

1) ConversationBufferMemory

- 모든 대화 내용 그대로 순차적 저장

- 텍스트 누적 방식으로 LLM에 전달됨.

- 가장 기본적인 메모리 / 대화 길이가 짧고, 단순하고 적은 맥락 유지에 적합

 

 

=> ConversationBufferMemory()를 호출해 memory 변수에 담고,

ConversationChain(llm, memory)으로 앞서 선언한 llm과 memory를 엮어줌.

 

=> chain.run(msg)로 대화

 

=> 모든 대화 내용이 차례대로 memory 안에 담겨있는 것을 확인할 수 있음.

 

 

 

 

 

2) ConversationSummaryMemory

- 대화를 요약해서 저장

- 긴 대화이거나, 리소스 절약이 필요할 때 사용

- 프롬프트에 전체 내용을 붙이지 않아 토큰 절약 가능

- 요약은 2번째 대화부터 수행하고, 요약 범위의 경우 이전 요약 + 새 메시지들만 요약해서 업데이트하는 형식

 

 

=> ConversationSummaryMemory(llm)를 호출해 memory 변수에 담음.

=> 앞서 BufferMemory와 달리 요약을 해줄 요약용 LLM이 필요하므로 파라미터로 llm을 담아 메서드 호출

 

=> BufferMemory와 달리 llm이 대화를 요약한 내용이 출력됨.

 

 

 

 

 

3) ConversationBufferWindowMemory

- 최근 N턴만 기억

- 메모리 용량 조절 가능(k=숫자)

- 메모리 크기를 고정해 두고 최근 N개만 기억 -> 새로운 대화가 저장되면, 가장 오래된 대화는 사라짐.

(즉, 과거 내용은 자동으로 삭제되고, 메모리에는 n개의 대화 내용만 저장됨)

- 최신 문맥만 중요한 경우 (ex. 챗봇)

 

=> ConversationBufferWindowMemory(k = n)를 호출해 memory 변수에 담음.

=> BufferWindowMemory의 경우, 파라미터로 최근 n턴의 n값을 k에 담아 매서드 호출

 

=> 대화 잘하다가 N턴이 넘어가니 내가 누군지 잘 기억 못 하는 llm... (급서운ㅜ)