Делегируйте пакет задачи, а не тему
Узкому агенту нельзя бросить тему - только пакет. Фраза "изучи конкурентов" рождает дублирование и пробелы. Хорошая делегация фиксирует objective, границу, входы, tools, evidence, формат, бюджет и stop condition.
{
"task_id": "market-pricing",
"objective": "Сравнить публичные тарифы трёх указанных продуктов",
"in_scope": ["текущие цены", "лимиты плана", "дата проверки"],
"out_of_scope": ["отзывы", "оценка качества", "другие продукты"],
"inputs": { "products": ["A", "B", "C"], "region": "EU" },
"tools": ["web_search", "web_open"],
"source_policy": "официальные pricing pages; secondary only if official missing",
"output_schema": "PricingComparisonV2",
"budget": { "tool_calls": 12, "deadline_ms": 90000 },
"stop_condition": "каждый продукт имеет price + source или status=not_found"
}Именно из-за расплывчатой делегации synthesis превращается в склеивание. Разберём сбои и их причины.
- Все workers делают одно. Причина - scope задан темой. Лечение - непересекающиеся deliverables.
- Ответы нельзя сравнить. Причина - нет общей schema. Лечение - единые поля, units и evidence contract.
- Оркестратор выбирает красивый текст. Причина - нет source quality policy. Лечение - сравнение provenance и дат.
- Бесконечный второй раунд. Причина - нет stop condition. Лечение - gap budget и явный status=not_found.
И про параллельность отдельно.
Параллельность требует независимости. Google ADK подчёркивает: parallel workers не обмениваются историей во время выполнения, а порядок результатов может быть недетерминированным. Не проектируйте скрытые зависимости между ветвями.