Langkah 6: Agent Harness

Sebuah pembungkus membekali klien chat dengan kerangka pendukung yang dibutuhkan agen untuk menangani tugas panjang yang terdiri dari banyak langkah — mode perencanaan/eksekusi, daftar tugas sebagai acuan perencanaan, pemadatan konteks, memori berkas, akses berkas, dan persetujuan penggunaan alat "jangan tanya lagi". Alih-alih merakit potongan-potongan itu sendiri, Anda membuat agen harness dan mengeluarkannya dari kotak.

Buat agen harness dari IChatClient apa pun menggunakan metode ekstensi AsHarnessAgent. Karena harness bekerja menangani tugas secara interaktif melalui banyak langkah, Anda biasanya menjalankannya dalam loop percakapan: pertahankan AgentSession agar status harness (rencana, daftar tugas, dan riwayat) tetap tersimpan dari satu giliran percakapan ke giliran berikutnya, baca instruksi pengguna selanjutnya, dan stream output agen saat dihasilkan.

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

Sistem ini menangani perencanaan, pelacakan tugas, dan penyimpanan riwayat untuk Anda sepanjang percakapan. Untuk konsol dengan fitur lengkap — dengan prompt persetujuan alat, tampilan todo/mode, dan perintah garis miring — lihat contoh UX terminal.

Tip

Lihat sampel .NET harness untuk aplikasi yang dapat dijalankan penuh.

Sampel lengkap membuat klien obrolan Microsoft Foundry, membungkusnya dengan create_harness_agent, dan menggunakan kembali satu sesi di dua giliran. Harness menambahkan perencanaan, pelacakan to-do, dan pemadatan, sementara sampel menonaktifkan memori file dan pencarian web agar tetap fokus.

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

Sesi yang dibagikan mempertahankan state harness di antara kedua pemanggilan. Untuk konsol berfitur lengkap - dengan prompt persetujuan alat, to-do dan penyajian mode, dan perintah garis miring - lihat UX terminal sampel.

Tip

Lihat contoh lengkap untuk memulai. Untuk pola lainnya, lihat sampel harness Python.

Tip

Keterampilan agent-framework-builder-python coding-agent dapat memandu komposisi harness dan pilihan paket. Ini terpisah dari Keterampilan Agen runtime, yang tetap merupakan kemampuan Python harness yang bersifat opsional.

Prerequisites

  • Go 1.26 atau yang lebih baru.
  • Salinan lokal dari repositori Agent Framework Go.
  • Titik akhir proyek Foundry dan penyebaran model, dikonfigurasi melalui FOUNDRY_PROJECT_ENDPOINT dan FOUNDRY_MODEL.
  • Kredensial Azure yang didukung oleh DefaultAzureCredential, seperti masuk ke Azure CLI dengan az login.

Mengonfigurasi harness Go

Paket agent/harness mengonfigurasi agen biasa yang didukung penyedia. Operkan hasil dari harness.AgentConfig ke konstruktor penyedia:

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

Defaultnya termasuk todos, mode rencana dan eksekusi, memori file yang terisolasi sesi, keterampilan, pencarian web yang dihosting, middleware persetujuan alat, dan instrumentasi OpenTelemetry. Helper juga memungkinkan persistensi riwayat per panggilan layanan dan injeksi pesan.

Sampel Foundry ini diatur DisableStoreOutput: true sehingga riwayat lokal mengendalikan percakapan. Atur DisableWebSearch di harness.Config jika penyedia atau penyebaran yang Anda pilih tidak mendukung pencarian web yang dihosting.

Jalankan sampel lengkap dari akar repositori Go:

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

Sampel menggunakan kembali sesi di dua giliran, menangani permintaan persetujuan alat, dan membuka sesi terpisah untuk menunjukkan isolasi memori. Memori file tetap tersimpan di agent-file-memory di direktori kerja.

Pemadatan dan perulangan bersifat opsional, bukan setelan bawaan Go harness. Untuk batas konfigurasi dan komponen, lihat Agent Harness.

Langkah berikutnya

Masuk lebih dalam:

  • Agent Harnesses — pemadatan, perulangan, shell, dan UX terminal sampel
  • Keahlian Agen — memuat keahlian secara bertahap dari sistem berkas