Agentes de fundo

Os agentes de antecedentes permitem que um agente pai delegue tarefas independentes a agentes filhos nomeados. Cada tarefa é executada em simultâneo na sua própria sessão child-agent, enquanto o pai mantém um ID de tarefa que pode usar para esperar, obter resultados, continuar o trabalho ou libertar a tarefa.

Importante

Os agentes de fundo são experimentais.

Agentes de fundo são diferentes das respostas de fundo. Uma resposta em segundo plano representa um pedido de prestador que a candidatura consulta ou retoma. Uma tarefa de agente em segundo plano invoca outro agente do Agent Framework e mais tarde envia o resultado de texto desse agente de volta ao pai.

Configurar manualmente os agentes em segundo plano

Cada agente criança deve ter um nome não vazio e indistinto a maiúsculas minúsculas. Dê aos agentes infantis instruções focadas e apenas as ferramentas necessárias para o seu papel delegado.

Importa BackgroundAgentsProvider e adiciona a um agente normal através ChatClientAgentOptions.AIContextProvidersde:

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

var backgroundProvider = new BackgroundAgentsProvider(
    [webSearchAgent, codeAnalysisAgent]);

AIAgent parentAgent = chatClient.AsAIAgent(new ChatClientAgentOptions
{
    Name = "research-coordinator",
    AIContextProviders = [backgroundProvider],
});

AgentSession session = await parentAgent.CreateSessionAsync();

BackgroundAgentsProviderOptions personaliza as instruções do fornecedor e a formatação da lista de agentes.

from agent_framework import Agent, BackgroundAgentsProvider

background_provider = BackgroundAgentsProvider(
    [web_search_agent, code_analysis_agent]
)

parent_agent = Agent(
    client=client,
    name="research-coordinator",
    context_providers=[background_provider],
)
session = parent_agent.create_session()

Passe instructions= para BackgroundAgentsProvider substituir as suas instruções. Inclua {background_agents} onde deve aparecer a lista formatada de agentes infantis.

Observação

O fornecedor de agente de antecedentes incluído descrito nesta página não está atualmente disponível no Go.

Ciclo de vida da tarefa

O fornecedor adiciona as mesmas ferramentas orientadas para modelos em .NET e Python:

Tool Ação ao longo do ciclo de vida
background_agents_start_task Inicia uma tarefa não bloqueante num agente nomeado e devolve o ID inteiro da tarefa.
background_agents_wait_for_first_completion Espere até que a primeira tarefa de um conjunto fornecido atinja um estado terminal.
background_agents_get_task_results Devolver mensagem concluída, uma mensagem de falha ou o estado atual.
background_agents_get_all_tasks Liste IDs, estatutos, nomes de agentes e descrições.
background_agents_continue_task Execute o input de seguimento na sessão filho existente após a conclusão ou falha de uma tarefa.
background_agents_clear_completed_task Remova uma tarefa terminal e liberte a sua sessão filha.

Uma sequência típica pai-agente é:

  1. Inicia todas as tarefas independentes antes de esperar, para que as tarefas corram em simultâneo.
  2. Espera pela primeira conclusão, recupera esse resultado e repete até não haver tarefas a correr.
  3. Continuar uma tarefa concluída ou falhada quando o trabalho de seguimento necessita do contexto de conversa existente.
  4. Limpar as tarefas terminais após recuperar os resultados, a menos que sejam continuadas.

O estado da tarefa é running, completed, failed, ou lost. Uma tarefa perde-se quando o seu handle de tarefa em processo ou a sua sessão filha não está disponível, como após um reinício de processo ou restauração de sessão. Metadados de tarefas serializáveis podem permanecer na sessão principal, mas o trabalho em tempo real e os handles de sessão filha não sobrevivem a esse limite.

Não existe nenhuma ferramenta de cancelamento no fornecedor. Deixe as tarefas em execução atingirem um estado terminal antes de as limpar.

