Dela via


Använda minne med agenter

Varning

Funktionen för semantisk kernelagentminne är experimentell, kan komma att ändras och kommer endast att slutföras baserat på feedback och utvärdering.

Det är ofta viktigt att en agent kommer ihåg viktig information. Den här informationen kan behållas under en konversation eller längre tid för att sträcka sig över flera konversationer. Informationen kan läras från interaktion med en användare och kan vara specifik för den användaren.

Vi kallar det här informationsminnen.

För att samla in och behålla minnen stöder vi komponenter som kan användas med en AgentThread för att extrahera minnen från alla meddelanden som läggs till i tråden och tillhandahålla dessa minnen till agenten efter behov.

Använda Mem0 för agentminne

Mem0 är ett självförändrande minneslager för LLM-program som möjliggör anpassade AI-upplevelser.

Integreras Microsoft.SemanticKernel.Memory.Mem0Provider med Mem0-tjänsten så att agenter kan komma ihåg användarinställningar och kontext över flera trådar, vilket möjliggör en sömlös användarupplevelse.

Varje meddelande som läggs till i tråden skickas till Mem0-tjänsten för att extrahera minnen. För varje agentanrop efterfrågas Mem0 efter minnen som matchar den angivna användarbegäran och eventuella minnen läggs till i agentkontexten för det anropet.

Mem0-minnesprovidern kan konfigureras med ett användar-ID för att tillåta lagring av minnen om användaren på lång sikt över flera trådar. Det kan också konfigureras med ett tråd-ID eller för att använda tråd-ID:t för agenttråden för att tillåta kortsiktiga minnen som bara är kopplade till en enda tråd.

Här är ett exempel på hur du använder den här komponenten.

// 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-alternativ

Mem0Provider Kan konfigureras med olika alternativ för att anpassa dess beteende. Alternativ tillhandahålls med hjälp av Mem0ProviderOptions klassen till Mem0Provider konstruktorn.

Omfångsalternativ

Mem0 ger möjlighet att avgränsa minnen genom program, agent, tråd och användare.

Det finns alternativ för att tillhandahålla ID:er för dessa omfång, så att minnena kan lagras i mem0 under dessa ID:er. Se egenskaperna ApplicationId, AgentId, ThreadId och UserIdMem0ProviderOptions.

I vissa fall kanske du vill använda tråd-ID:t för agenttråden på serversidan när du använder en tjänstbaserad agent. Tråden kanske dock inte har skapats ännu när objektet Mem0Provider skapas. I det här fallet kan du ange ScopeToPerOperationThreadId alternativet till true, och Mem0Provider kommer att använda ID:t för AgentThread när det är tillgängligt.

Kontextuppmaning

Med ContextPrompt alternativet kan du åsidosätta standardprompten som är prefix för minnen. Uppmaningen används för att kontextualisera de minnen som tillhandahålls till AI-modellen, så att AI-modellen vet vad de är och hur de ska användas.

Använda Whiteboard-minne för Short-Term-kontext

Funktionen whiteboardminne gör att agenter kan samla in och behålla den mest relevanta informationen från en konversation, även när chatthistoriken trunkeras.

Varje meddelande som läggs till i konversationen bearbetas av Microsoft.SemanticKernel.Memory.WhiteboardProvider för att extrahera krav, förslag, beslut, åtgärder. Dessa lagras på en whiteboard och tillhandahålls till agenten som ytterligare kontext för varje anrop.

Här är ett exempel på hur du konfigurerar 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.

Fördelar med whiteboardminne

  • Short-Term Kontext: Behåller viktig information om målen med pågående konversationer.
  • Tillåter trunkering av chatthistorik: Stöder bevarandet av viktig kontext om chatthistoriken trunkeras.

Alternativ för WhiteboardProvider

WhiteboardProvider Kan konfigureras med olika alternativ för att anpassa dess beteende. Alternativ tillhandahålls med hjälp av WhiteboardProviderOptions klassen till WhiteboardProvider konstruktorn.

Maximalt antal whiteboard-meddelanden

Anger ett maximalt antal meddelanden som ska behållas på whiteboard-tavlan. När maxvärdet har uppnåtts tas mindre värdefulla meddelanden bort.

ContextPrompt

När du tillhandahåller whiteboard-innehållet till AI-modellen är det viktigt att beskriva vad meddelandena är till för. Med den här inställningen kan du åsidosätta standardmeddelanden som är inbyggda i WhiteboardProvider.

WhiteboardEmptyPrompt

När whiteboarden är tom WhiteboardProvider visas ett meddelande om att den är tom. Med den här inställningen kan du åsidosätta standardmeddelanden som är inbyggda i WhiteboardProvider.

MaintenancePromptTemplate

WhiteboardProvider Använder en AI-modell för att lägga till/uppdatera/ta bort meddelanden på whiteboard-tavlan. Den har en inbyggd uppmaning om att göra dessa uppdateringar. Med den här inställningen kan du åsidosätta den här inbyggda prompten.

Följande parametrar kan användas i mallen:

  • {{$maxWhiteboardMessages}}: Det maximala antalet meddelanden som tillåts i whiteboarden.
  • {{$inputMessages}}: De indatameddelanden som ska läggas till i whiteboarden.
  • {{$currentWhiteboard}}: Whiteboardens aktuella tillstånd.

Kombinera Mem0- och Whiteboard-minne

Du kan använda både Mem0- och whiteboardminne i samma agent för att uppnå en balans mellan långsiktiga och kortsiktiga minnesfunktioner.

// 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);

Genom att kombinera dessa minnesfunktioner kan agenter ge användarna en mer personlig och kontextmedveten upplevelse.

Nästa steg

Kommer snart

Mer information kommer snart.

Kommer snart

Mer information kommer snart.