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.

L'esempio completo crea un client di chat Microsoft Foundry, lo racchiude con create_harness_agent e riutilizza una sessione tra due turni. L'harness aggiunge pianificazione, rilevamento to-do e compattazione mentre l'esempio disabilita la memoria dei file e la ricerca Web per rimanere concentrato.

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 sessione condivisa mantiene lo stato di harness in entrambe le chiamate. Per una console completa, con prompt di approvazione degli strumenti, to-do e il rendering in modalità e comandi slash, vedere la UX del terminale di esempio.

Tip

Vedi l'esempio completo per iniziare. Per altri pattern, consulta 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: