Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Harness erweitert einen Chat-Client um die Infrastruktur, die ein Agent benötigt, um lange, mehrstufige Aufgaben zu bearbeiten — Planungs-/Ausführungsmodi, eine To-do-Liste für die Planung, Kontextkomprimierung, Dateispeicherfunktion, Dateizugriff und Tool-Genehmigung mit „Nicht erneut fragen“. Anstatt diese Komponenten selbst zusammenzustellen, erstellen Sie einen Harness-Agent und erhalten sie direkt einsatzbereit mitgeliefert.
Erstellen Sie mit der IChatClient-Erweiterungsmethode einen Harness-Agent aus einem beliebigen AsHarnessAgent. Da ein Harness-Agent Aufgaben über viele Schritte hinweg interaktiv abarbeitet, steuern Sie ihn in der Regel über eine Unterhaltungsschleife: Behalten Sie eine AgentSession bei, damit der Harness-Zustand (Planung, Aufgaben und Verlauf) über die Unterhaltungsrunden hinweg erhalten bleibt, lesen Sie die nächste Anweisung des Benutzers, und streamen Sie die Ausgabe des Agents, während sie erzeugt wird.
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();
}
Der Harness-Agent übernimmt für Sie die Planung, die Nachverfolgung von Aufgaben und die persistente Speicherung des Verlaufs über die gesamte Unterhaltung hinweg. Eine voll ausgestattete Konsole – mit Prompts zur Toolgenehmigung, Aufgaben-/Modus-Rendering und Schrägstrichbefehlen – finden Sie in der UX des Beispielterminals.
Tip
Sehen Sie sich die .NET-Harness-Beispiele für vollständig ausführbare Anwendungen an.
Das vollständige Beispiel erstellt einen Microsoft Foundry-Chatclient, umschließt ihn mit create_harness_agentund verwendet eine Sitzung über zwei Runden hinweg. Das Harness fügt Planung, To-do-Nachverfolgung und Komprimierung hinzu, während das Beispiel die Dateispeicherfunktion und die Websuche deaktiviert, um den Fokus zu behalten.
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())
Die freigegebene Session behält den Harness-Status für beide Aufrufe bei. Eine konsole mit vollem Funktionsumfang – mit Eingabeaufforderungen zur Toolgenehmigung, to-do und Modusrendering und Schrägstrichbefehlen – finden Sie in der Beispiel-Terminal-UX.
Tip
Sehen Sie sich das vollständige Beispiel für die ersten Schritte an. Weitere Muster finden Sie in den Python-Harness-Beispielen.
Tip
Der agent-framework-builder-python Coding-Agent-Skill kann die Harness-Zusammenstellung und Paketauswahl anleiten. Es ist getrennt von den Agent Skills zur Laufzeit, die eine Opt-in-Python-Harness-Fähigkeit bleiben.
Prerequisites
- Go 1.26 oder höher.
- Ein lokales Auschecken des Agent Framework Go-Repositorys.
- Ein Foundry-Projektendpunkt und eine Modellbereitstellung, konfiguriert über
FOUNDRY_PROJECT_ENDPOINTundFOUNDRY_MODEL. - Eine Azure-Anmeldeinformation, die von
DefaultAzureCredentialunterstützt wird, z. B. eine Azure CLI-Anmeldung mitaz login.
Go-Harness konfigurieren
Das agent/harness Paket konfiguriert einen normalen anbietergestützten Agenten. Übergeben Sie das Ergebnis von harness.AgentConfig an den Konstruktor des Anbieters:
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.",
},
)
Die Standardwerte umfassen Todos, Plan- und Ausführungsmodi, sitzungsisolierten Dateispeicher, Fähigkeiten, gehostete Websuche, Toolgenehmigungs-Middleware und OpenTelemetry-Instrumentierung. Die Hilfskomponente ermöglicht außerdem die Persistenz des Verlaufs pro Dienstaufruf und das Einfügen von Nachrichten.
Dieses Foundry-Beispiel legt fest, dass DisableStoreOutput: true der lokale Verlauf die Konversation übernimmt. Legen Sie DisableWebSearch in harness.Config fest, wenn Ihr ausgewählter Anbieter oder Ihre Bereitstellung die gehostete Websuche nicht unterstützt.
Führen Sie das vollständige Beispiel aus dem Stamm des Go-Repositorys aus:
go run .\examples\02-agents\harness\step04_composite_harness
Im Beispiel wird eine Sitzung über zwei Runden hinweg wiederverwendet, Toolgenehmigungsanforderungen verarbeitet und eine separate Sitzung geöffnet, um die Speicherisolation zu veranschaulichen. Der Dateispeicher bleibt unter agent-file-memory im Arbeitsverzeichnis bestehen.
Kompaktierung und Schleifen müssen ausdrücklich aktiviert werden, statt zu den Standardvorgaben des Go-Harness zu gehören. Informationen zu Konfigurations- und Komponentengrenzen finden Sie unter Agent Harness.
Tip
Sehen Sie sich das vollständige Composite-Harness-Beispiel und das Konfigurationshandbuch zur Go-Nutzung an.
Nächste Schritte
Gehen Sie tiefer:
- Agent-Harnesses – Komprimierung, Schleifen, Shell und die UX des Beispielterminals
- Agent-Fähigkeiten - progressives Laden von Fähigkeiten aus dem Dateisystem