Фоновые агенты

Фоновые агенты позволяют родительскому агенту делегировать независимые задачи именованным дочерним агентам. Каждая задача выполняется параллельно в собственном сеансе дочернего агента, а родитель сохраняет идентификатор задачи, который он может использовать для ожидания, получения результатов, продолжения работы или выпуска задачи.

Important

Фоновые агенты являются экспериментальными.

Фоновые агенты отличаются от фоновых ответов. Фоновый ответ представляет один запрос поставщика, который приложение опрашивает или возобновляет. Задача фонового агента вызывает другой агент Agent Framework и последующие каналы, возвращающие результат текста агента к родительскому элементу.

Настройка фоновых агентов вручную

Каждый дочерний агент должен иметь непустое, нечувствительно уникальное имя регистра. Предоставьте дочерним агентам ориентированные инструкции и только средства, необходимые для их делегированной роли.

Импортируйте BackgroundAgentsProvider и добавьте его в обычный агент с помощью ChatClientAgentOptions.AIContextProviders:

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

var backgroundProvider = new BackgroundAgentsProvider(
    [webSearchAgent, codeAnalysisAgent]);

AIAgent parentAgent = chatClient.AsAIAgent(new ChatClientAgentOptions
{
    Name = "research-coordinator",
    AIContextProviders = [backgroundProvider],
});

AgentSession session = await parentAgent.CreateSessionAsync();

BackgroundAgentsProviderOptions настраивает инструкции поставщика и форматирование списка агентов.

from agent_framework import Agent, BackgroundAgentsProvider

background_provider = BackgroundAgentsProvider(
    [web_search_agent, code_analysis_agent]
)

parent_agent = Agent(
    client=client,
    name="research-coordinator",
    context_providers=[background_provider],
)
session = parent_agent.create_session()

Передайте instructions= для BackgroundAgentsProvider замены инструкций. Включите {background_agents} , где должен появиться отформатированный список дочерних агентов.

Замечание

Упакованный поставщик фонового агента, описанный на этой странице, в настоящее время недоступен в Go.

Жизненный цикл задач

Поставщик добавляет те же средства, доступные для модели, в .NET и Python:

инструмент Действие жизненного цикла
background_agents_start_task Запустите задачу без блокировки в именованном агенте и верните его идентификатор целочисленной задачи.
background_agents_wait_for_first_completion Подождите, пока первая задача в предоставленном наборе достигнет состояния терминала.
background_agents_get_task_results Возвращает завершенный текст, сообщение об ошибке или текущее состояние.
background_agents_get_all_tasks Список идентификаторов, состояний, имен агентов и описаний.
background_agents_continue_task Выполните последующие входные данные в существующем дочернем сеансе после завершения или сбоя задачи.
background_agents_clear_completed_task Удалите задачу терминала и отпустите его дочерний сеанс.

Типичная последовательность родительского агента:

  1. Запустите каждую независимую задачу перед ожиданием, поэтому задачи выполняются одновременно.
  2. Дождитесь первого завершения, получите этот результат и повторите его, пока не будут запущены задачи.
  3. Продолжайте завершенную или неудачную задачу, если для выполнения работы требуется существующий контекст беседы.
  4. Очистить задачи терминала после получения результатов, если они не будут продолжены.

Состояние задачи : running, completedfailedили lost. Задача становится потерянной, когда дескриптор задачи внутри процесса или дочерний сеанс недоступен, например после перезапуска процесса или восстановления сеанса. Метаданные сериализуемой задачи могут оставаться в родительском сеансе, но рабочие и дочерние дескрипторы сеансов не сохраняются.

В поставщике нет средства отмены. Пусть выполнение задач достигает состояния терминала перед их очисткой.

Повторное использование одного родительского сеанса в разных поворотах. Каждая задача получает выделенный дочерний сеанс. Продолжение задачи терминала повторно использует дочерний сеанс; очистка удаляет метаданные задачи и освобождает дескриптор дочернего сеанса.

