Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.
Tip
Veja o exemplo completo de primeiros passos. Para mais padrões, veja os exemplos do ambiente de execução Python.
Tip
A agent-framework-builder-python competência do agente de programação pode orientar a composição e as escolhas de pacotes. É separado das Agent Skills em tempo de execução, que continuam a ser uma capacidade opcional do harness em Python.
Prerequisites
- Go 1.26 ou posterior.
- Um checkout local do repositório Agent Framework Go.
- Um endpoint de projeto Foundry e implementação de modelos, configurados através de
FOUNDRY_PROJECT_ENDPOINTeFOUNDRY_MODEL. - Uma credencial do Azure suportada por
DefaultAzureCredential, como um início de sessão CLI do Azure comaz login.
Configurar o harness Go
O pacote agent/harness configura um agente comum suportado por fornecedor. Passe o resultado de harness.AgentConfig para o construtor do provider:
import (
"context"
"fmt"
"os"
"path/filepath"
"github.com/microsoft/agent-framework-go/agent"
"github.com/microsoft/agent-framework-go/agent/harness"
"github.com/microsoft/agent-framework-go/examples/internal/demo"
"github.com/microsoft/agent-framework-go/message"
"github.com/microsoft/agent-framework-go/provider/foundryprovider"
)
workingDirectory, err := os.Getwd()
if err != nil {
return fmt.Errorf("get working directory: %w", err)
}
cfg, err := harness.AgentConfig(harness.Config{WorkingDirectory: workingDirectory}, agent.Config{
Name: "HarnessAssistant",
Middlewares: []agent.Middleware{logger},
})
if err != nil {
return err
}
a := foundryprovider.NewAgent(
demo.FoundryProjectEndpoint,
demo.FoundryTokenCredential(),
foundryprovider.ModelDeployment(demo.FoundryModel),
foundryprovider.AgentConfig{
Config: cfg,
DisableStoreOutput: true,
Instructions: "Help with software engineering tasks. Use memory and todos to track the current session's work.",
},
)
As predefinições incluem “todos”, os modos de planear e executar, memória de ficheiros isolada por sessão, competências, pesquisa web alojada, middleware de aprovação de ferramentas e instrumentação OpenTelemetry. O helper também permite a persistência do histórico de chamadas por serviço e a injeção de mensagens.
Este exemplo da Foundry define DisableStoreOutput: true para que a história local domine a conversa. Defina DisableWebSearch em harness.Config se o fornecedor ou a implementação selecionados não suportam pesquisa web alojada.
Executa a amostra completa a partir da raiz do repositório Go:
go run .\examples\02-agents\harness\step04_composite_harness
A amostra reutiliza uma sessão em dois turnos, gere pedidos de aprovação de ferramentas e abre uma sessão separada para demonstrar isolamento de memória. A memória do ficheiro persiste em agent-file-memory no diretório de trabalho.
Compactação e looping são opcionais, em vez de serem predefinições do harness Go. Para limites de configuração e de componentes, consulte Agent Harness.
Tip
Consulte a amostra completa de harness composto e o guia de configuração do harness Go.
Passos seguintes
Vai mais fundo:
- Ambientes de execução de agentes — compactação, ciclos, shell e a interface de utilizador do terminal de exemplo
- Competências de Agente — carregam progressivamente competências a partir do sistema de ficheiros