Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um arreio de agente é o scaffolding de runtime que transforma um modelo de linguagem em um agente que pode executar o trabalho. Ele orienta o modelo e as chamadas de ferramenta, gerencia o estado e o contexto da conversa, aplica políticas de aprovação e pode manter o agente em andamento por meio de uma tarefa de várias etapas.
O Agent Framework fornece um Harness opinativo incluído em baterias para pesquisa, codificação, análise de dados e outros trabalhos de longa execução. Você fornece um cliente de chat e personaliza apenas os recursos de que seu aplicativo precisa.
Architecture
O Harness compõe os blocos de construção existentes do Agent Framework em vez de definir um runtime de agente separado:
- Cliente de chat – conecta o agente a um modelo.
- Pipeline de chat – adiciona invocação de função, injeção de mensagem, persistência de histórico de chamadas por serviço e compactação opcional.
- Provedores de agente e contexto – adicione instruções, ferramentas, memória, estado todo, modos operacionais e recursos opcionais no escopo da sessão.
- Middleware e decoradores — adicione tratamento de aprovação, observabilidade e loops limitados opcionais.
- UX do aplicativo — transmite respostas, exibe progresso e coleta entradas, como aprovações de ferramentas.
O objeto resultante continua sendo um agente normal do Agent Framework: um HarnessAgent que deriva de AIAgent .NET ou um Agent retornado por create_harness_agent Python. Suas sessões usam as mesmas abstrações de provedor de sessão e contexto que outros agentes.
Matriz de funcionalidade do Harness
| Capacidade | Comportamento do harness | Diretrizes canônicas |
|---|---|---|
| Invocação de função | Habilitado com um limite de iteração configurável por solicitação. | Ferramentas de função |
| Persistência do histórico de chamadas por serviço | Persiste o histórico após cada chamada de modelo em uma execução de chamada de ferramenta. | Sessões |
| Compactação | Habilitado quando os limites de token ou uma estratégia personalizada são fornecidos. | Compactação |
| Acompanhamento de todo | Habilitado por padrão. | Planejamento e todos |
| Modos de agente | Os modos de plano e execução são habilitados por padrão. | Planejamento e todos |
| Memória do arquivo e acesso a arquivos | A memória do arquivo de sessão está habilitada por padrão; O acesso a arquivos compartilhados é opt-in. | Provedores de contexto |
| Aprovação da ferramenta | As aprovações permanentes e as regras de aprovação automática são habilitadas por padrão. | Aprovação da ferramenta |
| OpenTelemetry | A observabilidade do agente é habilitada por padrão. | Observabilidade |
| Pesquisa na Web | Adicionado por padrão em que o cliente de chat selecionado dá suporte a ele. | Pesquisa na Web |
| Habilidades do Agente | Habilitado por padrão no .NET; opt-in por meio de um provedor ou caminhos em Python. | Habilidades do agente |
| Agentes em segundo plano | Delegação paralela opcional para agentes filho nomeados. | Agentes em segundo plano |
| Execução do shell | Composto do pacote de shell; a fábrica de Python pode conectá-la automaticamente. | Ferramentas do Shell |
| Loop | Invocação limitada opcional controlada por avaliadores ou predicados. | Looping do agente |
A delegação de agente em segundo plano é separada das respostas em segundo plano gerenciadas pelo provedor. Os agentes em segundo plano executam agentes filho em tarefas delegadas; pesquisa de respostas em segundo plano ou retomar uma solicitação de provedor usando um token de continuação.
Criar um agente de arreio
O Microsoft.Agents.AI.Harness pacote é HarnessAgent exposto no Microsoft.Agents.AI namespace. Crie um de qualquer IChatClient um com AsHarnessAgentou construa HarnessAgent diretamente:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIAgent agent = chatClient.AsHarnessAgent();
AgentResponse response = await agent.RunAsync("Plan a weekend trip to Seattle.");
Console.WriteLine(response.Text);
Use HarnessAgentOptions para definir diretrizes operacionais no nível do harness, instruções específicas do agente e opções de recurso:
AIAgent agent = chatClient.AsHarnessAgent(new HarnessAgentOptions
{
Name = "research-agent",
HarnessInstructions = "Use tools deliberately and report verified results.",
ChatOptions = new ChatOptions
{
Instructions = "You are a research assistant focused on academic sources.",
},
MaxContextWindowTokens = 128_000,
MaxOutputTokens = 16_384,
});
HarnessAgent.DefaultInstructions fornece as diretrizes de arreio padrão.
HarnessInstructions aparece antes ChatOptions.Instructions.
Personalizar a composição
Os recursos padrão têm opções de destino, incluindo DisableTodoProvider, , DisableAgentModeProvider, DisableFileMemory, DisableAgentSkillsProvider, DisableWebSearch, , DisableToolAutoApproval, DisableOpenTelemetrye DisableCompaction.
Adicionar provedores de contexto personalizados com AIContextProviders. Opte pelo acesso ao arquivo com FileAccessStore, delegação em segundo plano com BackgroundAgentse loop com LoopEvaluators.
Criar um agente de arreio
A create_harness_agent fábrica retorna uma configuração Agentcompleta:
from agent_framework import create_harness_agent
from agent_framework.openai import OpenAIChatClient
agent = create_harness_agent(
client=OpenAIChatClient(model="gpt-4o"),
)
session = agent.create_session()
response = await agent.run("Plan a weekend trip to Seattle.", session=session)
print(response.text)
Defina instruções específicas do agente e do harness separadamente:
agent = create_harness_agent(
client=client,
name="research-agent",
harness_instructions="Use tools deliberately and report verified results.",
agent_instructions="You are a research assistant focused on academic sources.",
max_context_window_tokens=128_000,
max_output_tokens=16_384,
)
DEFAULT_HARNESS_INSTRUCTIONS fornece as diretrizes de arreio padrão.
harness_instructions aparece antes agent_instructions.
Personalizar a composição
Desabilitar padrões com opções como disable_todo, , disable_mode, disable_file_memory, disable_web_search, e disable_tool_auto_approvaldisable_compaction.
Substitua provedores internos por todo_provider ou mode_provider, e adicione provedores com context_providers. As habilidades são aceitas por meio skills_provider ou skills_paths; acesso a arquivos, agentes em segundo plano, ferramentas de shell e looping também são aceitas.
Note
create_harness_agent é liberado. Os agentes em segundo plano, o acesso a arquivos e o loop permanecem experimentais e as ferramentas de shell são provenientes do pacote de pré-lançamento agent-framework-tools .
Note
Um Go Harness empacotado não está disponível no momento. Redigir diretamente os pacotes de middleware, provedor de contexto, compactação e agente go correspondentes. Consulte o repositório Agent Framework Go para obter suporte atual.
UX de terminal de exemplo
O Harness não prescreve uma interface de aplicativo. O repositório inclui aplicativos de terminal de exemplo que transmitem saída, exibem todos e o modo atual, solicitações de aprovação de ferramentas de superfície e fornecem comandos como /todos, /modee /exit.
Importante
Esses projetos de console são exemplos, não componentes de estrutura fornecidos. Use-os como exemplos executáveis ou como ponto de partida para sua própria experiência de terminal.
O .NET ponto de entrada de exemplo éHarnessConsole.RunAgentAsync:
using Harness.Shared.Console;
await HarnessConsole.RunAgentAsync(
agent,
userPrompt: "Ask me anything to get started.");
Personalize o exemplo com observadores, formatadores de ferramentas, manipuladores de comando e HarnessConsoleOptions. Veja os exemplos do .NET Harness.
O exemplo de Python usa o pacote baseado em console Textual ao lado dos exemplos de Harness:
from console import run_agent_async
await run_agent_async(agent)
Personalize o exemplo com observadores, formatadores, comandos e componentes da interface do usuário. Veja os exemplos do Python Harness.
No momento, o repositório não inclui um exemplo de terminal do Go Harness empacotado.