Передача задач: маршрутизация между агентами
Сердце оркестратора — маршрутизатор: он смотрит на задачу и решает, какому специалисту её передать. Реализуем его в коде.
Маршрутизатор (router) — компонент, который по содержанию запроса выбирает подходящего агента-специалиста и передаёт ему задачу.
Задача маршрутизации
Пользователь приходит с разными запросами: где-то нужен счёт, где-то текст, где-то поддержка. Один агент на всё — перегружен (урок 5.1). Решение: на входе стоит маршрутизатор, который определяет тип запроса и направляет его нужному специалисту.
В реальной системе маршрутизатор — это часто отдельный вызов LLM («к какому из агентов отнести запрос?»). Для наглядности возьмём детерминированную версию: выбор по ключевому признаку.
Запускаемый роутер
# агенты-специалисты (заглушки)
def math_agent(task):
expr = task.split(":", 1)[1].strip()
return f"[Математик] {eval(expr)}"
def writer_agent(task):
topic = task.split(":", 1)[1].strip()
return f"[Писатель] текст про: {topic}"
def support_agent(task):
issue = task.split(":", 1)[1].strip()
return f"[Поддержка] разберусь с проблемой: {issue}"
# маршрутизатор: по префиксу выбирает специалиста
def route(task):
if task.startswith("math:"):
return math_agent(task)
if task.startswith("write:"):
return writer_agent(task)
if task.startswith("help:"):
return support_agent(task)
return "[Роутер] не знаю, кому передать"
tasks = [
"math: 6 * 7",
"write: про осень",
"help: не работает кнопка",
"xyz: непонятно",
]
for t in tasks:
print(route(t))
Вывод:
[Математик] 42 [Писатель] текст про: про осень [Поддержка] разберусь с проблемой: не работает кнопка [Роутер] не знаю, кому передать
Роутер направил каждый запрос своему специалисту, а нераспознанный — в ветку «не знаю». Это и есть скелет оркестратора: распознать тип → выбрать агента → передать.
Стратегии маршрутизации
| Способ | Как решает | Плюс/минус |
| По правилам | ключевые слова, префиксы | быстро и дёшево, но негибко |
| Через LLM | модель классифицирует запрос | гибко, но дороже и медленнее |
| Гибрид | правила + LLM для спорных | баланс цены и гибкости |
Что делать с «не знаю»
Важный случай — запрос, не подходящий ни одному агенту. Хороший роутер не молчит и не угадывает наугад: он либо отправляет к агенту «общего назначения», либо честно сообщает, что не может обработать, либо просит уточнить. Тихое неверное направление — частый источник ошибок в мультиагентных системах.
Передача контекста
Маршрутизатор передаёт специалисту не только задачу, но и нужный контекст: что уже известно, какой результат ожидается. Если контекст потерять, специалист начнёт «с чистого листа» и может продублировать работу. Поэтому вместе с задачей передают и относящуюся к ней часть памяти.
Итог
- Маршрутизатор по типу запроса выбирает специалиста — это скелет оркестратора.
- Маршрутизация бывает по правилам, через LLM или гибридной; у каждой свой баланс цены и гибкости.
- Нераспознанный запрос нельзя «тихо» направить наугад; вместе с задачей передают и нужный контекст.