Background, Dynamic Subagents
У сабагентов есть и другое классное применение - они могут работать параллельно с основным диалогом. Т.е. основной агент поставил задачу, сабагент ее принял, а диалог пошел дальше. Когда задача завершится - сабагент сам принесет результат и подложит его в основной контекст.
Что-то вроде такого:
| assistant | | | user | | | // кладем результат в контекст | | subagent result | assistant | | | tool result | | assistant | tool call | | user | tool result | | | tool call | | | tool result | | // отпускаем основной контекст | | subagent called | tool call | | // делегируем задачу | | subagent call | user | | user | | | subagent tools | memory tools | | claw prompt | subagent prompt |
В комбинации с тем, что LLM может вызывать сразу несколько инструментов - один запрос может стартануть сразу несколько параллельных подзадач, которые быстро сожрут все ваши токены.
Стоит упомянуть, что тут существует 2 паттерна: 1. сабагент сам приносит результат по готовности 2. сабагент отдает TaskId, а основной агент спрашивает о готовности по этому ID
Какой вариант использовать - зависит от задачи. Поиграйтесь
Ну и последнее, о чем хочется сказать - динамические сабагенты. Это когда модель сама понимает, что вот эту задачу нужно делегировать кому-то, сама генерирует этого "кого-то" и отправляет делать задачу.
Как вы понимаете, это тоже инструмент. В AG2 у нас для этого есть специальный формат спеки, которую мы умеем превращать в агента. Т.е. инструмент имеет 2 аргумента:
- JSON с описанием желаемого агента
- Промпт, с которым его запустить
Таким образом, основной агент превращается в волшебника, который умеет самостоятельно спавнить произвольных сабагентов. Rocket science, не иначе