メモリの組み込みと制御方法

LangChainにおける「メモリの組み込みと制御方法」は、LLMアプリケーションが過去の会話履歴を維持・活用するために非常に重要です。LangChainでは、Memory(メモリ)コンポーネントを使用することで、エージェントやチェーンに状態(ステート)を持たせることができます。

以下に、LangChainにおけるメモリの組み込みと制御の方法を詳しく説明します。


1. メモリの役割

LangChainのMemoryは、ユーザーとの会話履歴や入力・出力を保持し、LLMへのプロンプトにその履歴を含めることで、コンテキストを持った応答を可能にする仕組みです。


2. 主なMemoryクラスの種類(概要)

メモリタイプ 説明
ConversationBufferMemory 単純な直近会話のバッファを保持
ConversationSummaryMemory 要約された会話履歴を保持
ConversationBufferWindowMemory 指定したウィンドウサイズ内の会話履歴を保持
ConversationTokenBufferMemory トークン数に基づいた履歴の制御
CombinedMemory 複数のメモリを統合的に利用

3. メモリの組み込み方法(コード例)

例:LLMChainにメモリを組み込む

python
from langchain.llms import OpenAI from langchain.chains import ConversationChain from langchain.memory import ConversationBufferMemory # LLMの定義 llm = OpenAI(temperature=0) # メモリの作成 memory = ConversationBufferMemory() # チェーンにメモリを組み込む conversation = ConversationChain( llm=llm, memory=memory, verbose=True ) # 対話の実行 conversation.predict(input="こんにちは") conversation.predict(input="昨日の話を覚えていますか?")

このように、ConversationChainAgentExecutorなどにmemory引数で渡すことで、簡単にメモリを組み込めます。


4. メモリの制御方法

4.1 トークン数の制御

ConversationTokenBufferMemoryでは、最大トークン数を指定して履歴の長さを制御可能です。

python
from langchain.memory import ConversationTokenBufferMemory memory = ConversationTokenBufferMemory(llm=llm, max_token_limit=500)

4.2 履歴のウィンドウサイズを制限

ConversationBufferWindowMemoryでは、保持する履歴の件数(会話ターン)を制御できます。

python
from langchain.memory import ConversationBufferWindowMemory memory = ConversationBufferWindowMemory(k=3) # 直近3ターンのみ保持

4.3 要約による履歴圧縮

ConversationSummaryMemoryでは、要約によって履歴の冗長性を減らしつつコンテキストを維持します。

python
from langchain.memory import ConversationSummaryMemory memory = ConversationSummaryMemory(llm=llm)

5. 高度な制御:CombinedMemory

複数のメモリ方式を併用したい場合、CombinedMemoryを用いて、例えば「直近履歴 + 要約」を組み合わせることも可能です。

python
from langchain.memory import CombinedMemory memory = CombinedMemory(memories=[ ConversationBufferWindowMemory(k=2), ConversationSummaryMemory(llm=llm) ])

6. 状態のリセットや確認

メモリのリセット

python
memory.clear()

履歴の確認

python
print(memory.load_memory_variables({}))

まとめ

LangChainではMemoryを組み込むことで、対話システムに状態を持たせ、自然で一貫性のある応答が可能になります。用途や制約に応じて、バッファ型・ウィンドウ型・トークン型・要約型を選択・制御し、必要に応じて複数を統合することで、高度な会話管理が実現できます。

ChatGPT4o 生成日:2025/06/12