LangChain: LangChain Memory 종류

calico·2025년 7월 9일

Artificial Intelligence

목록 보기
52/143

LangChain Memory 종류 별 특징


  • LangChain에서 Memory는 LLM 기반 애플리케이션의 “대화 컨텍스트” 유지에 핵심적인 역할을 합니다.

  • 기본적으로 ConversationBufferMemory(단순히 대화 이력을 모두 저장)를 가장 많이 쓰고, 더 스마트한 컨텍스트 관리가 많아질수록 Summary Memory, Entity Memory, 그 외 다양한 Memory 객체를 사용할 수 있습니다.


종류특징/설명대표적 사용 예시
ConversationBufferMemory대화 이력(입력/출력)을 순차적으로 계속 기록.
컨텍스트 최대량에 도달할 때까지 버퍼처럼 저장
일반 챗봇, 최근 몇 turn까지만 문맥 반영
ConversationSummaryMemory전체 대화 내용을 요약해서 간결한 컨텍스트로 LLM에 제공 (gpt-3.5 등으로 자동 요약)긴 대화에도 ‘핵심 맥락’만 유지할 때
코스트 절감
ConversationEntityMemory대화 중 등장한 사람/장소/사물 등 엔터티(주체)를 추출·정리해서 LLM 컨텍스트에 명확 전달“OOO는 누구야?”, “방금 언급한 제품 다시 설명해줘”
ConversationBufferWindowMemory최근 N개의 질문/응답만을 기억 (윈도우 방식의 짤막한 버퍼)최근 turn만 필요한 챗봇 (메모리 절약)
CombinedMemory여러 메모리 객체를 합쳐서 개별 특성을 동시에 사용엔터티+요약, 혹은 버퍼+엔터티 등 복합 운영



1. ConversationBufferMemory


  • 원리: 전형적인 대화 기록(입‧출력 쌍)을 모두 저장

  • 장점: 단순, 직관적

  • 단점: 대화가 길어질수록 프롬프트/토큰이 너무 커질 수 있음



2. ConversationSummaryMemory


  • 원리: 전체 대화를 요약(기사처럼 핵심만 추리기)해서 사실상 하나의 “짧은 요약문”으로만 LLM에 넘김

  • 장점: 대화 길이 무관하게 문맥 유지, 비용/속도 효율

  • 단점: 상세 내용 잃을 수 있음

  • 예시 코드:

    from langchain.memory import ConversationSummaryMemory
    from langchain.llms import OpenAI
    
    memory = ConversationSummaryMemory(
        llm=OpenAI(),    # 요약에 사용될 LLM (요약 비용 쿼리 발생)
    )



3. ConversationEntityMemory


  • 원리: 대화에서 등장하는 사람, 장소, 제품명, 회사명 등 ‘고유 엔터티’를 자동 추출하여 별도 관리
  • 장점: “OOO가 누구야?”, “방금 말한 A 회사가 뭐지?” 등 맥락적 질문에 맞춤 답변

  • 단점: 엔터티 추출 정확도에 따라 컨텍스트 품질이 다름

  • 예시 코드:

    from langchain.memory import ConversationEntityMemory
    
    memory = ConversationEntityMemory(
        llm=OpenAI(),    # 엔터티 추출 자동화에 사용될 LLM
    )



4. ConversationBufferWindowMemory


  • 원리: 최근 N개의 대화만 저장(메모리 윈도우 이동), 오래된 대화는 잊음

  • 장점: 토큰 제한 걱정↓, 최근 맥락만 필요할 때

  • 예시 코드:

    from langchain.memory import ConversationBufferWindowMemory
    
    memory = ConversationBufferWindowMemory(k=5)  # 최근 5-turn만 기억



5. CombinedMemory


  • 원리: Memory 종류를 여러 개 조합해서 파이프라인 적용

  • 예시 코드:

    from langchain.memory import CombinedMemory, ConversationBufferMemory, ConversationEntityMemory
    
    memory = CombinedMemory(
        memories=[
            ConversationBufferMemory(),
            ConversationEntityMemory(llm=OpenAI())
        ]
    )



실제 번역 예제 적용시 고려


  • SummaryMemory : 긴 다국어 대화를 요약+연속 번역할 때 적합

  • EntityMemory : 여러 인물/제품/전문용어가 반복 등장하는 번역 대화(특히 질의응답, 기술문서 번역 등)에 유용

  • BufferWindowMemory : “직전 맥락” 파악만 중요하거나 토큰 아끼고 싶을 때



정리 TIP


  • 무조건 하나만 고집X, 상황/서비스 목적 따라 자유 조합 가능!

  • 대부분의 메모리 객체는 LLM 또는 체인(Chain, Agent)에서 memory=... 옵션으로 바로 적용됨





ConversationBufferMemory란?


예제에서 사용한 memory”는 바로 아래 코드 부분에서 사용된 ConversationBufferMemory입니다.

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory()
...
translation_chain = create_translation_chain(vector_db, memory=memory)

  • 특징

    • 유저와의 대화이력(입력/출력 쌍 전체)을 순차적으로 모두 저장합니다.

    • 체인(Chain) 또는 LLM에 넣어주면 자동으로 대화 ‘히스토리’가 prompt에 반영됩니다.

    • 그래서 "방금 전에 쓴 말"이나 "이전 번역"처럼 최근 대화 내용을 참고해야 할 때 유용합니다.

  • 장점

    • 구현이 쉽고, 특별한 설정 없이도 사용할 수 있습니다.

    • 대화가 짧거나, 단순히 연속 대화 맥락만 유지하면 되는 번역 기능에 적합합니다.

  • 단점

    • 대화가 길어지면 prompt가 커지고 토큰 비용이 늘어나므로, 긴 대화나 대규모 챗봇에는 SummaryMemory/EntityMemory 등이 더 효율적일 수 있습니다.

“위 코드에서 사용한 memory는 ConversationBufferMemory로, 대화 이력을 그대로 저장‧이어주는 가장 기본적인 메모리입니다!”

profile
https://velog.io/@corone_hi/posts

0개의 댓글