Passo 6: Arnês de Agente

Uma estrutura envolvente fornece a um cliente de chat a estrutura de apoio de que um agente precisa para executar tarefas longas, com várias etapas — modos de planeamento/execução, uma lista de tarefas com base na qual planear, compactação de contexto, memória de ficheiros, acesso a ficheiros e aprovação de ferramentas com a opção “não voltar a perguntar”. Em vez de montares essas peças tu próprio, crias um agente de arnês e tiras-as da caixa.

Crie um agente de harness a partir de qualquer IChatClient com o método de extensão AsHarnessAgent. Como um ambiente de execução processa tarefas de forma interativa ao longo de várias etapas, normalmente é controlado através de um ciclo de conversa: mantenha um AgentSession para que o estado do ambiente de execução (plano, itens pendentes e histórico) persista entre interações, leia a instrução seguinte do utilizador e transmita a saída do agente à medida que é gerada.

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

O sistema gere o planeamento, o acompanhamento das tarefas pendentes e a persistência do histórico por si, ao longo de toda a conversa. Para uma consola com todas as funcionalidades — com pedidos de aprovação de ferramentas, apresentação do modo e da lista de tarefas, e comandos com barra — consulte a interface de terminal de exemplo.

Tip

Consulte os exemplos de aplicações de teste .NET para ver aplicações completas executáveis.

O exemplo completo cria um cliente de chat Microsoft Foundry, envolve-o com create_harness_agent, e reutiliza uma sessão ao longo de dois turnos. O harness adiciona planeamento, acompanhamento de tarefas e compactação, enquanto a amostra desativa a memória de ficheiros e a pesquisa web para manter o foco.

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

A sessão partilhada preserva o estado do harness em ambas as chamadas. Para uma consola completa – com prompts de aprovação de ferramentas, renderização de to-do e modos, e comandos de barra – veja o exemplo de UX do terminal.

Observação

O suporte da Go para arnês de agente está a chegar em breve. Consulte o repositório Agent Framework Go para o estado mais recente.

Passos seguintes

Vai mais fundo: