Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O looping do agente reinvoca um agente até que uma condição de conclusão seja satisfeita. Utilize-o para refinamento iterativo, conclusão de tarefas pendentes, aguardar tarefas em segundo plano ou avaliar se uma resposta cumpre critérios explícitos.
Delimite sempre os ciclos autónomos. Uma condição de completude pode falhar, um modelo pode parar, e um avaliador pode ser probabilístico.
Importante
A repetição em ciclo dos agentes é experimental.
Configurar a repetição manualmente
Use a API de composição direta quando pretender ciclos sem as outras predefinições do Harness Agent.
Importa os tipos de loop e envolve qualquer um AIAgent com LoopAgent. O 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 Agent normal. O máximo predefinido é de 10 execuções do 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. Voltar True para continuar, False para parar ou (continue, feedback) para passar feedback para a próxima iteração.
Observação
A funcionalidade de repetição integrada descrita nesta página não está disponível de momento no Go.
Escolha uma condição de completude
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 item resolvido TodoProvider ainda tem itens incompletos, opcionalmente, em modos de agente selecionados. |
BackgroundTaskCompletionLoopEvaluator |
Uma BackgroundAgentsProvider resolvida continua a ter tarefas em execução. |
AIJudgeLoopEvaluator |
Outro juiz cliente diz que o pedido original não foi totalmente respondido. |
DelegateLoopEvaluator |
A sua callback devolve LoopEvaluation.Continue(...). |
Quando vários avaliadores são configurados, são executados por ordem. O primeiro avaliador que solicita outra iteração fornece o seu feedback; O ciclo só termina quando todos os avaliadores recusam continuar.
Usa um juiz IA
O juiz recebe o pedido original e a resposta mais recente do agente. Se encontrar uma lacuna, a sua análise torna-se feedback para a iteração seguinte:
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 });
Utilize apenas um endpoint de avaliação que considere fiável para o pedido original e a resposta gerada.
Contexto de controlo e saída
Por defeito, LoopAgent reutiliza uma sessão e envia o feedback mais recente do avaliador vencedor como entrada seguinte.
FreshContextPerIteration = true em vez disso, reconstrói cada iteração a partir da solicitação original e de um registo consolidado de feedback e reinicia ou restaura a sessão.
As execuções sem streaming devolvem, por defeito, uma transcrição agregada. Configurado NonStreamingReturnsLastResponseOnly = true para devolver apenas a resposta final. O streaming emite sempre todas as iterações e quaisquer mensagens de feedback visíveis em nome do utilizador.
O predicado recebe argumentos de palavras-chave incluindo iteration, last_result, messages, original_messages, session, agent, progress, , e feedback. Os auxiliares todos_remaining() e background_tasks_running() disponibilizam condições incorporadas de tarefas por fazer e de tarefa em segundo plano. Emparelha-os com todos_remaining_message ou background_tasks_running_message para gerar um próximo input direcionado.
Usa um juiz IA
AgentLoopMiddleware.with_judge constrói um ciclo conduzido pelos juízes. Os ciclos de avaliação são, por defeito, de 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 é devolvido ao agente quando é necessário mais trabalho. Utiliza apenas um endpoint de avaliação em que confies para o pedido original e a resposta gerada.
Controla o contexto, o progresso e a saída
Para ciclos avançados, construa AgentLoopMiddleware diretamente:
-
record_feedbackcria uma entrada concisa de progresso após cada iteração de trabalho. -
progressexpõe as entradas acumuladas a callbacks. -
inject_progress=Trueadiciona o progresso aos dados de entrada da iteração seguinte. -
fresh_context=Truereinicia a partir da tarefa original e do registo de progresso e restaura uma sessão associada ao seu instantâneo anterior ao ciclo. -
return_final_only=Truedevolve apenas a última resposta para execuções sem streaming.
Passe max_iterations=None apenas quando o predicado de conclusão tiver garantia de terminar.
As condições de conclusão pré-definidas e a integração com o avaliador descritas nesta página não estão atualmente disponíveis para Go.
Utilizar ciclos com o Harness Agent
Utilize a configuração do agente Harness quando também quiser a sua pipeline pré-configurada de histórico, planeamento, memória, aprovações e observabilidade.
Defina HarnessAgentOptions.LoopEvaluators. O arnês aplica-se LoopAgent como o seu agente decorativo 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();
Uma coleção vazia ou nullLoopEvaluators deixa o suporte de disparo único.
Aprovação e comportamento da sessão
LoopAgent pára antes de avaliar a sua condição de conclusão quando uma iteração devolve um pedido pendente de aprovação de ferramenta. Devolve o pedido ao chamador em vez de o esconder atrás de outra iteração autónoma. Depois de o chamador fornecer a resposta de aprovação através do fluxo normal de aprovação da ferramenta , o agente pode continuar.
LoopAgent não acrescenta a gestão da aprovação em si. O Harness Agent aplica o ciclo fora de ToolApprovalAgent, permitindo que os pedidos de aprovação pendentes fiquem fora do ciclo.
Reutiliza o mesmo AgentSession entre chamadas para continuar a conversa. As iterações do ciclo partilham essa sessão por defeito. Com FreshContextPerIteration = true, LoopAgent repõe ou restaura o estado da sessão fornecido pelo chamador, quando tal é suportado. O armazenamento de conversas detido pelo serviço pode reter o histórico quando a sessão serializada contém apenas um identificador remoto da conversa.
Forneça loop_should_continue a create_harness_agent; loop_max_iterations tem como valor predefinido 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 loop_should_continue, a fábrica não adiciona um loop e ignora os outros argumentos do loop.
Aprovação e comportamento de sessão
AgentLoopMiddleware para antes de avaliar o respetivo predicado de continuação quando uma iteração devolve um pedido pendente de aprovação da ferramenta. Devolve o pedido ao chamador em vez de o esconder atrás de outra iteração autónoma. Depois de o chamador fornecer a resposta de aprovação através do fluxo normal de aprovação da ferramenta , o agente pode continuar.
AgentLoopMiddleware não adiciona ToolApprovalMiddleware por si só. O Agente do Harness coloca o ciclo fora do seu middleware de aprovação, permitindo que os pedidos de aprovação pendentes saiam desse ciclo. Criar e passar um AgentSession em cada execução do Harness Agent enquanto a aprovação automática da ferramenta está ativada.
Reutiliza o mesmo AgentSession entre chamadas para continuar a conversa. As iterações do ciclo partilham essa sessão por defeito. Com fresh_context=True, o middleware repõe a sessão anexada na captura instantânea anterior ao ciclo entre iterações. O armazenamento de conversas pertencente ao serviço pode reter o histórico quando a sessão serializada contém apenas um identificador de conversa remota.
Observação
A execução em ciclo do Harness Agent não está atualmente disponível em Go, pelo que o seu comportamento de aprovação e de sessão não se aplica.