Reutilize a mesma sessão principal entre turnos. Cada tarefa recebe uma sessão dedicada ao filho. Continuar uma tarefa terminal reutiliza essa sessão filha; Limpá-lo remove os metadados da tarefa e liberta o handle da sessão filha.

Os resultados da tarefa são devolvidos ao pai como texto. O fornecedor não faz proxy do pedido estruturado de aprovação de ferramenta da criança através do pai, por isso configura os agentes filhos para completarem o trabalho delegado sem aprovação interativa ou tratam das suas aprovações dentro do anfitrião do agente criança.

Adiciona a espera automática manualmente

Envolva o pai composto manualmente com LoopAgent. BackgroundTaskCompletionLoopEvaluator Continua apenas enquanto uma tarefa permanece no Running estado:

AIAgent loopingParent = new LoopAgent(
    parentAgent,
    new BackgroundTaskCompletionLoopEvaluator(),
    new LoopAgentOptions { MaxIterations = 10 });

O avaliador para para tarefas concluídas, falhadas e perdidas.

Adicione AgentLoopMiddleware ao pai normal e emparelhe o predicado de tarefa em segundo plano com o seu assistente de próxima mensagem:

from agent_framework import (
    Agent,
    AgentLoopMiddleware,
    background_tasks_running,
    background_tasks_running_message,
)

parent_agent = Agent(
    client=client,
    context_providers=[background_provider],
    middleware=[
        AgentLoopMiddleware(
            background_tasks_running(),
            next_message=background_tasks_running_message,
            max_iterations=10,
        )
    ],
)

O predicado continua apenas enquanto o estado persistente da tarefa ainda reporta uma tarefa em execução.

A integração automática entre o ciclo em segundo plano e tarefas não está atualmente disponível no Go.

Use agentes de fundo com o Harness Agent

Use esta configuração quando também quiser o pipeline padrão de planeamento, memória, aprovação e observabilidade do Harness Agent.

Defina HarnessAgentOptions.BackgroundAgents. Adicione o avaliador de conclusão quando o pai deve continuar a funcionar até que o trabalho delegado deixe de estar a funcionar:

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

var options = new HarnessAgentOptions
{
    Name = "research-coordinator",
    BackgroundAgents = [webSearchAgent, codeAnalysisAgent],
    LoopEvaluators = [new BackgroundTaskCompletionLoopEvaluator()],
    LoopAgentOptions = new LoopAgentOptions { MaxIterations = 10 },
};

HarnessAgent parentAgent = chatClient.AsHarnessAgent(options);
// Equivalent construction: new HarnessAgent(chatClient, options)
AgentSession session = await parentAgent.CreateSessionAsync();

Use HarnessAgentOptions.BackgroundAgentsProviderOptions para personalizar as instruções do fornecedor e a formatação da lista de agentes. Omitir LoopEvaluators mantém a delegação em segundo plano disponível sem reinvocação automática.

Fornecer background_agents a create_harness_agent. Emparelha-o com um loop limitado quando o pai deve esperar automaticamente:

from agent_framework import (
    background_tasks_running,
    background_tasks_running_message,
    create_harness_agent,
)

parent_agent = create_harness_agent(
    client=client,
    name="research-coordinator",
    background_agents=[web_search_agent, code_analysis_agent],
    loop_should_continue=background_tasks_running(),
    loop_next_message=background_tasks_running_message,
    loop_max_iterations=10,
)
session = parent_agent.create_session()

Use background_agents_instructions para substituir as instruções do fornecedor. O harness Python ativa middleware de aprovação automática de ferramentas por defeito, por isso passa session em cada execução.

Observação

A delegação de antecedentes do Harness Agent não está atualmente disponível no Go.

Considerações de segurança

Regista apenas agentes infantis em quem confias. O pai pode enviar-lhes texto derivado de contexto privado ou não confiável, e os seus resultados são adicionados novamente ao contexto do pai. Uma criança comprometida pode exfiltrar a entrada delegada ou devolver conteúdo indireto de injeção de prompt.

Passos seguintes

Aprofunde-se