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 die iterative Verfeinerung, das Erledigen von To-dos, das Warten auf Hintergrundaufgaben oder zur Bewertung, ob eine Antwort die expliziten Kriterien erfüllt.
Begrenzen Sie autonome Schleifen immer. 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 Direct-Composition-API, wenn Sie Schleifen ohne die sonstigen Standardeinstellungen von Harness Agent benötigen.
Importieren Sie die Schleifentypen und umschließen Sie jedes AIAgent mit LoopAgent. Das standardmäßige Maximum 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 Sie AgentLoopMiddleware und fügen Sie es zu einer normalen Agent hinzu. Das Standardmaximum beträgt 10 Agent-Ausfü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, solange |
|---|---|
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 gelöstes BackgroundAgentsProvider hat noch laufende Aufgaben. |
AIJudgeLoopEvaluator |
Ein separater Richter-Kunde sagt, dass die ursprüngliche Anfrage nicht vollständig beantwortet wird. |
DelegateLoopEvaluator |
Ihre Callback-Funktion gibt LoopEvaluation.Continue(...) zurück. |
Wenn mehrere Bewerter konfiguriert sind, werden sie in der Reihenfolge ausgeführt. Der erste Evaluator, der eine weitere Iteration anfordert, gibt seine Rückmeldung; die Schleife wird erst dann beendet, wenn alle Evaluatoren eine Fortsetzung ablehnen.
Verwenden eines KI-Richters
Der Richter erhält die ursprüngliche Anfrage und die neueste Agentantwort. Wenn sie eine Lücke findet, dient ihre Analyse als 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
Standardmäßig verwendet LoopAgent dieselbe Sitzung weiter und sendet das neueste Feedback des erfolgreichen Evaluators als nächste Eingabe.
FreshContextPerIteration = true erstellt stattdessen jeden Durchlauf anhand der ursprünglichen Anfrage und eines aggregierten Feedbackprotokolls 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 erhält Schlüsselwortargumente, einschließlich iteration, last_result, messages, original_messages, session, agent, progress und feedback. Die Helfer todos_remaining() und background_tasks_running() stellen integrierte To-do- und Hintergrundaufgabenbedingungen bereit. Koppeln Sie sie mit todos_remaining_message oder background_tasks_running_message, um eine gezielte nächste Eingabe zu generieren.
Verwenden eines KI-Richters
AgentLoopMiddleware.with_judge erstellt eine richtergesteuerte Schleife. Judge-Loops sind standardmäßig auf fünf Iterationen eingestellt:
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 Arbeitsiteration einen knappen Fortschrittseintrag. -
progressmacht gesammelte Einträge für Rückrufe verfügbar. -
inject_progress=Truefügt der Eingabe der nächsten Iteration den Fortschritt 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=Trueliefert für nicht-streamende Ausführungen nur die letzte Antwort zurück.
Übergeben Sie max_iterations=None nur, wenn das Vervollständigungs-Prädikat garantiert beendet wird.
Die auf dieser Seite beschriebenen vorkonfigurierten Abschlussbedingungen und die Judge-Integration sind in Go derzeit nicht verfügbar.
Schleifen mit dem Harness Agent verwenden
Verwenden Sie die Einrichtung des Harness Agent, wenn Sie zudem dessen vorkonfigurierten Verlauf, die Planung, das Gedächtnis, die Freigabe und die Beobachtbarkeitspipeline nutzen möchten.
Legen Sie HarnessAgentOptions.LoopEvaluators fest. Das Harness verwendet LoopAgent als seinen äußersten Agent-Dekorator:
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 nullLoopEvaluators Sammlung belässt das Harness im Einzelschussmodus.
Genehmigungs- und Sitzungsverhalten
LoopAgent beendet, bevor die Abschlussbedingung ausgewertet wird, wenn eine Iteration eine ausstehende Toolgenehmigungsanforderung zurückgibt. Sie gibt die Anfrage an den Aufrufer zurück, anstatt sie hinter einer weiteren eigenständigen Iteration zu verbergen. Nachdem der Anrufer die Genehmigungsantwort über den normalen Genehmigungsfluss des Tools bereitstellt, kann der Agent fortfahren.
LoopAgent fügt selbst keine Genehmigungsverarbeitung hinzu. Der Harness Agent wendet die Schleife außerhalb von ToolApprovalAgent an, sodass ausstehende Genehmigungsanfragen der Schleife entkommen können.
Verwenden Sie über mehrere Aufrufe hinweg dasselbe AgentSession, um die Konversation fortzusetzen. Schleifeniterationen teilen diese Sitzung standardmäßig. Mit FreshContextPerIteration = true, LoopAgent wird der vom Aufrufer bereitgestellte Sitzungszustand zurückgesetzt oder wiederhergestellt, sofern unterstützt. Der dienstseitige Konversationsspeicher kann den Verlauf beibehalten, wenn die serialisierte Sitzung nur eine Remote-Konversationskennung enthält.
Geben Sie loop_should_continue für create_harness_agent an; loop_max_iterations ist standardmäßig 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. Ohne loop_should_continue 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 Anfrage an den Aufrufer zurück, anstatt sie hinter einer anderen autonomen Iteration zu verbergen. Nachdem der Anrufer die Genehmigungsantwort über den normalen Genehmigungsfluss des Tools bereitstellt, kann der Agent fortfahren.
AgentLoopMiddleware fügt ToolApprovalMiddleware nicht selbst hinzu. Der Harness Agent platziert die Schleife außerhalb seiner Freigabe-Middleware, sodass ausstehende Freigabeanfragen dem Kreislauf entkommen können. Erstellen und übergeben Sie bei jedem Lauf des Harness Agent ein AgentSession, während die automatische Genehmigung des Tools aktiviert ist.
Verwenden Sie dasselbe AgentSession bei mehreren Aufrufen wieder, um das Gespräch fortzusetzen. Schleifeniterationen teilen diese Sitzung standardmäßig. Mit fresh_context=True stellt die Middleware die zugeordnete Sitzung zwischen den Iterationen auf die Momentaufnahme vor der Schleife zurück. Der dienstseitige Konversationsspeicher kann den Verlauf beibehalten, wenn die serialisierte Sitzung nur eine Remote-Konversationskennung enthält.
Note
Harness Agent Looping ist derzeit in Go nicht verfügbar, daher findet das Genehmigungs- und Sitzungsverhalten keine Anwendung.