Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ремня агента, иногда называемая ремнями ИИ, — это шаблон среды выполнения, который превращает языковую модель в агент, который может выполнять работу. Он управляет вызовами к модели и инструментам, отслеживает состояние и контекст беседы, применяет политики одобрения и может обеспечивать продвижение агента при выполнении многоэтапной задачи.
Agent Framework предоставляет готовую, продуманную платформу со всем необходимым для исследований, написания кода, анализа данных и других длительных задач. Вы предоставляете клиент чата и настраиваете только необходимые возможности приложения.
Architecture
Harness компонует существующие базовые компоненты Agent Framework, а не определяет отдельную среду выполнения для агентов:
- Клиент чата — подключает агент к модели.
- Конвейер обработки чата — добавляет вызов функций, добавление сообщений, сохранение истории для каждого вызова службы и необязательную компактизацию.
- Поставщики агентов и контекста — добавление инструкций в рамках сеанса, инструментов, памяти, состояния списка задач, режимов работы и необязательных возможностей.
- Промежуточный слой и декораторы — добавьте обработку согласований, наблюдаемость и необязательные циклы с ограничением числа итераций.
- UX приложения — передаёт ответы в потоковом режиме, отображает ход выполнения и собирает вводимые данные, такие как подтверждения на использование инструментов.
Полученный объект остается обычным агентом Agent Framework: HarnessAgent, который наследуется от AIAgent в .NET, или Agent, возвращаемым create_harness_agent в Python. Его сеансы используют те же абстракции session и context provider, что и другие агенты.
Матрица возможностей Harness
| Capability | Управление поведением | Каноническое руководство |
|---|---|---|
| Вызов функции | Включен с настраиваемым ограничением итерации для каждого запроса. | Функциональные инструменты |
| Сохранение истории для каждого сервисного вызова | Сохраняет историю после каждого вызова модели в ходе выполнения с вызовами инструментов. | Сеансы |
| Сжатие | Включается, если заданы ограничения на количество токенов или пользовательская стратегия. | Уплотнения |
| Отслеживание todo | Включено по умолчанию. | Планирование и задачи |
| Режимы агента | Режимы планирования и выполнения включены по умолчанию. | Планирование и задачи |
| Доступ к памяти и файлам | Память файла сеанса включена по умолчанию; Общий доступ к файлам включен. | Поставщики контекстов |
| Утверждение инструмента | По умолчанию включены постоянно действующие утверждения и правила автоматического утверждения. | Утверждение инструмента |
| OpenTelemetry | По умолчанию включена наблюдаемость агента. | Наблюдаемость |
| Поиск в Интернете | Добавлено по умолчанию, где выбранный клиент чата поддерживает его. | Поиск в Интернете |
| Навыки агента | Включен по умолчанию в .NET; согласие через поставщика или пути в Python. | Навыки агента |
| Фоновые агенты | Необязательное параллельное делегирование именованным дочерним агентам. | Фоновые агенты |
| Выполнение команд в оболочке | Собирается из пакета оболочки; Python-фабрика может автоматически подключить его. | Средства оболочки |
| Циклическое повторение | Необязательный повторный вызов с ограничением числа попыток, управляемый оценщиками или предикатами. | Циклы агента |
Делегирование фонового агента осуществляется отдельно от фоновых ответов, управляемых поставщиком. Фоновые агенты запускают дочерние агенты для выполнения делегированных задач; фоновые ответы опрашивают или возобновляют один запрос к поставщику с помощью токена продолжения.
Создайте агент Harness
Пакет Microsoft.Agents.AI.Harness предоставляет HarnessAgent в пространстве имен Microsoft.Agents.AI. Создайте один из любых IChatClient с помощью AsHarnessAgent или создайте HarnessAgent напрямую:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIAgent agent = chatClient.AsHarnessAgent();
AgentResponse response = await agent.RunAsync("Plan a weekend trip to Seattle.");
Console.WriteLine(response.Text);
Используйте HarnessAgentOptions, чтобы задать инструкции по эксплуатации на уровне среды выполнения, инструкции для конкретного агента и параметры функций:
AIAgent agent = chatClient.AsHarnessAgent(new HarnessAgentOptions
{
Name = "research-agent",
HarnessInstructions = "Use tools deliberately and report verified results.",
ChatOptions = new ChatOptions
{
Instructions = "You are a research assistant focused on academic sources.",
},
MaxContextWindowTokens = 128_000,
MaxOutputTokens = 16_384,
});
HarnessAgent.DefaultInstructions содержит указания по жгуту по умолчанию.
HarnessInstructions отображается до ChatOptions.Instructions.
Настройка композиции
Возможности по умолчанию включают целевые параметры, включая DisableTodoProvider, DisableAgentModeProvider, DisableFileMemory, DisableAgentSkillsProvider, DisableWebSearch, DisableToolAutoApproval, DisableOpenTelemetry и DisableCompaction.
Добавьте пользовательские поставщики контекста с помощью AIContextProviders. Разрешите доступ к файлам с помощью FileAccessStore, фоновое делегирование с помощью BackgroundAgents и зацикливание с помощью LoopEvaluators.
Создайте агент Harness
Фабрика create_harness_agent возвращает полностью настроенный Agent:
from agent_framework import create_harness_agent
from agent_framework.openai import OpenAIChatClient
agent = create_harness_agent(
client=OpenAIChatClient(model="gpt-4o"),
)
session = agent.create_session()
response = await agent.run("Plan a weekend trip to Seattle.", session=session)
print(response.text)
Задайте отдельно инструкции на уровне harness и для конкретного агента:
agent = create_harness_agent(
client=client,
name="research-agent",
harness_instructions="Use tools deliberately and report verified results.",
agent_instructions="You are a research assistant focused on academic sources.",
max_context_window_tokens=128_000,
max_output_tokens=16_384,
)
DEFAULT_HARNESS_INSTRUCTIONS содержит указания по жгуту по умолчанию.
harness_instructions отображается до agent_instructions.
Настройка композиции
Отключите параметры по умолчанию с помощью таких параметров, как disable_todo, disable_mode, disable_file_memory, disable_web_search, disable_tool_auto_approval и disable_compaction.
Замените встроенных поставщиков с помощью todo_provider или mode_provider, а поставщиков добавьте с помощью context_providers. Навыки подключаются только через skills_provider или skills_paths; доступ к файлам, фоновые агенты, инструменты оболочки и циклы также требуют явного включения.
Доступ к файлам использует предоставленное хранилище в качестве одной общей рабочей области по умолчанию. Чтобы изолировать файлы по идентификатору активного сеанса, включите доступ к файлам с областью действия сеанса:
from agent_framework import FileSystemAgentFileStore, create_harness_agent
file_store = FileSystemAgentFileStore("agent-files")
agent = create_harness_agent(
client=client,
file_access_store=file_store,
file_access_session_scoped=True,
)
Для намеренного предоставления общего доступа в выбранных сеансах создайте FileAccessProvider(store=file_store, scope="tenant-1") напрямую и добавьте его через context_providers. Область действия — это непрозрачный ключ, который соответствует папке, управляемой поставщиком, а не пути. Ограниченный доступ переходит в закрытый режим вместо того, чтобы использовать корневой каталог общего хранилища, если нет ни активного идентификатора сеанса, ни явно заданной области.
Если доступ к файлам включён, используйте file_access_grep для поиска номеров строк, начиная с 1, file_access_read_lines для просмотра диапазона, включающего обе границы, и file_access_replace_lines для редактирования целых строк.
file_access_read_lines добавляет в начало каждой строки её номер и символ табуляции; опускайте этот префикс при передаче текста строки в качестве expected_line. Ожидаемый текст предотвращает редактирование неправильной строки из-за устаревшего или несоответствующего номера строки.
file_access_grep использует регулярные выражения без учёта регистра, принимает шаблоны длиной до 256 символов и устанавливает ограничение в 10 секунд на весь поиск. Недопустимые или слишком длинные шаблоны, а также поисковые запросы, превышающие допустимый лимит, возвращают ошибку. Уточните каталог или шаблон перед повторной попыткой.
Это важно
file_access_grep возвращает текст совпавшей строки вместе с символом окончания строки. Пользовательская реализация AgentFileStore.search() должна возвращать номера строк, начинающиеся с 1, которые соответствуют тем же строкам, что и AgentFileStore.split_lines(), в тексте, возвращаемом read().
Замечание
create_harness_agent выпущен. Фоновые агенты, доступ к файлам и циклирование остаются экспериментальными и средства оболочки поступают из пакета предварительной версии agent-framework-tools .
Замечание
В настоящее время упакованный Go Harness недоступен. Создайте напрямую соответствующие пакеты агента на Go, поставщика контекста, компактизации и промежуточного ПО. Сведения о текущей поддержке см. в репозитории Agent Framework Go .
Пример пользовательского интерфейса терминала
Harness не предписывает интерфейс приложения. Репозиторий содержит примеры терминальных приложений, которые потоково выводят данные, отображают список дел и текущий режим, выводят запросы на подтверждение использования инструментов и предоставляют такие команды, как /todos, /mode и /exit.
Это важно
Эти консольные проекты являются примерами и не входят в состав фреймворка. Используйте их в качестве запускаемых примеров или в качестве отправной точки для собственного интерфейса терминала.
Пример точки входа .NET:HarnessConsole.RunAgentAsync
using Harness.Shared.Console;
await HarnessConsole.RunAgentAsync(
agent,
userPrompt: "Ask me anything to get started.");
Настройте пример с помощью наблюдателей, форматировщиков инструментов, обработчиков команд и HarnessConsoleOptions. См. примеры Harness для .NET.
В примере Python используется пакет console, основанный на Textual, наряду с примерами Harness:
from console import run_agent_async
await run_agent_async(agent)
Настройте пример с помощью наблюдателей, форматировщиков, команд и компонентов пользовательского интерфейса. См. примеры Python Harness.
В настоящее время в репозитории нет готового примера терминального приложения Go Harness.