Agent Harness

Een agent-harnas is de runtime-scaffolding waarmee een taalmodel wordt omgezet in een agent die werk kan uitvoeren. Hiermee worden model- en hulpprogramma-aanroepen aangestuurd, de gespreksstatus en -context beheerd, wordt goedkeuringsbeleid toegepast en kan de agent doorgaan met een taak met meerdere stappen.

Agent Framework biedt een geïndeerd, accu-inbegrepen Harness voor onderzoek, codering, gegevensanalyse en ander langlopend werk. U biedt een chatclient en past alleen de mogelijkheden aan die uw toepassing nodig heeft.

Architecture

De Harness stelt bestaande bouwstenen van het Agent Framework samen in plaats van een afzonderlijke agentruntime te definiëren:

  1. Chatclient : verbindt de agent met een model.
  2. Chat-pijplijn — voegt functieaanroepen, berichtinjectie, geschiedenispersistentie per serviceaanroep en optionele compactie toe.
  3. Agent- en contextaanbieders — voeg sessiegebonden instructies, hulpmiddelen, geheugen, de to-dostatus, werkingsmodi en optionele functies toe.
  4. Middleware en decorators — voeg afhandeling van goedkeuringen, observeerbaarheid en optionele begrensde herhaling toe.
  5. Applicatie-UX — streamt reacties, geeft voortgang weer en verzamelt invoer zoals goedkeuringen voor hulpprogramma's.

Het resulterende object blijft een normale Agent Framework-agent: een HarnessAgent agent die is afgeleid van AIAgent in .NET of een Agent geretourneerd door create_harness_agent in Python. De sessies ervan gebruiken dezelfde abstracties voor sessie en contextprovider als andere agenten.

Mogelijkhedenmatrix benutten

Capability Gedrag van het harnas Canonieke richtlijnen
Functie aanroepen Ingeschakeld met een configureerbare iteratielimiet per aanvraag. Functiegereedschappen
Persistentie van oproepgeschiedenis per service Slaat de geschiedenis na elke modelaanroep op tijdens een uitvoering met hulpprogramma-aanroepen. Sessies
Verdichting Ingeschakeld wanneer tokenlimieten of een aangepaste strategie worden opgegeven. Compressie
To-do’s bijhouden Standaard ingeschakeld. Planning en todos
Modi voor agents Plan- en uitvoermodi zijn standaard ingeschakeld. Planning en todos
Bestandsopslag en bestandstoegang Geheugen van sessiebestand is standaard ingeschakeld; Gedeelde bestandstoegang is opt-in. Contextproviders
Goedkeuring van tools Permanente goedkeuringen en regels voor automatische goedkeuring zijn standaard ingeschakeld. Goedkeuring van hulpprogramma's
OpenTelemetry De waarneembaarheid van agents is standaard ingeschakeld. Observatievermogen
Zoeken op internet Standaard toegevoegd waar de geselecteerde chatclient deze ondersteunt. Zoeken op internet
Agentvaardigheden Standaard ingeschakeld in .NET; in Python actief in te schakelen via een provider of via paden. Agentvaardigheden
Achtergrondagenten Optionele parallelle delegering naar benoemde onderliggende agents. Achtergrondagenten
Shell-uitvoering Opgebouwd uit het shell-pakket; de Python-factory kan dit automatisch koppelen. Shell-hulpprogramma's
Looping Optioneel beperkt opnieuw aanroepen, gestuurd door evaluatoren of predicaten. Lusvorming van agenten

De achtergrondagentdelegatie staat los van door de provider beheerde achtergrondreacties. Achtergrondagenten voeren onderliggende agents uit voor gedelegeerde taken; achtergrondantwoorden peilen of één provideraanvraag hervatten met behulp van een vervolgtoken.

Een harness-agent maken

Het Microsoft.Agents.AI.Harness-pakket stelt HarnessAgent beschikbaar in de naamruimte Microsoft.Agents.AI. Maak er een van elke IChatClient met AsHarnessAgent, of construeer rechtstreeks een HarnessAgent:

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

Gebruik HarnessAgentOptions deze optie om bedieningsrichtlijnen op harnasniveau, agentspecifieke instructies en functieopties in te stellen:

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 levert de standaard harnasrichtlijnen. HarnessInstructions wordt weergegeven vóór ChatOptions.Instructions.

De samenstelling aanpassen

Standaardmogelijkheden bevatten gerichte opties, waaronder DisableTodoProvider, DisableAgentModeProvider, DisableFileMemory, DisableAgentSkillsProvider, DisableWebSearch, DisableToolAutoApproval, DisableOpenTelemetry en DisableCompaction.

Aangepaste contextproviders toevoegen met AIContextProviders. Meld u aan voor bestandstoegang met FileAccessStore, achtergronddelegering met BackgroundAgentsen lus met LoopEvaluators.

