Agentes en segundo plano

Los agentes en segundo plano permiten a un agente principal delegar tareas independientes en agentes secundarios identificados por nombre. Cada tarea se ejecuta de forma simultánea en su propia sesión de agente secundario, mientras que el agente principal mantiene un identificador de tarea que puede usar para esperar, recuperar resultados, continuar con el trabajo o liberar la tarea.

Important

Los agentes en segundo plano son experimentales.

Los agentes en segundo plano son diferentes de las respuestas en segundo plano. Una respuesta en segundo plano representa una solicitud de proveedor que la aplicación sondea o reanuda. Una tarea de agente en segundo plano invoca a otro agente del marco Agent Framework y, más tarde, transmite de vuelta al agente principal el resultado textual de ese agente.

Configuración manual de agentes en segundo plano

Cada agente hijo debe tener un nombre no vacío y único sin distinguir entre mayúsculas y minúsculas. Proporcione a los agentes secundarios instrucciones concretas y solo las herramientas necesarias para su función delegada.

Importe BackgroundAgentsProvider y agréguelo a un agente normal mediante ChatClientAgentOptions.AIContextProviders:

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 las instrucciones del proveedor y el formato de 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()

Pase instructions= a BackgroundAgentsProvider para reemplazar sus instrucciones. Incluya {background_agents} donde deba aparecer la lista formateada de agentes secundarios.

Note

El proveedor de agente en segundo plano empaquetado descrito en esta página no está disponible actualmente en Go.

Ciclo de vida de la tarea

El proveedor agrega las mismas herramientas orientadas al modelo en .NET y Python:

Herramienta Acción de ciclo de vida
background_agents_start_task Inicie una tarea no bloqueante en un agente especificado por nombre y devuelva el identificador entero de la tarea.
background_agents_wait_for_first_completion Espere hasta que la primera tarea de un conjunto proporcionado alcance un estado terminal.
background_agents_get_task_results Devuelve texto completado, un mensaje de error o el estado actual.
background_agents_get_all_tasks Enumera los identificadores, los estados, los nombres de agente y las descripciones.
background_agents_continue_task Ejecute la entrada de seguimiento en la sesión secundaria existente después de que una tarea se complete o produzca un error.
background_agents_clear_completed_task Eliminar una tarea del terminal y liberar su sesión hija.

Una secuencia típica del agente primario es:

  1. Inicie todas las tareas independientes antes de esperar, por lo que las tareas se ejecutan simultáneamente.
  2. Espere a la primera finalización, recupere ese resultado y repita hasta que no se ejecute ninguna tarea.
  3. Continúe una tarea completada o fallida cuando el trabajo posterior requiera el contexto de conversación existente.
  4. Elimine las tareas del terminal después de recuperar sus resultados, a menos que se vayan a continuar.

El estado de la tarea es running, completed, failedo lost. Una tarea se pierde cuando su identificador de tarea en proceso o la sesión secundaria no está disponible, como después de reiniciar un proceso o restaurar la sesión. Los metadatos de tareas serializables pueden permanecer en la sesión primaria, pero los identificadores de trabajo en curso y de sesión secundaria no sobreviven a ese límite.

No hay ninguna herramienta de cancelación en el proveedor. Deje que las tareas en ejecución lleguen a un estado de terminal antes de borrarlas.

Reutilice la misma sesión principal entre turnos. Cada tarea recibe una sesión hija dedicada. Continuar con una tarea de terminal reutiliza esa sesión secundaria; borrarlo quita los metadatos de la tarea y libera el identificador de sesión secundaria.

Los resultados de la tarea se devuelven al elemento primario como texto. El proveedor no redirige la solicitud estructurada de aprobación de herramientas de un agente hijo de vuelta a través del agente padre, así que configure los agentes hijo para completar el trabajo delegado sin aprobación interactiva o gestionar sus aprobaciones dentro del host del agente hijo.

Agregar la espera automática manualmente

Encierre el elemento padre creado manualmente con LoopAgent. BackgroundTaskCompletionLoopEvaluator continúa solo mientras una tarea permanece en estado Running :

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

El evaluador se detiene en las tareas completadas, fallidas y perdidas.

Agregue AgentLoopMiddleware al elemento primario normal y empareje el predicado de tarea en segundo plano con su asistente de mensaje siguiente:

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,
        )
    ],
)

El predicado solo continúa mientras el estado persistido de la tarea siga indicando que la tarea está en ejecución.

La integración automática del bucle de tareas en segundo plano no está disponible actualmente en Go.

Usar agentes en segundo plano con Harness Agent

Utilice esta configuración si también desea el flujo predeterminado de planificación, memoria, aprobación y observabilidad del agente de Harness.

Establezca HarnessAgentOptions.BackgroundAgents. Agregue el evaluador de finalización cuando el elemento primario debe seguir ejecutándose hasta que el trabajo delegado ya no se esté ejecutando:

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 las instrucciones del proveedor y el formato de lista de agentes. Omitir LoopEvaluators hace que la delegación en segundo plano siga estando disponible sin que se vuelva a invocar automáticamente.

Proporcione background_agents a create_harness_agent. Emparejarlo con un bucle acotado cuando el padre deba esperar automáticamente:

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 reemplazar las instrucciones del proveedor. El entorno de ejecución de Python activa de forma predeterminada el middleware de aprobación automática de herramientas, por lo que debes pasar session en cada ejecución.

Note

La delegación en segundo plano del agente de Harness no está disponible actualmente en Go.

Consideraciones de seguridad

Registre solo agentes hijo en los que confía. El elemento padre puede enviarles texto derivado de un contexto privado o no fiable, y sus resultados se añaden de nuevo al contexto del elemento padre. Un componente secundario comprometido puede exfiltrar la entrada delegada o devolver contenido indirecto de inyección de prompts.

Pasos siguientes

Profundizar un poco más