LangChainにおける「Memory(メモリ)」は、LLM(大規模言語モデル)との対話における会話履歴や状態を保持・管理するための仕組みです。これは、チャットボットやエージェントが過去のコンテキストを理解し、継続的かつ一貫性のある対話を実現するために不可欠なコンポーネントです。
1. Memoryの役割
LLMは一般にステートレス(文脈を持たない)な設計になっているため、LangChainではMemoryを導入することで、一連の会話や操作の履歴を管理し、プロンプトに再利用します。
主な役割は以下の通りです:
-
会話履歴の保存:過去の質問や応答を蓄積。
-
プロンプトへの埋め込み:保存した履歴をプロンプトテンプレートに自動挿入。
-
状態管理:対話の進行状態やユーザーの意図を保持。
2. 主なMemoryクラス
LangChainにはいくつかのメモリ実装があり、用途に応じて選択できます。
2.1 ConversationBufferMemory
ConversationBufferMemory-
特徴:すべての会話履歴を順に蓄積。
-
用途:履歴全体が必要な単純なチャットシステム。
2.2 ConversationSummaryMemory
ConversationSummaryMemory-
特徴:履歴の要約を生成して保持。
-
用途:長い会話でもプロンプトがオーバーフローしないようにしたい場合。
2.3 ConversationBufferWindowMemory
ConversationBufferWindowMemory-
特徴:最新の履歴N件のみを保持(ウィンドウ形式)。
-
用途:直近の文脈のみを反映させたい場合。
2.4 ConversationTokenBufferMemory
ConversationTokenBufferMemory-
特徴:保持する履歴のトークン数を制限。
-
用途:トークン数の制限に敏感な環境(例:OpenAI API)での利用。
2.5 VectorStoreRetrieverMemory
VectorStoreRetrieverMemory-
特徴:履歴を埋め込みベクトルとして保存し、必要時に検索してプロンプトに挿入。
-
用途:ナレッジベースのような形式で履歴を柔軟に活用したい場合。
3. Memoryの使用例
以下のようにChainにMemoryを組み込むことができます。
この例では、2回目の入力時に1回目の「こんにちは」の履歴もプロンプトに含まれます。
4. Memoryの重要性
-
自然な会話体験:文脈を理解した自然な返答が可能になります。
-
対話の一貫性:ユーザーの過去の発言を踏まえた応答ができるようになります。
-
応用性の向上:FAQボット、パーソナルアシスタント、マルチステップ推論などに有効です。
まとめ
LangChainの「Memory」は、ステートレスなLLMに会話的な文脈記憶を持たせるための機構であり、チャットボットやエージェント型アプリケーションの開発において不可欠です。用途や性能要件に応じて、複数のMemoryクラスから選択・組み合わせることができます。
ChatGPT4o 生成日:2025/06/12