Krok 6: Agent Harness

Rámec doplňuje chatovacího klienta o podpůrnou infrastrukturu, kterou agent potřebuje ke zvládání dlouhých, vícekrokových úloh — režimy plánování a provádění, seznam úkolů, podle kterého lze plánovat, zhušťování kontextu, souborovou paměť, přístup k souborům a schvalování nástrojů s volbou „už se znovu neptat“. Místo toho, abyste tyto části sestavovali sami, vytvoříte agenta Harness a získáte je hotové.

Vytvořte harness agenta z libovolného IChatClient pomocí rozšiřující metody AsHarnessAgent. Protože harness interaktivně zpracovává úlohy v mnoha krocích, obvykle jej řídíte z konverzační smyčky: udržujte AgentSession, aby se stav harnessu (plán, seznam úkolů a historie) zachoval mezi jednotlivými koly, čtěte další pokyn uživatele a průběžně streamujte výstup agenta tak, jak je generován.

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

Nástroj za vás zajišťuje plánování, sledování úkolů a uchovávání historie v průběhu celé konverzace. Plnohodnotnou konzoli – s výzvami ke schválení nástrojů, vykreslováním seznamu úkolů a režimů a příkazy se lomítkem – najdete v ukázce terminálového rozhraní.

Tip

Úplné spustitelné aplikace najdete v ukázkách testovacího rozhraní .NET.

Kompletní ukázka vytvoří klienta chatu Microsoft Foundry, zabalí ho pomocí create_harness_agent a znovu použije jednu relaci ve dvou krocích. Tento rámec přidává plánování, sledování úkolů a kompaktaci, zatímco ukázka vypne paměť souborů a vyhledávání na webu, aby zůstala zaměřená.

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

Sdílená relace zachovává stav harnessu napříč oběma voláními. Plnohodnotná konzola – s výzvami ke schválení nástrojů, to-do a vykreslováním režimu a příkazy lomítka – najdete v ukázkovém uživatelském prostředí terminálu.

Tip

Podívejte se na úplnou ukázku pro začátek. Další ukázky najdete v ukázkách rozhraní Python.

Tip

Dovednost agenta pro kódování agent-framework-builder-python může pomoci s konfigurací harnessu a volbou balíčků. Je oddělena od runtime Agent Skills, které zůstávají volitelnou možností rozhraní Python harness.

Prerequisites

  • Go 1.26 nebo novější.
  • Místní kopie úložiště Agent Framework Go.
  • Koncový bod projektu Foundry a nasazení modelu nakonfigurované prostřednictvím FOUNDRY_PROJECT_ENDPOINT a FOUNDRY_MODEL.
  • Přihlašovací údaje Azure podporované DefaultAzureCredential, jako je například přihlášení Azure CLI pomocí az login.

Konfigurace harnessu Go

Balíček agent/harness konfiguruje obyčejného agenta využívajícího poskytovatele. Předejte výsledek harness.AgentConfig konstruktoru poskytovatele:

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

Mezi výchozí hodnoty patří režimy todos, plan a execute, paměť souborů izolovaná podle relace, dovednosti, hostované webové vyhledávání, middleware schvalování nástrojů a instrumentace OpenTelemetry. Pomocník také umožňuje uchovávání historie pro jednotlivá volání služby a injektáž zpráv.

Tato ukázková sada Foundry nastaví DisableStoreOutput: true tak, aby konverzaci řídila místní historie. Nastavte DisableWebSearch v harness.Config, pokud vybraný poskytovatel nebo nasazení nepodporuje hostované webové vyhledávání.

Spusťte celou ukázku z kořenového adresáře úložiště Go:

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

Ukázka znovu použije relaci ve dvou krocích, zpracuje žádosti o schválení nástrojů a otevře samostatnou relaci, která demonstruje izolaci paměti. Stav souboru je uložen pod agent-file-memory v pracovním adresáři.

Komprimace a smyčky jsou spíše volitelné než výchozí nastavení harnessu Go. Informace o konfiguraci a hranicích komponent naleznete v části Agent Harness.

Další kroky

Jděte hlouběji:

  • Svazky agentů – komprimace, smyčky, prostředí a uživatelské prostředí ukázkového terminálu
  • Dovednosti agenta – postupně načítá dovednosti ze systému souborů