LangChain: LangChain Memory 종류

calico·2025년 7월 9일

Artificial Intelligence

목록 보기
52/175

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
All views expressed here are solely my own and do not represent those of any affiliated organization.

0개의 댓글