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 compone los bloques de creación existentes de Agent Framework en lugar de definir un entorno de ejecución de agente 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 : agregue control de aprobación, observabilidad y bucles enlazados opcionales.
  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 proveedor de sesión y contexto que otros agentes.

Matriz de funcionalidades de Harness

Capacidad Comportamiento 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 de modelo en una ejecución de llamada 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. Planeación y todos
Modos de agente Los modos de planeamiento y ejecución están habilitados de forma predeterminada. Planeación y todos
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; participar en un proveedor o rutas de acceso en Python. Aptitudes del agente
Agentes en segundo plano Delegación paralela opcional a agentes secundarios con nombre. Agentes en segundo plano
Ejecución del shell Compuesto a partir del paquete de shell; la fábrica de Python puede conectarla automáticamente. Herramientas de shell
Bucle Invocación limitada opcional controlada 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.

Creación de un agente de Harness

El Microsoft.Agents.AI.Harness paquete expone HarnessAgent en el Microsoft.Agents.AI espacio de nombres . 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);

Use HarnessAgentOptions para establecer instrucciones de funcionamiento de nivel de arnés, instrucciones específicas del agente y opciones de características:

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. Participar en el acceso a archivos con FileAccessStore, delegación en segundo plano con BackgroundAgentsy bucle con LoopEvaluators.

Creación de un agente de Harness

El create_harness_agent generador devuelve un elemento totalmente configurado Agent:

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 instrucciones específicas del agente y de nivel de arnés por separado:

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 aptitudes son opcionales a través skills_provider de o skills_paths; el acceso a archivos, los agentes en segundo plano, las herramientas de shell y el bucle también son opcionales.

Note

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

Note

Go Harness empaquetado no está disponible actualmente. 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 terminal de ejemplo que transmiten la salida, muestran todos y el modo actual, las solicitudes de aprobación de herramientas de superficie y proporcionan comandos como /todos, /modey /exit.

Importante

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