eb Ever felt like your LLM needs a memory?
LangChainも同じような感覚を持っています。完全なチャットの転写全体から要約、エンティティ、ベクトルを用いたリコールまで、重要な情報を覚えているかのようにステートレスなモデルを感じさせるための、いくつかの方法を提供します。
大規模言語モデルは本質的にステートレスです。送信するすべてのリクエストは、5分前に何が議論されたかを覚えていない空白の状態で届きます。整然とした会話を作り出すには、過去のメッセージを手動でモデルへ再入力する必要があります。
LangChainはこの履歴を管理するために、いくつかの異なるパターンを提供します。適切なものを選ぶことは、完璧な文脈を提供することと、各トークンのコストを管理することとのバランスです。
LangChain Memory Types
- 迅速で高精度なサポートタスクには、転写パターンを使用します。
- 予測可能でタスク指向の対話には、ウィンドウパターンを使用します。
- 長く創造的または協働的なセッションには、要約パターンを使用します。
- ユーザーの嗜好を追跡する個人アシスタントには、エンティティパターンを使用します。
- 知識集約型の大量の履歴を持つシステムには、ベクトル検索パターンを使用します。
転写パターン
会話を維持する最も簡単な方法は、直接的なバッファを用いることです。これは、発話されたすべての言葉を、順序通りに逐語的に保存します。
- ユーザーからのすべてのメッセージとAIからのすべての応答が、逐語的に保存されます。
- 次のターンのために、全履歴がプロンプトに追加されます。
- それは、モデルに可能な限り最も正確で生のコンテキストを提供します。
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context({"input": "What is the capital of France?"}, {"output": "The capital of France is Paris."})
memory.load_memory_variables({})
この機能の例として、パスワードをリセットするのを手伝うカスタマーサポートボットがあります。ボットは特定のメールアドレスとエラーコードを覚えておく必要があります。