Agent Harness

Un arnés de agente es el scaffolding en tiempo de ejecución que convierte un modelo de lenguaje en un agente que puede realizar el trabajo. Controla el modelo y las llamadas a herramientas, administra el estado y el contexto de la conversación, aplica directivas de aprobación y puede mantener el progreso del agente a través de una tarea de varios pasos.

Agent Framework proporciona un arnés con opiniones, baterías incluidas para la investigación, codificación, análisis de datos y otro trabajo de larga duración. Proporciona un cliente de chat y personaliza solo las funcionalidades que necesita la aplicación.

Architecture

Harness se compone de los componentes básicos existentes de Agent Framework en lugar de definir un entorno de ejecución para agentes independiente:

  1. Cliente de chat : conecta el agente a un modelo.
  2. Canalización de chat : agrega invocación de funciones, inyección de mensajes, persistencia del historial de llamadas por servicio y compactación opcional.
  3. Proveedores de agentes y contextos : agregue instrucciones con ámbito de sesión, herramientas, memoria, estado de tareas pendientes, modos operativos y funcionalidades opcionales.
  4. Middleware y decoradores — añada gestión de aprobaciones, observabilidad e iteración acotada opcional.
  5. Experiencia del usuario de la aplicación : transmite respuestas, muestra el progreso y recopila entradas como aprobaciones de herramientas.

El objeto resultante sigue siendo un agente normal de Agent Framework: un HarnessAgent que deriva de AIAgent en .NET o un Agent devuelto por create_harness_agent en Python. Sus sesiones usan las mismas abstracciones de sesión y de proveedor de contexto que otros agentes.

Matriz de funcionalidades de Harness

Capability Funcionamiento de Harness Guía canónica
function_invocation Habilitado con un límite configurable de iteración por solicitud. Herramientas de función
Persistencia del historial de llamadas por servicio Conserva el historial después de cada llamada al modelo durante una ejecución con llamadas a herramientas. Sesiones
Compactación Se habilita cuando se proporcionan límites de token o una estrategia personalizada. Compactación
Seguimiento de tareas pendientes Habilitado de forma predeterminada. Planificación y tareas pendientes
Modos de agente Los modos de planeamiento y ejecución están habilitados de forma predeterminada. Planificación y tareas pendientes
Memoria de archivos y acceso a archivos La memoria del archivo de sesión está habilitada de forma predeterminada; el acceso a archivos compartidos es opcional. Proveedores de contexto
Aprobación de herramientas Las aprobaciones permanentes y las reglas de aprobación automática están habilitadas de forma predeterminada. Aprobación de herramientas
OpenTelemetry La observabilidad del agente está habilitada de forma predeterminada. Observabilidad
Búsqueda web Se ha agregado de forma predeterminada donde el cliente de chat seleccionado lo admite. Búsqueda web
Aptitudes del agente Habilitado de forma predeterminada en .NET; se activa opcionalmente a través de un proveedor o rutas de acceso en Python. Aptitudes del agente
Agentes en segundo plano Delegación paralela opcional a agentes secundarios designados. Agentes en segundo plano
Ejecución del shell Compuesto por el paquete shell; la factoría de Python puede conectarlo automáticamente. Herramientas de shell
Bucle Reinvocación acotada opcional impulsada por evaluadores o predicados. Bucle del agente

La delegación del agente en segundo plano es independiente de las respuestas en segundo plano administradas por el proveedor. Los agentes en segundo plano ejecutan agentes secundarios en tareas delegadas; Las respuestas en segundo plano sondean o reanudan una solicitud de proveedor mediante un token de continuación.

Crear un agente de Harness

El paquete Microsoft.Agents.AI.Harness expone HarnessAgent en el espacio de nombres Microsoft.Agents.AI. Cree uno a partir de cualquiera IChatClient con AsHarnessAgento construya HarnessAgent directamente:

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

AIAgent agent = chatClient.AsHarnessAgent();

AgentResponse response = await agent.RunAsync("Plan a weekend trip to Seattle.");
Console.WriteLine(response.Text);

Utilice HarnessAgentOptions para establecer instrucciones de funcionamiento a nivel del arnés, instrucciones específicas del agente y opciones de funciones:

