ConversationBufferMemory

LangChainにおけるConversationBufferMemoryは、エージェントやチェーンがユーザーとの過去の会話履歴(コンテキスト)を保持するためのメモリ機構です。これにより、LLMは一貫した対話や文脈に基づいた応答を実現できます。


ConversationBufferMemoryとは何か

ConversationBufferMemory は、会話の履歴を単純なテキストバッファとして記憶するメモリクラスです。以下の特徴を持っています:

  • 会話履歴全体を1つの文字列として蓄積

  • 入力と出力のペアを時系列で保持

  • 過去のやりとりをそのままプロンプトに挿入する形式


主な用途

  • チャットボットの一貫性ある応答

  • 会話の履歴を踏まえた文脈の維持

  • 会話履歴の手動管理なしでの対話構築


基本構成と使い方

1. インポートと初期化

python
from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory()

オプションで memory_key(プロンプトで使う変数名)や return_messages(Trueで会話履歴をmessage型で保持)を指定できます。

python
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

2. LLMChainへの組み込み例

python
from langchain import LLMChain from langchain.prompts import PromptTemplate from langchain.chat_models import ChatOpenAI llm = ChatOpenAI(temperature=0) prompt = PromptTemplate( input_variables=["input", "chat_history"], template="以下はこれまでの会話です:\n{chat_history}\nユーザー: {input}\nアシスタント:" ) chain = LLMChain( llm=llm, prompt=prompt, memory=ConversationBufferMemory(memory_key="chat_history") )

このようにすることで、inputの度に過去の会話履歴(chat_history)がプロンプトに渡されます。


内部構造(基本的な挙動)

内部的には、以下のように動作します:

  1. 入力 (input) と出力 (output) をペアで記録

  2. 蓄積された履歴は、以下のような形式でプロンプトに挿入される:

makefile
ユーザー: こんにちは アシスタント: こんにちは。今日はどのようなご用件ですか? ユーザー: 明日の天気は? アシスタント: 東京では明日は晴れの予報です。

この形式により、LLMが自然な会話の流れを理解できるようになります。


注意点と制約

  • 履歴が長くなるとトークン数を圧迫するため、大規模な会話には向きません。

  • 履歴の削除・制限を手動で実装するには、別のメモリ(例:ConversationBufferWindowMemory)を使うことが推奨されます。


関連する他のMemoryとの比較

メモリ種別 特徴
ConversationBufferMemory 履歴全体をテキストで保持。簡易・小規模向け。
ConversationBufferWindowMemory 最新N件のみ保持。トークン制限に対応。
ConversationSummaryMemory 履歴を要約して保持。長期的な文脈管理に強い。
ConversationTokenBufferMemory トークン数で履歴を制限。プロンプト長管理がしやすい。

まとめ

  • ConversationBufferMemory は LangChainにおける最も基本的な会話メモリです。

  • 履歴をテキストとして蓄積し、文脈を保ちながらLLMに渡すことで、自然な会話を可能にします。

  • より複雑なユースケースでは、他のMemoryとの使い分けが有効です。

ChatGPT4o 生成日:2025/06/12