警告
語意核心代理程式記憶體功能是實驗性的,可能會變更,而且只會根據意見反應和評估完成。
代理人通常必須記得重要資訊。 此資訊可能會在對話期間或更長的時間內保留,以涵蓋多次對話。 此資訊可能會從與使用者互動中學到,而且可能專屬於該使用者。
我們稱這些資訊為記憶。
為了擷取和保留記憶體,我們支援可與 搭配 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
上的ApplicationId
、AgentId
、ThreadId
和 UserId
屬性。
在某些情況下,您可能會想要在使用服務型代理程式時,使用伺服器端代理程式線程的線程標識碼。
不過,在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);
藉由結合這些記憶體功能,代理程式可以為使用者提供更個人化和內容感知的體驗。
後續步驟
即將推出
更多信息即將推出。
即將推出
更多信息即將推出。