Passaggio 6: Agent Harness

Un harness esegue il wrapping di un client di chat con l'infrastruttura di supporto necessaria a un agente per gestire attività lunghe e in più passaggi: modalità di pianificazione/esecuzione, un elenco di attività su cui basare la pianificazione, compattazione del contesto, memoria dei file, accesso ai file e approvazione degli strumenti con opzione per non chiedere di nuovo. Anziché assemblare manualmente questi componenti, è possibile creare un agente harness e averli subito disponibili.

Creare un agente harness da qualsiasi elemento IChatClient con il metodo di estensione AsHarnessAgent. Poiché un harness gestisce le attività in modo interattivo in più passaggi, in genere viene controllato da un ciclo di conversazione: mantenere un elemento AgentSession affinché lo stato dell'harness (piano, attività e cronologia) venga mantenuto tra i turn, leggere l'istruzione successiva dell'utente e trasmettere in streaming l'output dell'agente man mano che viene prodotto.

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();
}

L'harness gestisce pianificazione, monitoraggio delle attività e persistenza della cronologia nell'intera conversazione. Per una console completa, con prompt di approvazione degli strumenti, rendering di attività/modalità e comandi slash, vedere l'esperienza utente del terminale di esempio.

Tip

Vedere gli esempi di .NET harness per le applicazioni eseguibili complete.

Creare un agente harness con la factory create_harness_agent. Poiché un harness esegue attività in modo interattivo nell’arco di molti passaggi, in genere lo si gestisce tramite un ciclo di conversazione: mantenere una sessione affinché lo stato dell’harness (piano, attività da svolgere e cronologia) persista tra un turno e l’altro, leggere l’istruzione successiva dell’utente e trasmettere in streaming l’output dell’agente man mano che viene generato.

from agent_framework import create_harness_agent
from agent_framework.openai import OpenAIChatClient

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

# A session carries the harness state (plan, todos, history) across turns.
session = agent.create_session()

print("Harness agent ready. Type 'exit' to quit.")
while True:
    user_input = input("> ")
    if user_input.strip().lower() in {"exit", "quit"}:
        break

    # Stream this turn's output as the harness plans and works through the request.
    async for chunk in agent.run(user_input, session=session, stream=True):
        if chunk.text:
            print(chunk.text, end="", flush=True)
    print()

L'harness gestisce pianificazione, monitoraggio delle attività e persistenza della cronologia nell'intera conversazione. Per una console completa, con prompt di approvazione degli strumenti, rendering di attività/modalità e comandi slash, vedere l'esperienza utente del terminale di esempio.

Tip

Per applicazioni complete ed eseguibili, vedere gli esempi di harness Python.

Annotazioni

Il supporto Go per gli harness degli agenti sarà disponibile a breve. Vedere il repository di Agent Framework Go per lo stato più aggiornato.

Passaggi successivi

Approfondimento: