Warnung
セマンティック カーネル エージェントのメモリ機能は試験段階であり、変更される可能性があり、フィードバックと評価に基づいてのみ最終処理されます。
多くの場合、エージェントは重要な情報を覚えておくことが重要です。 この情報は、1 つの会話の期間中、または複数の会話にまたがる長期にわたって保持される場合があります。 情報は、ユーザーとの対話から学習され、そのユーザーに固有の場合があります。
この情報を思い出と呼びます。
メモリをキャプチャして保持するために、スレッドに追加されたメッセージからメモリを抽出し、必要に応じてそれらのメモリをエージェントに提供するために、 AgentThread で使用できるコンポーネントをサポートします。
エージェント メモリに Mem0 を使用する
Mem0 は、LLM アプリケーション向けの自己改善型メモリ レイヤーであり、パーソナライズされた AI エクスペリエンスを実現します。
Microsoft.SemanticKernel.Memory.Mem0Providerは Mem0 サービスと統合されているため、エージェントは複数のスレッドにわたるユーザー設定とコンテキストを記憶できるため、シームレスなユーザー エクスペリエンスを実現できます。
スレッドに追加された各メッセージは、メモリを抽出するために Mem0 サービスに送信されます。 エージェントの呼び出しごとに、指定されたユーザー要求に一致するメモリが Mem0 に照会され、その呼び出しのエージェント コンテキストにメモリが追加されます。
Mem0 メモリ プロバイダーは、複数のスレッドにわたってユーザーに関するメモリを長期的に格納できるように、ユーザー ID で構成できます。 また、スレッド ID を使用して構成したり、エージェント スレッドのスレッド ID を使用したりして、単一のスレッドにのみアタッチされている短期メモリを許可することもできます。
このコンポーネントの使用方法の例を次に示します。
// Create an HttpClient for the Mem0 service.
using var httpClient = new HttpClient()
{
BaseAddress = new Uri("https://api.mem0.ai")
};
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Token", "<Your_Mem0_API_Key>");
// Create a Mem0 provider for the current user.
var mem0Provider = new Mem0Provider(httpClient, options: new()
{
UserId = "U1"
});
// Clear any previous memories (optional).
await mem0Provider.ClearStoredMemoriesAsync();
// Add the mem0 provider to the agent thread.
ChatHistoryAgentThread agentThread = new();
agentThread.AIContextProviders.Add(mem0Provider);
// Use the agent with mem0 memory.
ChatMessageContent response = await agent.InvokeAsync("Please retrieve my company report", agentThread).FirstAsync();
Console.WriteLine(response.Content);
Mem0Provider オプション
Mem0Providerは、動作をカスタマイズするためのさまざまなオプションを使用して構成できます。
オプションは、Mem0Provider コンストラクターに Mem0ProviderOptions クラスを使用して提供されます。
範囲設定オプション
Mem0 は、アプリケーション、エージェント、スレッド、ユーザーごとにメモリのスコープを設定する機能を提供します。
これらのスコープの ID を提供するオプションを使用して、メモリをこれらの ID の下の mem0 に格納できます。
Mem0ProviderOptionsのApplicationId、AgentId、ThreadId、およびUserIdプロパティを参照してください。
場合によっては、サービス ベースのエージェントを使用するときに、サーバー側エージェント スレッドのスレッド ID を使用することが必要になる場合があります。
ただし、 Mem0Provider オブジェクトの作成時にスレッドがまだ作成されていない可能性があります。
この場合、 ScopeToPerOperationThreadId オプションを trueに設定すると、 Mem0Provider は AgentThread が使用可能になったときに id を使用します。
コンテキスト プロンプト
ContextPrompt オプションを使用すると、メモリにプレフィックスが付いた既定のプロンプトをオーバーライドできます。
このプロンプトは、AI モデルに提供されるメモリをコンテキスト化するために使用され、AI モデルがそれらが何であるか、およびその使用方法を認識します。
Short-Term コンテキストにホワイトボード メモリを使用する
ホワイトボード メモリ機能を使用すると、チャット履歴が切り捨てられた場合でも、エージェントは会話から最も関連性の高い情報をキャプチャして保持できます。
会話に追加された各メッセージは、要件、提案、意思決定、アクションを抽出するために、 Microsoft.SemanticKernel.Memory.WhiteboardProvider によって処理されます。
これらはホワイトボードに格納され、各呼び出しの追加コンテキストとしてエージェントに提供されます。
Whiteboard Memory を設定する方法の例を次に示します。
// Create a whiteboard provider.
var whiteboardProvider = new WhiteboardProvider(chatClient);
// Add the whiteboard provider to the agent thread.
ChatHistoryAgentThread agentThread = new();
agentThread.AIContextProviders.Add(whiteboardProvider);
// Simulate a conversation with the agent.
await agent.InvokeAsync("I would like to book a trip to Paris.", agentThread);
// Whiteboard should now contain a requirement that the user wants to book a trip to Paris.
ホワイトボード メモリの利点
- Short-Term コンテキスト: 進行中の会話の目標に関する重要な情報を保持します。
- チャット履歴の切り捨てを許可: チャット履歴が切り捨てられた場合の重要なコンテキストの維持をサポートします。
WhiteboardProvider オプション
WhiteboardProviderは、動作をカスタマイズするためのさまざまなオプションを使用して構成できます。
オプションは、WhiteboardProvider コンストラクターに WhiteboardProviderOptions クラスを使用して提供されます。
最大ホワイトボードメッセージ数
ホワイトボードに保持するメッセージの最大数を指定します。 最大値に達すると、価値の低いメッセージが削除されます。
コンテキストプロンプト
ホワイトボードの内容を AI モデルに提供する場合は、メッセージの内容を記述することが重要です。
この設定により、 WhiteboardProviderに組み込まれている既定のメッセージングをオーバーライドできます。
WhiteboardEmptyPrompt
ホワイトボードが空の場合、 WhiteboardProvider は空であることを示すメッセージを出力します。
この設定により、 WhiteboardProviderに組み込まれている既定のメッセージングをオーバーライドできます。
メンテナンスプロンプトテンプレート
WhiteboardProviderでは、AI モデルを使用して、ホワイトボード上のメッセージを追加/更新/削除します。
これらの更新を行うプロンプトが組み込まれています。
この設定により、この組み込みプロンプトをオーバーライドできます。
テンプレートでは、次のパラメーターを使用できます。
-
{{$maxWhiteboardMessages}}: ホワイトボードで許可されるメッセージの最大数。 -
{{$inputMessages}}: ホワイトボードに追加する入力メッセージ。 -
{{$currentWhiteboard}}: ホワイトボードの現在の状態。
Mem0 メモリとホワイトボード メモリを組み合わせて利用する
同じエージェントで Mem0 メモリとホワイトボード メモリの両方を使用して、長期メモリ機能と短期メモリ機能のバランスを取ることができます。
// Add both Mem0 and whiteboard providers to the agent thread.
agentThread.AIContextProviders.Add(mem0Provider);
agentThread.AIContextProviders.Add(whiteboardProvider);
// Use the agent with combined memory capabilities.
ChatMessageContent response = await agent.InvokeAsync("Please retrieve my company report", agentThread).FirstAsync();
Console.WriteLine(response.Content);
これらのメモリ機能を組み合わせることにより、エージェントはユーザーに対してよりパーソナライズされたコンテキスト対応エクスペリエンスを提供できます。
次のステップ
間もなく公開
詳細については、近日公開予定です。
間もなく公開
詳細については、近日公開予定です。