Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обвязка оборачивает чат-клиент, добавляя инфраструктуру, необходимую агенту для работы с длительными многошаговыми задачами — режимы планирования и выполнения, список задач для планирования, сжатие контекста, память о файлах, доступ к файлам и подтверждение использования инструментов с опцией «больше не спрашивать». Вместо того чтобы собирать эти компоненты самостоятельно, вы создаёте агент Harness и получаете всё готовым к использованию.
Создайте агент harness из любого IChatClient с помощью метода расширения AsHarnessAgent. Поскольку harness интерактивно выполняет задачи за много шагов, обычно им управляют через цикл диалога: поддерживайте AgentSession, чтобы состояние harness (план, список дел и история) сохранялось между репликами, считывайте следующую инструкцию пользователя и передавайте вывод агента потоком по мере его формирования.
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();
}
Система берёт на себя планирование, ведение списка задач и сохранение истории на протяжении всего разговора. Полнофункциональный интерфейс консоли — с запросами на подтверждение использования инструментов, отображением todo/mode и слеш-командами — см. в примере интерфейса терминала.
Tip
Ознакомьтесь с примерами использования .NET для полнофункционируемых приложений.
Полный пример создает клиент чата Microsoft Foundry, оборачивает его с помощью create_harness_agent и повторно использует один сеанс в течение двух ходов. Обвязка добавляет планирование, отслеживание задач и сжатие, а пример отключает файловую память и поиск в Интернете, чтобы оставаться в фокусе.
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())
Общий сеанс сохраняет состояние тестовой обвязки для обоих вызовов. Для полнофункциональной консоли — с запросами на утверждение инструментов, to-do, отображением режимов и слеш-командами — см. пример пользовательского интерфейса терминала.
Tip
См. полный пример начала работы. Дополнительные шаблоны см. в образцах harness для Python.
Tip
Навык agent-framework-builder-python агента кодирования может направлять составление harness и выбор пакетов. Это отдельно от Agent Skills во время выполнения, которые остаются дополнительной возможностью Python harness.
Prerequisites
- Go 1.26 или более поздняя версия.
- Локальная копия репозитория Agent Framework Go.
- Конечная точка проекта Foundry и развертывание модели, настроенные с помощью
FOUNDRY_PROJECT_ENDPOINTиFOUNDRY_MODEL. - Учетные данные Azure, поддерживаемые
DefaultAzureCredential, например, вход в Azure CLI с помощьюaz login.
Настройка harness для Go
Пакет agent/harness настраивает обычный агент с провайдером. Передайте результат в конструктор поставщика:
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.",
},
)
По умолчанию доступны todo, режимы планирования и выполнения, изолированная на уровне сеанса файловая память, навыки, размещенный веб-поиск, промежуточный слой для подтверждения инструментов и инструментарий OpenTelemetry. Вспомогательный элемент также обеспечивает сохранение истории и внедрение сообщений для каждого вызова службы.
Этот пример Foundry задает значение DisableStoreOutput: true, чтобы локальная история управляла диалогом. Установите значение DisableWebSearch в harness.Config, если выбранный поставщик или развертывание не поддерживает размещенный веб-поиск.
Запустите полный пример из корневого каталога репозитория Go:
go run .\examples\02-agents\harness\step04_composite_harness
Пример повторно использует сеанс в течение двух обменов, обрабатывает запросы на утверждение инструментов и открывает отдельный сеанс для демонстрации изоляции памяти. Содержимое файла сохраняется в agent-file-memory в рабочем каталоге.
Сжатие и циклирование являются необязательными, а не значениями по умолчанию в Go harness. Сведения о границах конфигурации и компонентов см. в разделе Agent Harness.
Tip
Ознакомьтесь с полным примером составного harness и руководством по настройке harness Go.
Дальнейшие действия
Вернитесь глубже:
- Средства агента — сжатие, циклирование, оболочка и пример пользовательского интерфейса терминала
- Навыки агента — постепенно загружают навыки из файловой системы