Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O looping do agente invoca novamente um agente até que uma condição de conclusão seja atendida. Use-o para refinamento iterativo, conclusão completa, aguardar tarefas em segundo plano ou avaliar se uma resposta atende a critérios explícitos.
Sempre acoplado loops autônomos. Uma condição de conclusão pode falhar, um modelo pode parar e um avaliador pode ser probabilístico.
Importante
O looping do agente é experimental.
Configurar o looping manualmente
Use a API de composição direta quando quiser fazer loop sem os outros padrões do Harness Agent.
Importe os tipos de loop e embrulhe qualquer AIAgent um com LoopAgent. Seu máximo padrão é de 10 invocações de 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 });
Importe AgentLoopMiddleware e adicione-o a um regular Agent. O máximo padrão é 10 execuções de 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,
)
],
)
O predicado pode ser síncrono ou assíncrono. Volte True para continuar, False parar ou (continue, feedback) passar comentários para a próxima iteração.
Note
O recurso de looping empacotado descrito nesta página não está disponível atualmente no Go.
Escolher uma condição de conclusão
LoopAgent aceita um avaliador ou uma coleção ordenada:
| Avaliador | Continua enquanto |
|---|---|
CompletionMarkerLoopEvaluator |
A resposta mais recente não contém o marcador configurado. |
TodoCompletionLoopEvaluator |
Um resolvido TodoProvider ainda tem itens incompletos, opcionalmente em modos de agente selecionados. |
BackgroundTaskCompletionLoopEvaluator |
Um resolvido BackgroundAgentsProvider ainda tem tarefas em execução. |
AIJudgeLoopEvaluator |
Um cliente juiz separado diz que o pedido original não é totalmente respondido. |
DelegateLoopEvaluator |
O retorno de chamada retorna LoopEvaluation.Continue(...). |
Quando vários avaliadores são configurados, eles são executados em ordem. O primeiro avaliador que solicita outra iteração fornece seus comentários; o loop é interrompido somente quando todos os avaliadores se recusam a continuar.
Usar um juiz de IA
O juiz recebe a solicitação original e a resposta mais recente do agente. Se encontrar uma lacuna, sua análise se tornará um feedback para a próxima iteração:
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 });
Use apenas um ponto de extremidade de juiz em que você confia com a solicitação original e a resposta gerada.
Controle o contexto e a saída
Por padrão, LoopAgent reutiliza uma sessão e envia os comentários mais recentes do avaliador vencedor como a próxima entrada.
FreshContextPerIteration = true em vez disso, recria cada passagem da solicitação original mais um log de comentários agregado e redefine ou restaura a sessão.
As execuções que não são de streaming retornam uma transcrição agregada por padrão. Defina NonStreamingReturnsLastResponseOnly = true para retornar apenas a resposta final. O streaming sempre emite todas as iterações e quaisquer mensagens de comentários visíveis em nome de comentários.
O predicado recebe argumentos de palavra-chave, incluindo iteration, , last_result, messages, original_messages, session, , agent, progresse feedback. Os auxiliares todos_remaining() e background_tasks_running() fornecem condições internas e de tarefa em segundo plano. Emparelhe-os com todos_remaining_message ou background_tasks_running_message para gerar uma próxima entrada direcionada.
Usar um juiz de IA
AgentLoopMiddleware.with_judge cria um loop orientado pelo juiz. O juiz faz loops padrão para cinco iterações:
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],
)
O raciocínio do juiz é alimentado de volta ao agente quando mais trabalho é necessário. Use apenas um ponto de extremidade de juiz em que você confia com a solicitação original e a resposta gerada.
Contexto de controle, progresso e saída
Para loops avançados, construa AgentLoopMiddleware diretamente:
-
record_feedbackcria uma entrada de progresso concisa após cada iteração de trabalho. -
progressexpõe entradas acumuladas a retornos de chamada. -
inject_progress=Trueadiciona progresso à entrada da próxima iteração. -
fresh_context=Truereinicia da tarefa original e do log de progresso e restaura uma sessão anexada ao instantâneo de pré-loop. -
return_final_only=Trueretorna apenas a última resposta para execuções que não são de streaming.
Passe max_iterations=None somente quando o predicado de conclusão tiver a garantia de terminar.
As condições de conclusão empacotadas e a integração de juízes descritas nesta página não estão disponíveis atualmente no Go.
Usar looping com o Harness Agent
Use a configuração do Harness Agent quando você também quiser seu histórico pré-configurado, planejamento, memória, aprovação e pipeline de observabilidade.
Defina HarnessAgentOptions.LoopEvaluators. O arreio se aplica LoopAgent como seu decorador de agente mais externo:
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();
Um vazio ou nullLoopEvaluators uma coleção deixa o arreio com tiro único.
Aprovação e comportamento de sessão
LoopAgent para antes de avaliar sua condição de conclusão quando uma iteração retorna uma solicitação de aprovação de ferramenta pendente. Ele retorna a solicitação ao chamador em vez de escondê-la atrás de outra iteração autônoma. Depois que o chamador fornecer a resposta de aprovação por meio do fluxo normal de aprovação da ferramenta , o agente poderá continuar.
LoopAgent não adiciona a manipulação de aprovação em si. O Harness Agent aplica o loop externo ToolApprovalAgent, permitindo que solicitações de aprovação pendentes escapem do loop.
Reutilize o mesmo AgentSession entre chamadas para continuar a conversa. As iterações de loop compartilham essa sessão por padrão. Com FreshContextPerIteration = true, LoopAgent redefine ou restaura o estado de sessão fornecido pelo chamador, onde há suporte. O armazenamento de conversa de propriedade do serviço pode reter o histórico quando a sessão serializada contém apenas um identificador de conversa remota.
O fornecimento loop_should_continue para create_harness_agent; loop_max_iterations usa como padrão 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 personaliza a próxima entrada. Sem nenhum loop_should_continue, a fábrica não adiciona um loop e ignora os outros argumentos de loop.
Aprovação e comportamento de sessão
AgentLoopMiddleware para antes de avaliar seu predicado de continuação quando uma iteração retorna uma solicitação de aprovação de ferramenta pendente. Ele retorna a solicitação ao chamador em vez de escondê-la atrás de outra iteração autônoma. Depois que o chamador fornecer a resposta de aprovação por meio do fluxo normal de aprovação da ferramenta , o agente poderá continuar.
AgentLoopMiddleware não se adiciona ToolApprovalMiddleware . O Harness Agent coloca o loop fora de seu middleware de aprovação, permitindo que solicitações de aprovação pendentes escapem do loop. Crie e transmita cada execução AgentSession do Harness Agent enquanto a aprovação automática da ferramenta está habilitada.
Reutilize o mesmo AgentSession entre chamadas para continuar a conversa. As iterações de loop compartilham essa sessão por padrão. Com fresh_context=Trueo middleware, o middleware restaura a sessão anexada ao instantâneo pré-loop entre iterações. O armazenamento de conversa de propriedade do serviço pode reter o histórico quando a sessão serializada contém apenas um identificador de conversa remota.
Note
O looping do Harness Agent não está disponível no momento no Go, portanto, seu comportamento de aprovação e sessão não se aplica.