Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los agentes en segundo plano permiten a un agente primario delegar tareas independientes en agentes secundarios con nombre. Cada tarea se ejecuta simultáneamente en su propia sesión del agente secundario, mientras que el elemento primario mantiene un identificador de tarea que puede usar para esperar, recuperar resultados, continuar el trabajo o liberar la tarea.
Importante
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 del agente en segundo plano invoca otro agente de Agent Framework y, posteriormente, devuelve el resultado de texto del agente al elemento primario.
Configuración manual de agentes en segundo plano
Cada agente secundario debe tener un nombre único sin distinción entre mayúsculas y minúsculas. Proporcione instrucciones centradas en agentes secundarios y solo las herramientas necesarias para su rol delegado.
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 para BackgroundAgentsProvider reemplazar sus instrucciones. Incluya dónde {background_agents} debe aparecer la lista de agentes secundarios con formato.
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 del ciclo de vida |
|---|---|
background_agents_start_task |
Inicie una tarea sin bloqueo en un agente con nombre y devuelva su identificador de tarea entero. |
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 |
Quite una tarea de terminal y suelte su sesión secundaria. |
Una secuencia típica del agente primario es:
- Inicie todas las tareas independientes antes de esperar, por lo que las tareas se ejecutan simultáneamente.
- Espere a la primera finalización, recupere ese resultado y repita hasta que no se ejecute ninguna tarea.
- Continúe una tarea completada o con errores cuando el trabajo de seguimiento necesite su contexto de conversación existente.
- Borre las tareas de terminal después de recuperar sus resultados a menos que se continúen.
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.
Vuelva a usar la misma sesión primaria en turnos. Cada tarea recibe una sesión secundaria 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 proxy la solicitud de aprobación de herramientas estructurada de un elemento secundario a través del elemento primario, por lo que configura los agentes secundarios para completar el trabajo delegado sin aprobación interactiva ni controla sus aprobaciones dentro del host del agente secundario.
Agregar la espera automática manualmente
Ajuste el elemento primario compuesto 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 para las tareas completadas, con errores 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 de tarea persistente sigue informando de una tarea en ejecución.
La integración automática del bucle de tareas en segundo plano no está disponible actualmente en Go.
Uso de agentes en segundo plano con el agente de Harness
Use esta configuración cuando también desee la canalización predeterminada del agente de Harness, la memoria, la aprobación y la observabilidad.
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. La omisión LoopEvaluators mantiene la delegación en segundo plano disponible sin volver a invocar automáticamente.
Proporcione background_agents a create_harness_agent. Emparejelo con un bucle delimitado cuando el elemento primario debe 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 Python harness habilita el middleware de aprobación automática de herramientas de forma predeterminada, por lo que pasa session 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 secundarios de confianza. El elemento primario puede enviarlos texto derivado del contexto privado o que no es de confianza, y sus resultados se vuelven a agregar al contexto del elemento primario. Un elemento secundario en peligro puede filtrar la entrada delegada o devolver contenido indirecto de inyección de mensajes.