Результаты задачи возвращаются родительскому элементу в виде текста. Поставщик не прокси-сервер структурированного запроса на утверждение инструментов дочернего объекта обратно через родительский, поэтому настройте дочерние агенты для завершения делегированной работы без интерактивного утверждения или обработки их утверждений внутри узла дочернего агента.

Добавление автоматического ожидания вручную

Обтекайте родительский элемент LoopAgentвручную. BackgroundTaskCompletionLoopEvaluator продолжается только в то время, пока задача остается в Running состоянии:

AIAgent loopingParent = new LoopAgent(
    parentAgent,
    new BackgroundTaskCompletionLoopEvaluator(),
    new LoopAgentOptions { MaxIterations = 10 });

Средство оценки останавливает завершенные, неудачные и потерянные задачи.

Добавьте в обычный родительский элемент и свяйте AgentLoopMiddleware предикат фоновой задачи со своим вспомогательным элементом следующего сообщения:

from agent_framework import (
    Agent,
    AgentLoopMiddleware,
    background_tasks_running,
    background_tasks_running_message,
)

parent_agent = Agent(
    client=client,
    context_providers=[background_provider],
    middleware=[
        AgentLoopMiddleware(
            background_tasks_running(),
            next_message=background_tasks_running_message,
            max_iterations=10,
        )
    ],
)

Предикат продолжается только в то время, как состояние сохраняемой задачи по-прежнему сообщает о выполняемой задаче.

Автоматическая интеграция цикла фоновых задач в настоящее время недоступна в Go.

Использование фоновых агентов с агентом Use

Используйте эту настройку, если вы также хотите, чтобы конвейер планирования агента По умолчанию, памяти, утверждения и наблюдаемости.

Задайте HarnessAgentOptions.BackgroundAgents. Добавьте средство оценки завершения, когда родитель должен продолжать работать до тех пор, пока делегированная работа больше не выполняется:

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

var options = new HarnessAgentOptions
{
    Name = "research-coordinator",
    BackgroundAgents = [webSearchAgent, codeAnalysisAgent],
    LoopEvaluators = [new BackgroundTaskCompletionLoopEvaluator()],
    LoopAgentOptions = new LoopAgentOptions { MaxIterations = 10 },
};

HarnessAgent parentAgent = chatClient.AsHarnessAgent(options);
// Equivalent construction: new HarnessAgent(chatClient, options)
AgentSession session = await parentAgent.CreateSessionAsync();

Используется HarnessAgentOptions.BackgroundAgentsProviderOptions для настройки инструкций поставщика и форматирования списка агентов. Опущение сохраняет доступ к фоновому делегированию LoopEvaluators без автоматического повторного вызова.

Предоставляется background_agentscreate_harness_agentв . Соедините его с привязанным циклом, когда родитель должен автоматически ждать:

from agent_framework import (
    background_tasks_running,
    background_tasks_running_message,
    create_harness_agent,
)

parent_agent = create_harness_agent(
    client=client,
    name="research-coordinator",
    background_agents=[web_search_agent, code_analysis_agent],
    loop_should_continue=background_tasks_running(),
    loop_next_message=background_tasks_running_message,
    loop_max_iterations=10,
)
session = parent_agent.create_session()

Используйте background_agents_instructions для замены инструкций поставщика. С помощью Python по умолчанию программа автоматического утверждения включает средство автоматического утверждения, поэтому передайте session все запуски.

Замечание

В настоящее время делегирование фонового делегирования агента С помощью агента не доступно в Go.

Вопросы безопасности

Регистрируйте только дочерние агенты, которым вы доверяете. Родитель может отправлять им текст, производный от частного или недоверенного контекста, и их результаты добавляются обратно в контекст родительского элемента. Скомпрометированный дочерний объект может эксфильтровать делегированные входные данные или возвращать непрямое содержимое внедрения запроса.

Дальнейшие действия

Подробнее