· · 3 минут чтения

Шаблон Handoff: Когда Одного Агента Недостаточно

Шаблон оркестрации Handoff в Microsoft Agent Framework позволяет агентам решать, кто обрабатывает следующий ход — без потери контекста разговора и нарушения правил топологии.

Agent Framework AI .NET Multi-agent Orchestration
Эта статья также доступна на:English, Català, Español, Deutsch, Français, Português, Italiano, 日本語, 中文, 한국어, हिन्दी, Polski, Türkçe, العربية, Bahasa Indonesia, Nederlands

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

Именно для этой проблемы разработан шаблон оркестрации Handoff в Microsoft Agent Framework.

Как Работает Handoff

Разработчик объявляет граф: вот агенты, вот рёбра между ними. Фреймворк делает всё остальное — синтезирует инструмент handoff на каждое исходящее ребро и внедряет его в каждого агента. Когда агент решает передать управление, он вызывает инструмент. Фреймворк обеспечивает соблюдение топологии.

Три вещи делают это отличным от простого вызова агентами друг друга:

  1. Единый транскрипт — принимающий агент видит полную историю разговора. Без начала с нуля.
  2. Соблюдение топологии — агент может передавать управление только объявленным целям. Ошибки маршрутизации обнаруживаются при создании, не в продакшене.
  3. Естественное завершение — когда активный агент заканчивает свой ход без вызова инструмента handoff, рабочий процесс уступает пользователю. Без опроса, без явных условий выхода.

Минимальный Пример

В .NET создание рабочего процесса handoff выглядит так:

using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Workflows;

AIAgent triage = chatClient.AsAIAgent(
    instructions: "Route to the right specialist.",
    name: "Triage");

AIAgent billing = chatClient.AsAIAgent(
    instructions: "Handle billing questions.",
    name: "Billing");

AIAgent tech = chatClient.AsAIAgent(
    instructions: "Handle technical support.",
    name: "Tech");

var workflow = HandoffWorkflow.Create()
    .Add(triage, targets: [billing, tech])
    .Add(billing, targets: [triage])
    .Add(tech, targets: [triage, billing]);

Triage может отправлять к любому специалисту. Оба специалиста могут отправлять обратно к triage. Граф поддерживает ацикличность, но допускает обратные рёбра когда нужно (“нужно больше информации” → обратно к исследованию).

Когда Использовать Handoff (и Когда Не Стоит)

Handoff хорошо подходит когда:

  • Владение может меняться в середине разговора — агент может понять, что он не тот специалист
  • Обратные рёбра важны — может понадобиться вернуться к более раннему шагу без перезапуска
  • Решения о маршрутизации размыты — решение о передаче управления контекстуально и лучше принимается моделью, чем типизированными предикатами

Это не правильный выбор когда:

  • Ваш пайплайн фиксированный и последовательный — используйте Sequential-рабочий процесс
  • Каждый шаг независим — агенты, разделяющие транскрипт, где только один из них нуждался в нём — просто шум
  • Нужны строгие гарантии обработки — недетерминизм маршрутизации на основе модели — не то, что вам нужно

Обратные Рёбра и Human-in-the-Loop

Одна из интересных форм, которые Handoff позволяет — настоящие обратные рёбра. Агент может решить “у меня недостаточно информации” и вернуться к шагу исследования — не с жёстко закодированным циклом, а потому что модель решает, что это правильный ход.

Взаимодействия human-in-the-loop также естественно компонуются. Когда специалисту нужен ввод пользователя, рабочий процесс уступает пользователю через стандартный цикл хода, собирает ответ и возобновляется с полным контекстом. Агент никогда не потерял разговор.

Заключение

Handoff — один из тех шаблонов, который звучит просто, но позволяет много, как только вы его усвоите: децентрализованная маршрутизация, общий контекст, обеспечиваемая топология, естественное завершение. Это правильный следующий шаг, когда ваши агенты начинают говорить “на самом деле, это должен обработать кто-то другой.”

Прочитайте полное руководство в оригинальном посте: A Tour of the Handoff Orchestration Pattern

Поделиться:
Просмотреть исходный код этой статьи на GitHub ↗
← Устойчивые рабочие процессы в Microsoft Agent Framework: от In-Memory до Azure Functions
Microsoft Foundry Апрель 2026: Foundry Local GA, GPT-5.5, CodeAct с Hyperlight →