Een harness-agent maken

De create_harness_agent fabriek retourneert een volledig geconfigureerde Agent:

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)

Stel instructies op harness-niveau en agent-specifieke instructies afzonderlijk in:

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 levert de standaard harnasrichtlijnen. harness_instructions wordt weergegeven vóór agent_instructions.

De samenstelling aanpassen

Schakel standaardwaarden uit met opties zoals disable_todo, disable_mode, disable_file_memory, disable_web_search, disable_tool_auto_approval en disable_compaction.

Vervang ingebouwde providers door todo_provider of mode_provider, en voeg providers toe door context_providers. Vaardigheden zijn opt-in via skills_provider of skills_paths; bestandstoegang, achtergrondagenten, shelltools en herhaalde uitvoering zijn ook opt-in.

Bestandstoegang gebruikt standaard de opgegeven opslag als één gedeelde werkruimte. Als u bestanden wilt isoleren op basis van de actieve sessie-id, schakelt u toegang tot het sessiebereik in:

from agent_framework import FileSystemAgentFileStore, create_harness_agent

file_store = FileSystemAgentFileStore("agent-files")
agent = create_harness_agent(
    client=client,
    file_access_store=file_store,
    file_access_session_scoped=True,
)

Voor bewust delen tussen geselecteerde sessies maakt u FileAccessProvider(store=file_store, scope="tenant-1") rechtstreeks en voegt u deze toe via context_providers. De scope is een ondoorzichtige sleutel die verwijst naar een door de provider beheerde map, geen pad. Toegang binnen een bereik wordt standaard geweigerd in plaats van de hoofdmap van de gedeelde opslag te gebruiken wanneer er noch een actieve sessie-id noch een expliciet bereik beschikbaar is.

Wanneer bestandstoegang is ingeschakeld, gebruikt u file_access_grep om regelnummers vanaf 1 te zoeken, file_access_read_lines om een inclusief interval te inspecteren en file_access_replace_lines om hele regels te bewerken. file_access_read_lines plaatst voor elke regel het regelnummer en een tab; laat dat voorvoegsel weg wanneer je de regeltekst doorgeeft als expected_line. De verwachte tekst voorkomt dat een verouderd of niet-overeenkomend regelnummer de verkeerde regel bewerkt.

file_access_grep maakt gebruik van hoofdlettergevoelige reguliere expressies, accepteert patronen van maximaal 256 tekens en past een budget van 10 seconden toe op de hele zoekopdracht. Ongeldige of te lange patronen en zoekopdrachten die het budget overschrijden, geven een foutmelding. Beperk de map of het patroon voordat u het opnieuw probeert.

Belangrijk

file_access_grep retourneert overeenkomende regeltekst met de bijbehorende regeleindteken. Een aangepaste AgentFileStore.search() implementatie moet regelnummers op basis van 1 retourneren die dezelfde regels aanpakken als AgentFileStore.split_lines() voor de tekst die wordt geretourneerd door read().

Opmerking

create_harness_agent wordt vrijgegeven. Achtergrondagenten, bestandstoegang en lusfunctionaliteit blijven experimenteel, en shell-hulpmiddelen komen uit het pre-releasepakket agent-framework-tools.

Opmerking

Een verpakte Go Harness is momenteel niet beschikbaar. Stel de bijbehorende Go-agent, contextprovider, compressie en middleware-pakketten rechtstreeks samen. Zie de opslagplaats Agent Framework Go voor de huidige ondersteuning.

Voorbeeld van terminal-UX

De Harness schrijft geen toepassingsinterface voor. De repository bevat voorbeeldterminaltoepassingen die uitvoer streamen, taken en de huidige modus weergeven, goedkeuringsverzoeken voor tools tonen en opdrachten bieden zoals /todos, /mode en /exit.

Belangrijk

Deze consoleprojecten zijn voorbeelden, geen frameworkonderdelen die worden verzonden. Gebruik ze als uitvoerbare voorbeelden of als uitgangspunt voor uw eigen terminalervaring.

Het .NET voorbeeldinvoerpunt isHarnessConsole.RunAgentAsync:

using Harness.Shared.Console;

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

Pas het voorbeeld aan met observers, toolformatters, opdrachtverwerkers en HarnessConsoleOptions. Bekijk de .NET Harness-voorbeelden.

Het Python voorbeeld maakt gebruik van het op Tekst gebaseerde console pakket naast de Harness-voorbeelden:

from console import run_agent_async

await run_agent_async(agent)

Pas het voorbeeld aan met waarnemers, formatters, opdrachten en UI-onderdelen. Bekijk de Python Harness-voorbeelden.

De opslagplaats bevat momenteel geen verpakt Go Harness-terminalvoorbeeld.

Volgende stappen 

Dieper ingaan