共用方式為


使用記憶體與 Agents 交互

警告

語意核心代理程式記憶體功能是實驗性的,可能會變更,而且只會根據意見反應和評估完成。

代理人通常必須記得重要資訊。 此資訊可能會在對話期間或更長的時間內保留,以涵蓋多次對話。 此資訊可能會從與使用者互動中學到,而且可能專屬於該使用者。

我們稱這些資訊為記憶。

為了擷取和保留記憶體,我們支援可與 搭配 AgentThread 使用的元件,從任何新增至線程的訊息中擷取記憶體,並視需要將這些記憶體提供給代理程式。

使用 Mem0 作為代理的記憶體

Mem0 是 LLM 應用程式的自我改善記憶體層,可啟用個人化的 AI 體驗。

Microsoft.SemanticKernel.Memory.Mem0Provider Mem0 服務整合,可讓代理程式記住跨多個線程的使用者喜好設定和內容,進而提供順暢的用戶體驗。

新增至線程的每個訊息都會傳送至 Mem0 服務以擷取記憶體。 針對每個代理程式調用,會查詢 Mem0 以取得符合所提供使用者要求的記憶體,並將任何記憶體新增至該調用的代理程序內容。

Mem0 記憶體提供者可以設定用戶 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可以使用各種選項來設定 ,以自定義其行為。 選項會使用 Mem0ProviderOptions 類 提供給 Mem0Provider 建構函式。

範圍設定選項

Mem0 可讓您依應用程式、代理程式、線程和使用者設定記憶體範圍。

選項可用來提供這些範圍的標識碼,讓記憶體可以儲存在這些標識符下的 mem0 中。 請參閱Mem0ProviderOptions上的ApplicationIdAgentIdThreadIdUserId 屬性。

在某些情況下,您可能會想要在使用服務型代理程式時,使用伺服器端代理程式線程的線程標識碼。 不過,在Mem0Provider物件正在被建構時,線程可能尚未建立。 在此情況下,您可以將ScopeToPerOperationThreadId選項設定為true,且Mem0Provider會在可用時使用AgentThread的識別碼。

背景提示

選項 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可以使用各種選項來設定 ,以自定義其行為。 選項會使用 WhiteboardProviderOptions 類 提供給 WhiteboardProvider 建構函式。

MaxWhiteboardMessages

指定要在白板上保留的訊息數目上限。 達到最大值時,將會移除較不有價值的訊息。

ContextPrompt

將白板內容提供給 AI 模型時,請務必描述訊息的用途。 此設定允許覆寫WhiteboardProvider中預設內建的訊息。

白板空白提示

當白板是空的時,會 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);

藉由結合這些記憶體功能,代理程式可以為使用者提供更個人化和內容感知的體驗。

後續步驟

即將推出

更多信息即將推出。

即將推出

更多信息即將推出。