Delen via


Achtergrondantwoorden van agent

Het Microsoft Agent Framework ondersteunt achtergrondreacties voor het verwerken van langlopende bewerkingen die mogelijk tijd in beslag nemen. Met deze functie kunnen agents beginnen met het verwerken van een aanvraag en een vervolgtoken retourneren dat kan worden gebruikt om resultaten te peilen of onderbroken streams te hervatten.

Aanbeveling

Zie het voorbeeld Achtergrondantwoorden voor een volledig werkvoorbeeld.

Wanneer achtergrondantwoorden gebruiken

Antwoorden op de achtergrond zijn met name handig voor:

  • Complexe redeneringstaken waarvoor een aanzienlijke verwerkingstijd is vereist
  • Bewerkingen die kunnen worden onderbroken door netwerkproblemen of clienttime-outs
  • Scenario's waarin u een langlopende taak wilt starten en later wilt controleren op resultaten

Hoe achtergrondantwoorden werken

Achtergrondantwoorden gebruiken een vervolgtokenmechanisme om langlopende bewerkingen af te handelen. Wanneer u een aanvraag verzendt naar een agent waarvoor antwoorden op de achtergrond zijn ingeschakeld, gebeurt er een van de volgende twee dingen:

  1. Onmiddellijke voltooiing: de agent voltooit de taak snel en retourneert het uiteindelijke antwoord zonder een vervolgtoken
  2. Achtergrondverwerking: de agent begint met verwerken op de achtergrond en retourneert een vervolgtoken in plaats van het uiteindelijke resultaat

Het vervolgtoken bevat alle benodigde informatie om te peilen naar voltooiing met behulp van de API voor niet-streamingagent of een onderbroken stream te hervatten met de streamingagent-API. Wanneer het vervolgtoken is null, is de bewerking voltooid. Dit gebeurt wanneer een achtergrondantwoord is voltooid, mislukt of niet verder kan gaan (bijvoorbeeld wanneer gebruikersinvoer is vereist).

Achtergrondantwoorden inschakelen

Als u achtergrondantwoorden wilt inschakelen, stelt u de AllowBackgroundResponses eigenschap true in op :AgentRunOptions

AgentRunOptions options = new()
{
    AllowBackgroundResponses = true
};

Opmerking

Momenteel ondersteunen alleen agents die gebruikmaken van de Api voor OpenAI-antwoorden achtergrondantwoorden: Agent voor OpenAI-antwoorden en Azure OpenAI-antwoordenagent.

Sommige agents staan mogelijk geen expliciete controle over achtergrondreacties toe. Deze agents kunnen autonoom bepalen of een achtergrondreactie moet worden gestart op basis van de complexiteit van de bewerking, ongeacht de AllowBackgroundResponses instelling.

Niet-streaming achtergrondantwoorden

Bij niet-streamingscenario's, wanneer u in eerste instantie een agent uitvoert, kan het al dan niet een vervolgtoken retourneren. Als er geen vervolgtoken wordt geretourneerd, betekent dit dat de bewerking is voltooid. Als er een vervolgtoken wordt geretourneerd, geeft dit aan dat de agent een achtergrondantwoord heeft geïnitieerd dat nog steeds wordt verwerkt en dat polling vereist om het uiteindelijke resultaat op te halen:

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

Belangrijkste punten:

  • De eerste aanroep kan onmiddellijk worden voltooid (geen vervolgtoken) of een achtergrondbewerking starten (met vervolgtoken)
  • Als er geen vervolgtoken wordt geretourneerd, is de bewerking voltooid en bevat het antwoord het uiteindelijke resultaat
  • Als er een vervolgtoken wordt geretourneerd, heeft de agent een achtergrondproces gestart waarvoor polling is vereist
  • Gebruik het vervolgtoken van het vorige antwoord in volgende polling-aanroepen
  • Wanneer ContinuationToken is nullde bewerking voltooid

Reacties op streaming-achtergrond

In streamingscenario's werken achtergrondreacties net als reguliere streamingreacties: de agent streamt alle updates terug naar consumenten in realtime. Het belangrijkste verschil is echter dat als de oorspronkelijke stream wordt onderbroken, agents stroomhervatting ondersteunen via vervolgtokens. Elke update bevat een vervolgtoken dat de huidige status vastlegt, zodat de stream kan worden hervat vanaf precies waar deze is gebleven door dit token door te geven aan volgende streaming-API-aanroepen:

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

Belangrijkste punten:

  • Elk AgentRunResponseUpdate bevat een vervolgtoken dat kan worden gebruikt voor hervatting
  • Sla het vervolgtoken op van de laatst ontvangen update vóór onderbreking
  • Gebruik het opgeslagen vervolgtoken om de stream te hervatten vanaf het onderbrekingspunt

Opmerking

Ondersteuning voor achtergrondantwoorden in Python is binnenkort beschikbaar. Deze functie is momenteel beschikbaar in de .NET-implementatie van Agent Framework.

Beste praktijken

Houd bij het werken met achtergrondreacties rekening met de volgende aanbevolen procedures:

  • Implementeer de juiste polling-intervallen om te voorkomen dat de service wordt overweldigd
  • Exponentieel uitstel gebruiken voor polling-intervallen als de bewerking langer duurt dan verwacht
  • Controleer altijd op null vervolgtokens om te bepalen wanneer de verwerking is voltooid
  • Overweeg om vervolgtokens permanent op te slaan voor bewerkingen die gebruikerssessies kunnen omvatten

Beperkingen en overwegingen

  • Achtergrondantwoorden zijn afhankelijk van de onderliggende AI-service die langlopende bewerkingen ondersteunt
  • Niet alle agenttypen ondersteunen mogelijk achtergrondreacties
  • Netwerkonderbrekingen of opnieuw opstarten van clients vereisen mogelijk speciale verwerking om vervolgtokens te behouden

Volgende stappen