Arnês de Agente

Um harness de agentes é o andaime em tempo de execução que transforma um modelo de linguagem num agente capaz de realizar trabalho. Gere chamadas de modelos e ferramentas, gere o estado e o contexto da conversa, aplica políticas de aprovação e pode manter o agente a progredir numa tarefa em várias etapas.

O Agent Framework fornece um Harness opinativo, com baterias, para investigação, programação, análise de dados e outros trabalhos de longa duração. Fornece um cliente de chat e personaliza apenas as capacidades que a sua aplicação precisa.

Architecture

O Harness compõe blocos de construção existentes do Agent Framework em vez de definir um tempo de execução de agente separado:

  1. Cliente de chat — liga o agente a um modelo.
  2. Pipeline de chat — adiciona invocação de funções, injeção de mensagens, persistência do histórico de chamadas por serviço e compactação opcional.
  3. Fornecedores de agentes e contexto — adicionam instruções com âmbito de sessão, ferramentas, memória, estado de trabalho, modos de operação e capacidades opcionais.
  4. Middleware e decoradores — adicionam o tratamento de aprovação, observabilidade e looping limitado opcional.
  5. Application UX — transmite respostas, apresenta progresso e recolhe inputs como aprovações de ferramentas.

O objeto resultante mantém-se um agente normal do Agent Framework: a HarnessAgent que deriva de AIAgent em .NET, ou um Agent retornado por create_harness_agent em Python. As suas sessões utilizam as mesmas abstrações de sessões e de fornecedores de contexto que outros agentes.

Matriz de capacidade de arnês

Capability Comportamento do arnês Orientação canónica
Invocação de função Ativado com um limite configurável de iteração por pedido. Ferramentas de funções
Persistência do histórico de chamadas por serviço Persiste o histórico após cada chamada de modelo numa execução de chamada de ferramenta. Sessões
Compactação Ativado quando são fornecidos limites de tokens ou uma estratégia personalizada. Compactação
Rastreamento de tarefas Ativado por padrão. Planeamento e tarefas
Modos agente Os modos de planeamento e execução estão ativados por defeito. Planeamento e tarefas
Memória de ficheiros e acesso a ficheiros A memória dos ficheiros de sessão está ativada por defeito; O acesso a ficheiros partilhados é opt-in. Fornecedores de contexto
Aprovação de ferramentas As aprovações permanentes e as regras de auto-aprovação estão ativadas por defeito. Aprovação de ferramentas
OpenTelemetry A observabilidade do agente está ativada por defeito. Observabilidade
Pesquisa na Web Adicionado por defeito onde o cliente de chat selecionado o suporta. Pesquisa na Web
Competências do Agente Ativado por defeito em .NET; opt-in através de um fornecedor ou caminhos em Python. Competências de Agente
Agentes de fundo Delegação paralela opcional para agentes filhos nomeados. Agentes de fundo
Execução do shell Composto pelo pacote shell; a fábrica Python pode ligá-lo automaticamente. Ferramentas de concha
Looping Reinvocação limitada opcional conduzida por avaliadores ou predicados. Looping do agente

A delegação de agentes de fundo é separada das respostas em segundo plano geridas pelo fornecedor. Os agentes de segundo plano executam agentes filhos em tarefas delegadas; As respostas de fundo sondam ou retomam um pedido de fornecedor usando um token de continuação.

Crie um agente de arnês

O Microsoft.Agents.AI.Harness pacote é HarnessAgent exposto no Microsoft.Agents.AI namespace. Crie um a partir de qualquer IChatClient com AsHarnessAgent, ou constrói 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 orientações operacionais ao nível do chicote, instruções específicas do agente e opções de funcionalidades:

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 a orientação padrão do arnês. HarnessInstructions aparece antes ChatOptions.Instructionsde .

Personalize a composição

As capacidades padrão têm opções direcionadas, incluindo DisableTodoProvider, DisableAgentModeProvider, DisableFileMemoryDisableAgentSkillsProvider, DisableWebSearch, DisableToolAutoApproval, , DisableOpenTelemetry, , e DisableCompaction.

Adicionar fornecedores de contexto personalizados com AIContextProviders. Optar por aceder a ficheiros com FileAccessStore, delegação em segundo plano com BackgroundAgents, e looping com LoopEvaluators.

Crie um agente de arnês

A create_harness_agent fábrica devolve uma configuração totalmente Agentconfigurada:

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 ao nível do harness e instruções específicas do agente 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 a orientação padrão do arnês. harness_instructions aparece antes agent_instructionsde .

Personalize a composição

Desative os valores definidos com opções como disable_todo, disable_mode, disable_file_memory, disable_web_search, disable_tool_auto_approval, e disable_compaction.

Substitua os fornecedores incorporados por todo_provider ou mode_provider, e adicione os fornecedores por context_providers. As competências são opt-in através skills_provider de ou skills_paths; acesso a ficheiros, agentes em segundo plano, ferramentas shell e looping também são opt-in.

Observação

create_harness_agent é libertado. Agentes de fundo, acesso a ficheiros e looping continuam experimentais, e as ferramentas shell provêm do pacote pré-lançamento agent-framework-tools .

Observação

Um Go Harness embalado não está atualmente disponível. Compor diretamente os pacotes correspondentes de agente, fornecedor de contexto, compactação e middleware. Consulte o repositório Agent Framework Go para suporte atual.

Exemplo de UX do terminal

O Harness não prescreve uma interface de aplicação. O repositório inclui aplicações terminais de exemplo que transmitem a saída, mostram todos e o modo atual, apresentam prompts de aprovação de ferramentas e fornecem comandos como /todos, /mode, e /exit.

Importante

Estes projetos de consola são exemplos, não componentes de framework enviados. Usa-os como exemplos executáveis ou como ponto de partida para a tua própria experiência terminal.

O ponto de entrada do exemplo .NET éHarnessConsole.RunAgentAsync:

using Harness.Shared.Console;

await HarnessConsole.RunAgentAsync(
    agent,
    userPrompt: "Ask me anything to get started.");

Personalize a amostra com observadores, formatadores de ferramentas, manipuladores de comandos e HarnessConsoleOptions. Veja os exemplos do .NET Harness.

A amostra de Python utiliza o pacote baseado console em texto ao lado das amostras Harness:

from console import run_agent_async

await run_agent_async(agent)

Personalize o exemplo com observadores, formatadores, comandos e componentes de interface. Veja os exemplos do Python Harness.

O repositório não inclui atualmente uma amostra de terminal Go Harness embalada.

Passos seguintes

Aprofunde-se