AIAgent agent = chatClient.AsHarnessAgent(new HarnessAgentOptions
{
    Name = "research-agent",
    HarnessInstructions = "Use tools deliberately and report verified results.",
    ChatOptions = new ChatOptions
    {
        Instructions = "You are a research assistant focused on academic sources.",
    },
    MaxContextWindowTokens = 128_000,
    MaxOutputTokens = 16_384,
});

HarnessAgent.DefaultInstructions proporciona la guía de arnés predeterminada. HarnessInstructions aparece antes de ChatOptions.Instructions.

Personalización de la composición

Las funcionalidades predeterminadas tienen opciones de destino, como DisableTodoProvider, DisableAgentModeProvider, DisableFileMemory, DisableAgentSkillsProviderDisableWebSearch, , DisableToolAutoApproval, y DisableOpenTelemetryDisableCompaction.

Agregue proveedores de contexto personalizados con AIContextProviders. Activa el acceso a archivos con FileAccessStore, la delegación en segundo plano con BackgroundAgents y la repetición en bucle con LoopEvaluators.

Crear un agente de Harness

La create_harness_agent factoría devuelve un Agent totalmente configurado:

from agent_framework import create_harness_agent
from agent_framework.openai import OpenAIChatClient

agent = create_harness_agent(
    client=OpenAIChatClient(model="gpt-4o"),
)

session = agent.create_session()
response = await agent.run("Plan a weekend trip to Seattle.", session=session)
print(response.text)

Establezca por separado instrucciones a nivel del entorno y específicas del agente:

agent = create_harness_agent(
    client=client,
    name="research-agent",
    harness_instructions="Use tools deliberately and report verified results.",
    agent_instructions="You are a research assistant focused on academic sources.",
    max_context_window_tokens=128_000,
    max_output_tokens=16_384,
)

DEFAULT_HARNESS_INSTRUCTIONS proporciona la guía de arnés predeterminada. harness_instructions aparece antes de agent_instructions.

Personalización de la composición

Deshabilite los valores predeterminados con opciones como disable_todo, disable_mode, disable_file_memory, disable_web_search, disable_tool_auto_approvaly disable_compaction.

Reemplace los proveedores integrados por todo_provider o mode_providery agregue proveedores por context_providers. Las capacidades se activan opcionalmente mediante skills_provider o skills_paths; el acceso a archivos, los agentes en segundo plano, las herramientas del shell y la ejecución en bucle también se activan opcionalmente.

Note

create_harness_agent se libera. Los agentes en segundo plano, el acceso a archivos y la ejecución en bucle siguen siendo experimentales, y las herramientas de shell provienen del paquete agent-framework-tools en versión preliminar.

Note

Actualmente no hay disponible un Go Harness empaquetado. Redacte directamente los paquetes correspondientes del agente de Go, el proveedor de contexto, la compactación y el middleware. Consulte el repositorio Agent Framework Go para obtener soporte técnico actual.

Experiencia del usuario de terminal de ejemplo

Harness no prescribe una interfaz de aplicación. El repositorio incluye aplicaciones de ejemplo para terminal que muestran la salida en tiempo real, las tareas pendientes y el modo actual, muestran solicitudes de aprobación de herramientas y proporcionan comandos como /todos, /mode y /exit.

Important

Estos proyectos de consola son ejemplos, no componentes de marco enviados. Úselos como ejemplos ejecutables o como punto de partida para su propia experiencia de terminal.

El punto de entrada de ejemplo .NET es HarnessConsole.RunAgentAsync:

using Harness.Shared.Console;

await HarnessConsole.RunAgentAsync(
    agent,
    userPrompt: "Ask me anything to get started.");

Personalice el ejemplo con observadores, formateadores de herramientas, controladores de comandos y HarnessConsoleOptions. Consulte los ejemplos de .NET Harness.

En el ejemplo de Python se usa el paquete basado en console texto junto a los ejemplos de Harness:

from console import run_agent_async

await run_agent_async(agent)

Personalice el ejemplo con observadores, formateadores, comandos y componentes de interfaz de usuario. Consulte los ejemplos de Python Harness.

El repositorio no incluye actualmente un ejemplo de terminal de Go Harness empaquetado.

Pasos siguientes

Profundizar un poco más