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.
Die Agentschleife ruft einen Agent erneut auf, bis eine Abschlussbedingung erfüllt ist. Verwenden Sie sie für iterative Einschränkung, Todo-Abschluss, Warten auf Hintergrundaufgaben oder Auswerten, ob eine Antwort explizite Kriterien erfüllt.
Immer gebundene autonome Schleifen. Eine Abschlussbedingung kann fehlschlagen, ein Modell kann hängen und ein Evaluator kann probabilistisch sein.
Important
Agentschleifen sind experimentell.
Manuelles Einrichten von Schleifen
Verwenden Sie die direkte Kompositions-API, wenn Sie eine Schleife ohne die anderen Benutzerfreundlichkeits-Agent-Standardwerte ausführen möchten.
Importieren Sie die Schleifentypen, und schließen Sie sie mit AIAgentLoopAgent. Der Standardwert beträgt 10 Agentaufrufe:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIAgent baseAgent = chatClient.AsAIAgent();
AIAgent agent = new LoopAgent(
baseAgent,
new CompletionMarkerLoopEvaluator("DONE"),
new LoopAgentOptions { MaxIterations = 5 });
Importieren AgentLoopMiddleware und hinzufügen sie zu einer regulären Agent. Der Standardwert ist 10 Agentausführungen:
from agent_framework import Agent, AgentLoopMiddleware
def needs_more_work(*, last_result, **kwargs):
return "DONE" not in last_result.text
agent = Agent(
client=client,
middleware=[
AgentLoopMiddleware(
needs_more_work,
max_iterations=5,
)
],
)
Das Prädikat kann synchron oder asynchron sein. Kehren Sie True zurück, um fortzufahren, False zu beenden oder (continue, feedback) Feedback an die nächste Iteration zu übergeben.
Note
Die auf dieser Seite beschriebene Paketschleifenfunktion ist derzeit in Go nicht verfügbar.
Auswählen einer Abschlussbedingung
LoopAgent akzeptiert einen Evaluator oder eine sortierte Sammlung:
| Auswerter | Wird fortgesetzt, während |
|---|---|
CompletionMarkerLoopEvaluator |
Die neueste Antwort enthält nicht die konfigurierte Markierung. |
TodoCompletionLoopEvaluator |
Ein aufgelöstes TodoProvider Element verfügt weiterhin über unvollständige Elemente, optional in ausgewählten Agentmodi. |
BackgroundTaskCompletionLoopEvaluator |
Ein aufgelöstes Problem BackgroundAgentsProvider hat noch ausgeführte Aufgaben. |
AIJudgeLoopEvaluator |
Ein separater Richter-Kunde sagt, dass die ursprüngliche Anfrage nicht vollständig beantwortet wird. |
DelegateLoopEvaluator |
Ihr Rückruf gibt zurück LoopEvaluation.Continue(...). |
Wenn mehrere Bewerter konfiguriert sind, werden sie in der Reihenfolge ausgeführt. Der erste Wert, der eine weitere Iteration anfordert, liefert sein Feedback; die Schleife wird nur beendet, wenn alle Auswertungen den Vorgang fortsetzen.
Verwenden eines KI-Richters
Der Richter erhält die ursprüngliche Anfrage und die neueste Agentantwort. Wenn eine Lücke gefunden wird, wird die Analyse feedback für die nächste Iteration:
var evaluator = new AIJudgeLoopEvaluator(
judgeClient,
new AIJudgeLoopEvaluatorOptions
{
Criteria =
[
"Answer every part of the request.",
"Support conclusions with evidence.",
],
});
AIAgent loopAgent = new LoopAgent(
agent,
evaluator,
new LoopAgentOptions { MaxIterations = 4 });
Verwenden Sie nur einen Richterendpunkt, dem Sie vertrauen, mit der ursprünglichen Anforderung und der generierten Antwort.
Steuern des Kontexts und der Ausgabe
Verwendet standardmäßig LoopAgent eine Sitzung und sendet das neueste Feedback des Gewinners als nächste Eingabe.
FreshContextPerIteration = true Erstellt stattdessen jeden Durchgang aus der ursprünglichen Anforderung sowie ein aggregiertes Feedbackprotokoll neu und setzt die Sitzung zurück oder stellt sie wieder her.
Wenn kein Streaming ausgeführt wird, wird standardmäßig ein aggregiertes Transkript zurückgegeben. Legen Sie fest NonStreamingReturnsLastResponseOnly = true , dass nur die endgültige Antwort zurückgegeben wird. Streaming sendet immer jede Iteration und alle sichtbaren Im-Auftrag-von-Feedback-Nachrichten.
Das Prädikat empfängt Schlüsselwortargumente, einschließlich iteration, , , messagesoriginal_messages, session, agent, und progressfeedback. last_result Die Helfer todos_remaining() und background_tasks_running() stellen integrierte Aufgaben- und Hintergrundaufgabenbedingungen bereit. Koppeln Sie sie mit todos_remaining_message oder background_tasks_running_message generieren Sie eine gezielte nächste Eingabe.
Verwenden eines KI-Richters
AgentLoopMiddleware.with_judge erstellt eine richtergesteuerte Schleife. Richterschleifen werden standardmäßig auf fünf Iterationen festgelegt:
from agent_framework import Agent, AgentLoopMiddleware
loop = AgentLoopMiddleware.with_judge(
judge_client,
criteria=[
"Answer every part of the request.",
"Support conclusions with evidence.",
],
max_iterations=4,
)
agent = Agent(
client=client,
middleware=[loop],
)
Die Begründung des Richters wird an den Agenten zurückgespeist, wenn mehr Arbeit erforderlich ist. Verwenden Sie nur einen Richterendpunkt, dem Sie vertrauen, mit der ursprünglichen Anforderung und der generierten Antwort.
Steuern des Kontexts, des Fortschritts und der Ausgabe
Erstellen Sie AgentLoopMiddleware für erweiterte Schleifen direkt:
-
record_feedbackerstellt nach jeder Arbeits iteration einen präzisen Statuseintrag. -
progressmacht gesammelte Einträge für Rückrufe verfügbar. -
inject_progress=Truefügt den Fortschritt zur Eingabe der nächsten Iteration hinzu. -
fresh_context=Truestartet aus dem ursprünglichen Vorgangs- und Statusprotokoll neu und stellt eine angefügte Sitzung in seiner Vorabschleifenmomentaufnahme wieder her. -
return_final_only=Truegibt nur die letzte Antwort für nicht streamingfreie Ausführung zurück.
Übergeben Sie max_iterations=None nur, wenn das Vervollständigungs-Prädikat garantiert beendet wird.
Die auf dieser Seite beschriebenen gepackten Abschlussbedingungen und die Beurteilungsintegration sind derzeit in Go nicht verfügbar.
Verwenden von Schleifen mit Dem Harness Agent
Verwenden Sie das Setup von Harness Agent, wenn Sie auch den vorkonfigurierten Verlauf, die Planung, den Speicher, die Genehmigung und die Observability-Pipeline wünschen.
Legen Sie HarnessAgentOptions.LoopEvaluators fest. Der Gurt gilt LoopAgent als äußerster Agent-Dekorateur:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
var options = new HarnessAgentOptions
{
LoopEvaluators =
[
new CompletionMarkerLoopEvaluator("DONE"),
],
LoopAgentOptions = new LoopAgentOptions
{
MaxIterations = 5,
},
};
HarnessAgent agent = chatClient.AsHarnessAgent(options);
// Equivalent construction: new HarnessAgent(chatClient, options)
AgentSession session = await agent.CreateSessionAsync();
Eine leere Oder Sammlung lässt den Gurt ein- und nullLoopEvaluators aus.
Genehmigungs- und Sitzungsverhalten
LoopAgent beendet, bevor die Abschlussbedingung ausgewertet wird, wenn eine Iteration eine ausstehende Toolgenehmigungsanforderung zurückgibt. Sie gibt die Anforderung an den Aufrufer zurück, anstatt sie hinter einer anderen autonomen Iteration auszublenden. Nachdem der Anrufer die Genehmigungsantwort über den normalen Genehmigungsfluss des Tools bereitstellt, kann der Agent fortfahren.
LoopAgent fügt keine Genehmigungsbehandlung selbst hinzu. Der Nutzungs-Agent wendet die Schleife außerhalb ToolApprovalAgentan, sodass ausstehende Genehmigungsanforderungen die Schleife escapen können.
Verwenden Sie dieselbe AgentSession Wiederverwendung für Anrufe, um die Unterhaltung fortzusetzen. Schleifeniterationen teilen diese Sitzung standardmäßig. Mit FreshContextPerIteration = true, LoopAgent wird der vom Aufrufer bereitgestellte Sitzungszustand zurückgesetzt oder wiederhergestellt, sofern unterstützt. Diensteigener Unterhaltungsspeicher kann den Verlauf beibehalten, wenn die serialisierte Sitzung nur einen Remoteunterhaltungsbezeichner enthält.
Lieferung loop_should_continue an create_harness_agent; loop_max_iterations Standardwert 10:
from agent_framework import create_harness_agent
def needs_more_work(*, last_result, **kwargs):
return "DONE" not in last_result.text
agent = create_harness_agent(
client=client,
loop_should_continue=needs_more_work,
loop_max_iterations=5,
)
session = agent.create_session()
loop_next_message passt die nächste Eingabe an.
loop_should_continueOhne , fügt die Factory keine Schleife hinzu und ignoriert die anderen Schleifenargumente.
Genehmigungs- und Sitzungsverhalten
AgentLoopMiddleware beendet, bevor das Fortsetzungsdrädikat ausgewertet wird, wenn eine Iteration eine ausstehende Toolgenehmigungsanforderung zurückgibt. Sie gibt die Anforderung an den Aufrufer zurück, anstatt sie hinter einer anderen autonomen Iteration auszublenden. Nachdem der Anrufer die Genehmigungsantwort über den normalen Genehmigungsfluss des Tools bereitstellt, kann der Agent fortfahren.
AgentLoopMiddleware fügt sich nicht selbst hinzu ToolApprovalMiddleware . Der Nutzungs-Agent platziert die Schleife außerhalb ihrer Genehmigungs-Middleware, sodass ausstehende Genehmigungsanforderungen die Schleife escapen können. Erstellen und übergeben Sie jeden AgentSession Harness Agent, der ausgeführt wird, während die automatische Genehmigung des Tools aktiviert ist.
Verwenden Sie dieselbe AgentSession Wiederverwendung für Anrufe, um die Unterhaltung fortzusetzen. Schleifeniterationen teilen diese Sitzung standardmäßig. Mit fresh_context=True, stellt die Middleware die angefügte Sitzung zwischen Iterationen in der Vorschleifenmomentaufnahme wieder her. Diensteigener Unterhaltungsspeicher kann den Verlauf beibehalten, wenn die serialisierte Sitzung nur einen Remoteunterhaltungsbezeichner enthält.
Note
Die Nutzungs-Agent-Schleifen sind derzeit in Go nicht verfügbar, daher gilt das Genehmigungs- und Sitzungsverhalten nicht.