Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il ciclo dell'agente richiama nuovamente un agente fino a quando non viene soddisfatta una condizione di completamento. Usalo per il miglioramento iterativo, per completare attività da svolgere, per attendere attività in background o per valutare se una risposta soddisfa criteri espliciti.
Cicli autonomi sempre associati. Una condizione di completamento può avere esito negativo, un modello può bloccarsi e un analizzatore può essere probabilistico.
Importante
Il looping dell'agente è sperimentale.
Configura manualmente il loop
Usare l'API di composizione diretta quando si vuole eseguire un ciclo senza le altre impostazioni predefinite dell'agente Harness.
Importare i tipi di ciclo e avvolgere qualsiasi AIAgent con LoopAgent. Il valore massimo predefinito è 10 chiamate dell'agente:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIAgent baseAgent = chatClient.AsAIAgent();
AIAgent agent = new LoopAgent(
baseAgent,
new CompletionMarkerLoopEvaluator("DONE"),
new LoopAgentOptions { MaxIterations = 5 });
Importare AgentLoopMiddleware e aggiungerlo a un normale oggetto Agent. Il valore massimo predefinito è 10 esecuzioni dell'agente:
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,
)
],
)
Il predicato può essere sincrono o asincrono. Invio True per continuare, False per interrompere o (continue, feedback) per trasmettere il feedback all'iterazione successiva.
Annotazioni
La funzionalità di ciclo in pacchetto descritta in questa pagina non è attualmente disponibile in Go.
Scegliere una condizione di completamento
LoopAgent accetta un valutatore o una raccolta ordinata:
| Valutatore | Continua mentre |
|---|---|
CompletionMarkerLoopEvaluator |
La risposta più recente non contiene il marcatore configurato. |
TodoCompletionLoopEvaluator |
Un TodoProvider risolto presenta ancora elementi non completati, facoltativamente nelle modalità agente selezionate. |
BackgroundTaskCompletionLoopEvaluator |
Un oggetto risolto BackgroundAgentsProvider ha ancora attività in esecuzione. |
AIJudgeLoopEvaluator |
Un cliente giudice separato dice che la richiesta originale non è completamente risposta. |
DelegateLoopEvaluator |
Il tuo callback restituisce LoopEvaluation.Continue(...). |
Quando sono configurati più valutatori, vengono eseguiti in ordine. Il primo analizzatore che richiede un'altra iterazione fornisce il proprio feedback; il ciclo si arresta solo quando tutti gli analizzatori rifiutano di continuare.
Usare un giudice di intelligenza artificiale
Il giudice riceve la richiesta originale e l'ultima risposta dell'agente. Se rileva un gap, l'analisi diventa feedback per l'iterazione successiva:
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 });
Affidare la richiesta originale e la risposta generata solo a un endpoint di valutazione affidabile.
Contesto di controllo e output
Per impostazione predefinita, LoopAgent riutilizza una sessione e invia il feedback più recente dell'analizzatore vincente come input successivo.
FreshContextPerIteration = true ricompila invece ogni passaggio dalla richiesta originale e un log di feedback aggregato e reimposta o ripristina la sessione.
Le esecuzioni non di streaming restituiscono una trascrizione aggregata per impostazione predefinita. Impostare NonStreamingReturnsLastResponseOnly = true per restituire solo la risposta finale. La modalità di streaming restituisce sempre ogni iterazione e qualsiasi messaggio di feedback visibile inviato per conto dell'utente.
Il predicato riceve argomenti di parole chiave, tra cui iteration, last_resultmessages, original_messages, sessionagent, progress, e feedback. Gli helper todos_remaining() e background_tasks_running() forniscono condizioni predefinite per attività in background e todo. Abbinali a todos_remaining_message o background_tasks_running_message per generare un input successivo mirato.
Usare un giudice di intelligenza artificiale
AgentLoopMiddleware.with_judge costruisce un ciclo guidato da un giudice. I cicli di giudici hanno per impostazione predefinita cinque iterazioni:
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],
)
Il ragionamento del giudice viene restituito all'agente quando è necessario ulteriore lavoro. Utilizza solo un endpoint di valutazione di cui ti fidi con la richiesta originale e la risposta generata.
Controlla il contesto, l'avanzamento e l'output
Per i loop avanzati, costruisci AgentLoopMiddleware direttamente:
-
record_feedbackcrea una voce di avanzamento concisa dopo ogni iterazione di lavoro. -
progressespone le voci accumulate alle funzioni di callback. -
inject_progress=Trueaggiunge lo stato di avanzamento all'input dell'iterazione successiva. -
fresh_context=Trueriavvia dall'attività originale e dal registro di avanzamento e ripristina una sessione allegata allo snapshot precedente al ciclo. -
return_final_only=Truerestituisce solo l'ultima risposta per le esecuzioni non in streaming.
Passare max_iterations=None solo quando il predicato di completamento ha la garanzia di terminare.
Le condizioni di completamento predefinite e l'integrazione del judge descritte in questa pagina non sono attualmente disponibili in Go.
Usa un ciclo con Harness Agent
Usa la configurazione di Harness Agent se vuoi anche le sue funzionalità preconfigurate di cronologia, pianificazione, memoria, approvazione e la pipeline di osservabilità.
Imposta HarnessAgentOptions.LoopEvaluators. L'harness usa LoopAgent come decoratore più esterno dell'agente:
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();
Una raccolta o nullLoopEvaluators vuota lascia l'imbracatura singola.
Autorizzazione e comportamento della sessione
LoopAgent si interrompe prima di valutare la condizione di completamento quando un'iterazione restituisce una richiesta di approvazione del tool ancora in sospeso. Restituisce la richiesta al chiamante anziché nasconderla dietro un'altra iterazione autonoma. Dopo che il chiamante ha fornito la risposta di approvazione tramite il normale flusso di approvazione dello strumento , l'agente può continuare.
LoopAgent non aggiunge di per sé la gestione dell'approvazione. L'agente Harness applica il loop all'esterno di ToolApprovalAgent, consentendo alle richieste di approvazione in sospeso di uscire dal loop.
Riutilizzare lo stesso AgentSession tra le chiamate per continuare la conversazione. Per impostazione predefinita, le iterazioni del ciclo condividono la sessione. Con FreshContextPerIteration = true, LoopAgent reimposta o ripristina lo stato della sessione fornito dal chiamante, se supportato. L'archiviazione di conversazione di proprietà del servizio può mantenere la cronologia quando la sessione serializzata contiene solo un identificatore di conversazione remota.
Fornire loop_should_continue a create_harness_agent; loop_max_iterations il valore predefinito è 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 personalizza l'input successivo. Senza loop_should_continue, la factory non aggiunge un loop e ignora gli altri argomenti del loop.
Autorizzazione e comportamento della sessione
AgentLoopMiddleware si arresta prima di valutare il predicato di continuazione quando un'iterazione restituisce una richiesta di approvazione di uno strumento in sospeso. Restituisce la richiesta al chiamante anziché nasconderla dietro un'altra iterazione autonoma. Dopo che il chiamante ha fornito la risposta di approvazione tramite il normale flusso di approvazione dello strumento , l'agente può continuare.
AgentLoopMiddleware non aggiunge ToolApprovalMiddleware da solo. L'agente Harness posiziona il loop all'esterno del proprio middleware di approvazione, consentendo alle richieste di approvazione in sospeso di uscire dal loop. Creare e passare un AgentSession a ogni esecuzione di Harness Agent quando l'approvazione automatica degli strumenti è abilitata.
Riutilizzare lo stesso AgentSession tra le chiamate per continuare la conversazione. Per impostazione predefinita, le iterazioni del ciclo condividono la sessione. Con fresh_context=True, il middleware ripristina la sessione collegata allo snapshot precedente al ciclo tra un’iterazione e l’altra. L'archiviazione di conversazione di proprietà del servizio può mantenere la cronologia quando la sessione serializzata contiene solo un identificatore di conversazione remota.
Annotazioni
La funzionalità di looping di Harness Agent non è attualmente disponibile in Go, quindi il suo meccanismo di approvazione e il comportamento della sessione non si applicano.