Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Microsoft Agent Framework unterstützt Hintergrundantworten für die Behandlung lang ausgeführter Vorgänge, die möglicherweise zeitverlangen. Mit diesem Feature können Agents die Verarbeitung einer Anforderung starten und ein Fortsetzungstoken zurückgeben, mit dem Ergebnisse abgerufen oder unterbrochene Datenströme fortgesetzt werden können.
Tipp
Ein vollständiges Arbeitsbeispiel finden Sie im Beispiel "Hintergrundantworten".
Gründe für die Verwendung von Hintergrundantworten
Hintergrundantworten sind besonders nützlich für:
- Komplexe Gründe für Aufgaben, die eine erhebliche Verarbeitungszeit erfordern
- Vorgänge, die durch Netzwerkprobleme oder Clienttimeouts unterbrochen werden können
- Szenarien, in denen Sie eine lange ausgeführte Aufgabe starten und später auf Ergebnisse zurückschauen möchten
Funktionsweise von Hintergrundantworten
Hintergrundantworten verwenden einen Fortsetzungstokenmechanismus , um lange ausgeführte Vorgänge zu verarbeiten. Wenn Sie eine Anforderung an einen Agent mit aktivierten Hintergrundantworten senden, geschieht eines von zwei Dingen:
- Sofortiger Abschluss: Der Agent schließt die Aufgabe schnell ab und gibt die endgültige Antwort ohne Fortsetzungstoken zurück.
- Hintergrundverarbeitung: Der Agent startet die Verarbeitung im Hintergrund und gibt ein Fortsetzungstoken anstelle des Endergebnisses zurück.
Das Fortsetzungstoken enthält alle erforderlichen Informationen, um entweder mithilfe der API des nicht streaming-Agents abgeschlossen zu werden oder einen unterbrochenen Stream mit der Streaming-Agent-API fortzusetzen. Wenn das Fortsetzungstoken lautet, ist nullder Vorgang abgeschlossen . Dies geschieht, wenn eine Hintergrundantwort abgeschlossen, fehlgeschlagen ist oder nicht fortgesetzt werden kann (z. B. wenn Benutzereingaben erforderlich sind).
Aktivieren von Hintergrundantworten
Um Hintergrundantworten zu true aktivieren, legen Sie die AllowBackgroundResponses Eigenschaft auf folgendes festAgentRunOptions:
AgentRunOptions options = new()
{
AllowBackgroundResponses = true
};
Hinweis
Derzeit unterstützen nur Agents, die die OpenAI-Antwort-API verwenden, Hintergrundantworten: OpenAI Responses Agent und Azure OpenAI Responses Agent.
Einige Agents erlauben möglicherweise keine explizite Kontrolle über Hintergrundantworten. Diese Agents können unabhängig von der AllowBackgroundResponses Einstellung selbst entscheiden, ob eine Hintergrundantwort basierend auf der Komplexität des Vorgangs initiiert werden soll.
Hintergrundantworten ohne Streaming
Bei Nicht-Streaming-Szenarien kann es bei der ersten Ausführung eines Agents ein Fortsetzungstoken zurückgeben oder nicht. Wenn kein Fortsetzungstoken zurückgegeben wird, bedeutet dies, dass der Vorgang abgeschlossen wurde. Wenn ein Fortsetzungstoken zurückgegeben wird, gibt es an, dass der Agent eine Hintergrundantwort initiiert hat, die noch verarbeitet wird, und erfordert eine Abfrage zum Abrufen des Endergebnisses:
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);
Wichtigste Punkte:
- Der anfängliche Aufruf kann sofort abgeschlossen werden (kein Fortsetzungstoken) oder einen Hintergrundvorgang (mit Fortsetzungstoken) starten.
- Wenn kein Fortsetzungstoken zurückgegeben wird, ist der Vorgang abgeschlossen, und die Antwort enthält das endgültige Ergebnis.
- Wenn ein Fortsetzungstoken zurückgegeben wird, hat der Agent einen Hintergrundprozess gestartet, der Abfragen erfordert.
- Verwenden des Fortsetzungstokens aus der vorherigen Antwort in nachfolgenden Abrufaufrufen
- Ist
ContinuationTokendiesnullder Zeitpunkt, ist der Vorgang abgeschlossen
Streaming von Hintergrundantworten
In Streamingszenarien funktionieren Hintergrundantworten ähnlich wie normale Streamingantworten – der Agent streamt alle Updates in Echtzeit an Verbraucher zurück. Der Hauptunterschied besteht jedoch darin, dass Agents die Stream-Wiederaufnahme über Fortsetzungstoken unterstützen, wenn der ursprüngliche Datenstrom unterbrochen wird. Jedes Update enthält ein Fortsetzungstoken, das den aktuellen Zustand erfasst, sodass der Datenstrom von genau der Stelle fortgesetzt werden kann, an der es unterbrochen wurde, indem es dieses Token an nachfolgende Streaming-API-Aufrufe übergibt:
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);
}
Wichtigste Punkte:
- Jedes
AgentRunResponseUpdateenthält ein Fortsetzungstoken, das für die Wiederaufnahme verwendet werden kann - Speichern des Fortsetzungstokens aus dem letzten empfangenen Update vor Unterbrechung
- Verwenden des gespeicherten Fortsetzungstokens zum Fortsetzen des Datenstroms vom Unterbrechungspunkt
Hinweis
Unterstützung für Hintergrundantworten in Python wird in Kürze verfügbar sein. Dieses Feature ist derzeit in der .NET-Implementierung von Agent Framework verfügbar.
Bewährte Methoden
Berücksichtigen Sie beim Arbeiten mit Hintergrundantworten die folgenden bewährten Methoden:
- Implementieren sie geeignete Abrufintervalle , um zu vermeiden, dass der Dienst überwältigend ist
- Exponentielles Backoff für Abrufintervalle verwenden, wenn der Vorgang länger dauert als erwartet
-
Überprüfen Sie immer,
nullob Fortsetzungstoken abgeschlossen sind, um festzustellen, wann die Verarbeitung abgeschlossen ist. - Erwägen Sie, Fortsetzungstoken dauerhaft für Vorgänge zu speichern, die Benutzersitzungen umfassen können.
Einschränkungen und Überlegungen
- Hintergrundantworten sind vom zugrunde liegenden KI-Dienst abhängig, der lange ausgeführte Vorgänge unterstützt
- Nicht alle Agenttypen unterstützen möglicherweise Hintergrundantworten
- Netzwerkunterbrechungen oder Clientneustarts erfordern möglicherweise eine spezielle Behandlung, um Fortsetzungstoken beizubehalten.