Memory(会話履歴の管理)

LangChainにおける「Memory(メモリ)」は、LLM(大規模言語モデル)との対話における会話履歴や状態を保持・管理するための仕組みです。これは、チャットボットやエージェントが過去のコンテキストを理解し、継続的かつ一貫性のある対話を実現するために不可欠なコンポーネントです。


1. Memoryの役割

LLMは一般にステートレス(文脈を持たない)な設計になっているため、LangChainではMemoryを導入することで、一連の会話や操作の履歴を管理し、プロンプトに再利用します。

主な役割は以下の通りです:

  • 会話履歴の保存:過去の質問や応答を蓄積。

  • プロンプトへの埋め込み:保存した履歴をプロンプトテンプレートに自動挿入。

  • 状態管理:対話の進行状態やユーザーの意図を保持。


2. 主なMemoryクラス

LangChainにはいくつかのメモリ実装があり、用途に応じて選択できます。

2.1 ConversationBufferMemory

  • 特徴:すべての会話履歴を順に蓄積。

  • 用途:履歴全体が必要な単純なチャットシステム。

2.2 ConversationSummaryMemory

  • 特徴:履歴の要約を生成して保持。

  • 用途:長い会話でもプロンプトがオーバーフローしないようにしたい場合。

2.3 ConversationBufferWindowMemory

  • 特徴:最新の履歴N件のみを保持(ウィンドウ形式)。

  • 用途:直近の文脈のみを反映させたい場合。

2.4 ConversationTokenBufferMemory

  • 特徴:保持する履歴のトークン数を制限。

  • 用途:トークン数の制限に敏感な環境(例:OpenAI API)での利用。

2.5 VectorStoreRetrieverMemory

  • 特徴:履歴を埋め込みベクトルとして保存し、必要時に検索してプロンプトに挿入。

  • 用途:ナレッジベースのような形式で履歴を柔軟に活用したい場合。


3. Memoryの使用例

以下のようにChainにMemoryを組み込むことができます。

python
from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain from langchain.llms import OpenAI memory = ConversationBufferMemory() conversation = ConversationChain( llm=OpenAI(), memory=memory, verbose=True ) conversation.predict(input="こんにちは") conversation.predict(input="天気はどう?")

この例では、2回目の入力時に1回目の「こんにちは」の履歴もプロンプトに含まれます。


4. Memoryの重要性

  • 自然な会話体験:文脈を理解した自然な返答が可能になります。

  • 対話の一貫性:ユーザーの過去の発言を踏まえた応答ができるようになります。

  • 応用性の向上:FAQボット、パーソナルアシスタント、マルチステップ推論などに有効です。


まとめ

LangChainの「Memory」は、ステートレスなLLMに会話的な文脈記憶を持たせるための機構であり、チャットボットやエージェント型アプリケーションの開発において不可欠です。用途や性能要件に応じて、複数のMemoryクラスから選択・組み合わせることができます。

ChatGPT4o 生成日:2025/06/12