Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Microsoft Agent Framework stöder bakgrundssvar för hantering av långvariga åtgärder som kan ta tid att slutföra. Med den här funktionen kan agenter börja bearbeta en begäran och returnera en fortsättningstoken som kan användas för att söka efter resultat eller återuppta avbrutna strömmar.
Tips/Råd
Ett fullständigt arbetsexempel finns i exemplet Bakgrundssvar.
När du ska använda bakgrundssvar
Bakgrundssvar är särskilt användbara för:
- Komplexa resonemangsuppgifter som kräver betydande bearbetningstid
- Åtgärder som kan avbrytas av nätverksproblem eller tidsgränser för klienter
- Scenarier där du vill starta en tidskrävande uppgift och återkomma senare för att få resultat
Så här fungerar bakgrundssvar
Bakgrundssvar använder en mekanism för fortsättningstoken för att hantera långvariga åtgärder. När du skickar en begäran till en agent med bakgrundssvar aktiverade händer en av två saker:
- Omedelbart slutförande: Agenten slutför uppgiften snabbt och returnerar det slutliga svaret utan en fortsättningstoken
- Bakgrundsbearbetning: Agenten börjar bearbeta i bakgrunden och returnerar en fortsättningstoken i stället för det slutliga resultatet
Fortsättningstoken innehåller all nödvändig information för att antingen avsöka för slutförande med api:et för icke-direktuppspelningsagenten eller återuppta en avbruten ström med API:et för strömningsagenten. När fortsättningstoken är nullslutförs åtgärden – detta sker när ett bakgrundssvar har slutförts, misslyckats eller inte kan fortsätta (till exempel när användarindata krävs).
Aktivera bakgrundssvar
Om du vill aktivera bakgrundssvar anger du AllowBackgroundResponses egenskapen till true i AgentRunOptions:
AgentRunOptions options = new()
{
AllowBackgroundResponses = true
};
Anmärkning
För närvarande stöder endast agenter som använder OpenAI-svars-API:et bakgrundssvar: OpenAI Responses Agent och Azure OpenAI Responses Agent.
Vissa agenter kanske inte tillåter explicit kontroll över bakgrundssvar. Dessa agenter kan självständigt bestämma om ett bakgrundssvar ska initieras baserat på åtgärdens komplexitet, oavsett AllowBackgroundResponses inställning.
Bakgrundssvar som inte strömmas
För scenarier som inte strömmas kan det hända att en fortsättningstoken returneras när du först kör en agent. Om ingen fortsättningstoken returneras innebär det att åtgärden har slutförts. Om en fortsättningstoken returneras anger det att agenten har initierat ett bakgrundssvar som fortfarande bearbetas och kräver avsökning för att hämta slutresultatet:
AIAgent agent = new AzureOpenAIClient(
new Uri("https://<myresource>.openai.azure.com"),
new AzureCliCredential())
.GetOpenAIResponseClient("<deployment-name>")
.CreateAIAgent();
AgentRunOptions options = new()
{
AllowBackgroundResponses = true
};
AgentThread thread = agent.GetNewThread();
// Get initial response - may return with or without a continuation token
AgentRunResponse response = await agent.RunAsync("Write a very long novel about otters in space.", thread, options);
// Continue to poll until the final response is received
while (response.ContinuationToken is not null)
{
// Wait before polling again.
await Task.Delay(TimeSpan.FromSeconds(2));
options.ContinuationToken = response.ContinuationToken;
response = await agent.RunAsync(thread, options);
}
Console.WriteLine(response.Text);
Viktiga punkter:
- Det första anropet kan slutföras omedelbart (ingen fortsättningstoken) eller starta en bakgrundsåtgärd (med fortsättningstoken)
- Om ingen fortsättningstoken returneras är åtgärden slutförd och svaret innehåller det slutliga resultatet
- Om en fortsättningstoken returneras har agenten startat en bakgrundsprocess som kräver avsökning
- Använd fortsättningstoken från föregående svar i efterföljande avsökningsanrop
- När
ContinuationTokenärnullär åtgärden klar
Bakgrundssvar för direktuppspelning
I strömningsscenarier fungerar bakgrundssvar ungefär som vanliga strömningssvar – agenten strömmar alla uppdateringar tillbaka till konsumenter i realtid. Den viktigaste skillnaden är dock att om den ursprungliga dataströmmen avbryts stöder agenterna att strömmen återupptas via fortsättningstoken. Varje uppdatering innehåller en fortsättningstoken som avbildar det aktuella tillståndet, vilket gör att strömmen kan återupptas exakt där den slutade genom att skicka denna token till efterföljande API-anrop för direktuppspelning:
AIAgent agent = new AzureOpenAIClient(
new Uri("https://<myresource>.openai.azure.com"),
new AzureCliCredential())
.GetOpenAIResponseClient("<deployment-name>")
.CreateAIAgent();
AgentRunOptions options = new()
{
AllowBackgroundResponses = true
};
AgentThread thread = agent.GetNewThread();
AgentRunResponseUpdate? latestReceivedUpdate = null;
await foreach (var update in agent.RunStreamingAsync("Write a very long novel about otters in space.", thread, options))
{
Console.Write(update.Text);
latestReceivedUpdate = update;
// Simulate an interruption
break;
}
// Resume from interruption point captured by the continuation token
options.ContinuationToken = latestReceivedUpdate?.ContinuationToken;
await foreach (var update in agent.RunStreamingAsync(thread, options))
{
Console.Write(update.Text);
}
Viktiga punkter:
- Var och
AgentRunResponseUpdateen innehåller en fortsättningstoken som kan användas för återupptagande - Lagra fortsättningstoken från den senast mottagna uppdateringen före avbrott
- Använd den lagrade fortsättningstoken för att återuppta strömmen från avbrottspunkten
Anmärkning
Stöd för bakgrundssvar i Python kommer snart. Den här funktionen är för närvarande tillgänglig i .NET-implementeringen av Agent Framework.
Metodtips
När du arbetar med bakgrundssvar bör du överväga följande metodtips:
- Implementera lämpliga avsökningsintervall för att undvika att överbelasta tjänsten
- Använd exponentiell backoff för avsökningsintervall om åtgärden tar längre tid än förväntat
-
Kontrollera alltid fortsättningstoken för
nullatt avgöra när bearbetningen är klar - Överväg att lagra fortsättningstoken beständigt för åtgärder som kan sträcka sig över användarsessioner
Begränsningar och överväganden
- Bakgrundssvar är beroende av den underliggande AI-tjänsten som stöder långvariga åtgärder
- Alla agenttyper kan inte ha stöd för bakgrundssvar
- Nätverksavbrott eller klientomstarter kan kräva särskild hantering för att bevara fortsättningstoken