Paso 6: Arnés del agente

Un harness envuelve un cliente de chat con la estructura que un agente necesita para llevar a cabo tareas largas de varios pasos: modos de planificación y ejecución, una lista de tareas pendientes sobre la que planificar, compactación de contexto, memoria de archivos, acceso a archivos y aprobación de herramientas sin necesidad de volver a preguntar. En lugar de montar esas piezas tú mismo, creas un agente de harness y las obtienes listas para usar.

Crea un agente de harness a partir de cualquier IChatClient con el método de extensión AsHarnessAgent. Dado que un harness administra las tareas de forma interactiva a lo largo de numerosos pasos, lo habitual es controlarlo mediante un bucle de conversación: mantener un AgentSession para que el estado del harness (plan, tareas pendientes e historial) se conserve entre turnos, leer la siguiente instrucción del usuario y transmitir la salida del agente a medida que se genera.

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

// chatClient is any IChatClient implementation (Foundry, Azure OpenAI, OpenAI, Anthropic, ...).
AIAgent agent = chatClient.AsHarnessAgent();

// A session carries the harness state (plan, todos, history) across turns.
AgentSession session = await agent.CreateSessionAsync();

Console.WriteLine("Harness agent ready. Type 'exit' to quit.");
while (true)
{
    Console.Write("> ");
    string? input = Console.ReadLine();
    if (string.IsNullOrWhiteSpace(input) || input.Equals("exit", StringComparison.OrdinalIgnoreCase))
    {
        break;
    }

    // Stream this turn's output as the harness plans and works through the request.
    await foreach (var update in agent.RunStreamingAsync(input, session))
    {
        Console.Write(update);
    }

    Console.WriteLine();
}

El harness se encarga de la planificación, el seguimiento de las tareas pendientes y la persistencia del historial por ti a lo largo de toda la conversación. Para ver una consola con todas las funciones —con mensajes de solicitud de aprobación de herramientas, visualización de tareas pendientes y modos, y comandos con barra— consulta la experiencia de usuario de terminal de ejemplo.

Tip

Consulte los ejemplos de .NET para ver aplicaciones completas listas para ejecutar.

El ejemplo completo crea un cliente de chat de Microsoft Foundry, lo envuelve con create_harness_agent y reutiliza una misma sesión en dos turnos. El arnés añade planificación, seguimiento de tareas pendientes y compactación, mientras que el ejemplo desactiva la memoria de archivos y la búsqueda web para mantener el enfoque.

import asyncio

from agent_framework import create_harness_agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential


async def main() -> None:
    agent = create_harness_agent(
        client=FoundryChatClient(
            project_endpoint="https://your-account.services.ai.azure.com/api/projects/your-project",
            model="gpt-6-luna",
            credential=AzureCliCredential(),
        ),
        agent_instructions="Help users plan and complete multi-step tasks.",
        disable_file_memory=True,
        disable_web_search=True,
    )
    session = agent.create_session()

    print(await agent.run("Plan a weekend trip to Seattle.", session=session))
    print(await agent.run("Turn that plan into a checklist.", session=session))


if __name__ == "__main__":
    asyncio.run(main())

La sesión compartida conserva el estado del harness en ambas llamadas. Para obtener una consola con todas las funciones —con mensajes de aprobación de herramientas, visualización de tareas pendientes y modos, y comandos de barra— consulta la experiencia de usuario de la terminal de ejemplo.

Tip

Consulte el ejemplo completo de primeros pasos. Para obtener más patrones, consulte los ejemplos del entorno de prueba de Python.

Note

La compatibilidad con Go para los harnesses de agentes estará disponible próximamente. Consulte el repositorio de Agent Framework Go para obtener el estado más reciente.

Pasos siguientes

Vaya más profundamente: