Stap 6: Agent Harness

Een harness voorziet een chatclient van de ondersteunende structuur die een agent nodig heeft om lange taken met meerdere stappen af te handelen — plannings- en uitvoeringsmodi, een takenlijst als basis voor de planning, contextcompressie, bestandsopslag, bestandstoegang en goedkeuring voor hulpprogramma’s met een optie ‘niet opnieuw vragen’. In plaats van deze onderdelen zelf te assembleren, maakt u een harnasagent en haalt u ze uit de doos.

Maak een harness-agent uit een willekeurige IChatClient met behulp van de uitbreidingsmethode AsHarnessAgent. Omdat een framework taken interactief over veel stappen afhandelt, stuurt u dit doorgaans aan vanuit een gesprekslus: houd een AgentSession aan, zodat de status van het framework (plan, taken en geschiedenis) tussen beurten behouden blijft, lees de volgende instructie van de gebruiker en stream de uitvoer van de agent terwijl die wordt gegenereerd.

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

Het framework verzorgt de planning, het bijhouden van taken en het opslaan van de geschiedenis voor je gedurende het hele gesprek. Zie de voorbeeldterminal-UX voor een volledig functionele console, met goedkeuringsprompts voor hulpprogramma's, todo/mode rendering en slash-opdrachten.

Tip

Zie de .NET-harnessvoorbeelden voor volledige uitvoerbare toepassingen.

Het volledige voorbeeld maakt een Microsoft Foundry-chatclient, verpakt deze met create_harness_agenten gebruikt één sessie over twee beurten. Het framework voegt planning, to-do bijhouden en comprimeren toe, terwijl het voorbeeld bestandsgeheugen en webzoekopdrachten uitschakelt om gefocust te blijven.

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

De gedeelde sessie behoudt de status van de testharness voor beide aanroepen. Zie de voorbeeldterminal-UX voor een volledig uitgeruste console, met prompts voor goedkeuring van hulpprogramma's, to-do en modusweergave en slash-opdrachten.

Tip

Bekijk het volledige voorbeeld om aan de slag te gaan. Zie de Python-harnessvoorbeelden voor meer patronen.

Tip

De agent-framework-builder-python vaardigheid coding-agent kan de samenstelling van de harness en pakketkeuzes begeleiden. Het staat los van runtime Agent Skills, die een opt-in-mogelijkheid van de Python-harness blijven.

Prerequisites

  • Go 1.26 of hoger.
  • Een lokale checkout van de Agent Framework Go repository.
  • Een Foundry-projecteindpunt en -modeluitrol, geconfigureerd via FOUNDRY_PROJECT_ENDPOINT en FOUNDRY_MODEL.
  • Azure-aanmeldingsgegevens die worden ondersteund door DefaultAzureCredential, zoals een Azure CLI-aanmelding met az login.

De Go-harness configureren

Met het agent/harness pakket wordt een gewone agent met provider-ondersteuning geconfigureerd. Geef het resultaat van harness.AgentConfig door aan de providerconstructor:

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.",
        },
    )

De standaardwaarden zijn onder andere todoss, plan- en uitvoermodi, sessiegeïsoleerd bestandsgeheugen, vaardigheden, gehoste webzoekopdrachten, middleware voor hulpprogrammagoedkeuring en OpenTelemetry-instrumentatie. De helper maakt ook persistentie van geschiedenis per serviceaanroep en berichtinjectie mogelijk.

Dit Foundry-voorbeeld stelt DisableStoreOutput: true zo in dat de lokale geschiedenis eigenaar is van het gesprek. Stel harness.Config in DisableWebSearch in als uw geselecteerde provider of implementatie geen ondersteuning biedt voor gehoste zoekopdrachten op internet.

Voer het volledige voorbeeld uit vanuit de hoofdmap van de Go-opslagplaats:

go run .\examples\02-agents\harness\step04_composite_harness

Het voorbeeld hergebruikt een sessie over twee beurten, verwerkt aanvragen voor het goedkeuren van hulpprogramma's en opent een afzonderlijke sessie om geheugenisolatie te demonstreren. Het bestandsgeheugen blijft behouden onder agent-file-memory in de werkdirectory.

Compactie en lussen zijn opt-in in plaats van de standaardinstellingen van de Go-harness. Zie Agent Harness voor configuratie- en onderdeelgrenzen.

Volgende stappen 

Ga dieper in:

  • Agent Harnesses — compactie, lussen, shell en de voorbeeldgebruikerservaring van de terminal
  • Agentvaardigheden : geleidelijk vaardigheden laden vanuit het bestandssysteem