Перейти к основному содержимому

Делегирование и параллельная работа

VibeOS может порождать изолированные дочерние агенты для параллельной работы над задачами. Каждый под-агент получает собственный диалог, сессию терминала и набор инструментов. Обратно возвращается только итоговая сводка — промежуточные вызовы инструментов никогда не попадают в ваш контекст.

Полную документацию по функции см. в разделе Делегирование под-агентам.


Когда делегировать​

Хорошие кандидаты для делегирования:

  • Подзадачи, требующие глубоких рассуждений (отладка, ревью кода, синтез исследований)
  • Задачи, которые засорили бы ваш контекст промежуточными данными
  • Параллельные независимые потоки работы (исследование A и B одновременно)
  • Задачи, требующие «свежего взгляда», когда агенту нужно подойти без предвзятости

Используйте что-то другое:

  • Одиночный вызов инструмента → просто используйте инструмент напрямую
  • Механическая многошаговая работа с логикой между шагами → execute_code
  • Задачи, требующие взаимодействия с пользователем → под-агенты не могут использовать clarify
  • Быстрые правки файлов → делайте их напрямую
  • Долговременная работа, которая должна пережить текущий ход → cronjob или terminal(background=True, notify_on_complete=True). delegate_task синхронна: если родительский ход прерывается, активные дочерние агенты отменяются, а их работа отбрасывается.

Паттерн: Параллельное исследование​

Исследуйте три темы одновременно и получите структурированные сводки:

Исследуй эти три темы параллельно:
1. Текущее состояние WebAssembly вне браузера
2. Внедрение серверных чипов RISC-V в 2025 году
3. Практические применения квантовых вычислений

Сосредоточься на последних разработках и ключевых игроках.

За кулисами VibeOS использует:

delegate_task(tasks=[
{
"goal": "Исследовать WebAssembly вне браузера в 2025",
"context": "Сосредоточиться на: рантаймах (Wasmtime, Wasmer), сценариях использования в облаке/на периферии, прогрессе WASI",
"toolsets": ["web"]
},
{
"goal": "Исследовать внедрение серверных чипов RISC-V",
"context": "Сосредоточиться на: выпускаемых серверных чипах, облачных провайдерах, внедряющих их, экосистеме ПО",
"toolsets": ["web"]
},
{
"goal": "Исследовать практические применения квантовых вычислений",
"context": "Сосредоточиться на: прорывах в коррекции ошибок, реальных примерах использования, ключевых компаниях",
"toolsets": ["web"]
}
])

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


Паттерн: Ревью кода​

Делегируйте проверку безопасности под-агенту со свежим контекстом, который подходит к коду без предубеждений:

Проверь модуль аутентификации в src/auth/ на наличие проблем безопасности.
Проверь SQL-инъекции, проблемы с валидацией JWT, обработку паролей
и управление сессиями. Исправь всё, что найдёшь, и запусти тесты.

Ключевое значение имеет поле context — оно должно включать всё, что нужно под-агенту:

delegate_task(
goal="Проверить src/auth/ на проблемы безопасности и исправить найденные",
context="""Проект в /home/user/webapp. Python 3.11, Flask, PyJWT, bcrypt.
Файлы аутентификации: src/auth/login.py, src/auth/jwt.py, src/auth/middleware.py
Команда для тестов: pytest tests/auth/ -v
Сосредоточиться на: SQL-инъекциях, валидации JWT, хешировании паролей, управлении сессиями.
Исправить найденные проблемы и убедиться, что тесты проходят.""",
toolsets=["terminal", "file"]
)
Проблема контекста

Под-агенты абсолютно ничего не знают о вашем разговоре. Они начинают с чистого листа. Если вы делегируете «исправь баг, который мы обсуждали», под-агент понятия не имеет, о каком баге речь. Всегда явно передавайте пути к файлам, сообщения об ошибках, структуру проекта и ограничения.


Паттерн: Сравнение альтернатив​

Оцените несколько подходов к одной и той же проблеме параллельно, затем выберите лучший:

Мне нужно добавить полнотекстовый поиск в наше Django-приложение. Оцени три подхода
параллельно:
1. PostgreSQL tsvector (встроенный)
2. Elasticsearch через django-elasticsearch-dsl
3. Meilisearch через meilisearch-python

Для каждого: сложность настройки, возможности запросов, требования к ресурсам
и затраты на обслуживание. Сравни их и порекомендуй один.

Каждый под-агент независимо исследует один вариант. Благодаря изоляции отсутствует перекрёстное влияние — каждая оценка опирается на собственные достоинства. Родительский агент получает все три сводки и проводит сравнение.


Паттерн: Рефакторинг нескольких файлов​

Разделите крупную задачу рефакторинга между параллельными под-агентами, каждый из которых обрабатывает свою часть кодовой базы:

delegate_task(tasks=[
{
"goal": "Переработать все обработчики API-эндпоинтов под новый формат ответов",
"context": """Проект в /home/user/api-server.
Файлы: src/handlers/users.py, src/handlers/auth.py, src/handlers/billing.py
Старый формат: return {"data": result, "status": "ok"}
Новый формат: return APIResponse(data=result, status=200).to_dict()
Импорт: from src.responses import APIResponse
Запустить тесты после: pytest tests/handlers/ -v""",
"toolsets": ["terminal", "file"]
},
{
"goal": "Обновить все методы клиентского SDK для работы с новым форматом ответов",
"context": """Проект в /home/user/api-server.
Файлы: sdk/python/client.py, sdk/python/models.py
Старый парсинг: result = response.json()["data"]
Новый парсинг: result = response.json()["data"] (тот же ключ, но добавить проверку кода статуса)
Также обновить sdk/python/tests/test_client.py""",
"toolsets": ["terminal", "file"]
},
{
"goal": "Обновить API-документацию в соответствии с новым форматом ответов",
"context": """Проект в /home/user/api-server.
Документация в: docs/api/. Формат: Markdown с примерами кода.
Обновить все примеры ответов со старого формата на новый.
Добавить раздел 'Формат ответа' в docs/api/overview.md с объяснением схемы.""",
"toolsets": ["terminal", "file"]
}
])
подсказка

Каждый под-агент получает собственную сессию терминала. Они могут работать в одном каталоге проекта, не мешая друг другу — при условии, что редактируют разные файлы. Если два под-агента могут затронуть один и тот же файл, обработайте этот файл самостоятельно после завершения параллельной работы.


Паттерн: Сбор, затем анализ​

Используйте execute_code для механического сбора данных, затем делегируйте анализ, требующий рассуждений:

# Шаг 1: Механический сбор (execute_code лучше — рассуждения не нужны)
execute_code("""
from vibeos_tools import web_search, web_extract

results = []
for query in ["AI funding Q1 2026", "AI startup acquisitions 2026", "AI IPOs 2026"]:
r = web_search(query, limit=5)
for item in r["data"]["web"]:
results.append({"title": item["title"], "url": item["url"], "desc": item["description"]})

# Извлечь полное содержимое 5 наиболее релевантных
urls = [r["url"] for r in results[:5]]
content = web_extract(urls)

# Сохранить для этапа анализа
import json
with open("/tmp/ai-funding-data.json", "w") as f:
json.dump({"search_results": results, "extracted": content["results"]}, f)
print(f"Собрано {len(results)} результатов, извлечено {len(content['results'])} страниц")
""")

# Шаг 2: Анализ, требующий рассуждений (делегирование лучше)
delegate_task(
goal="Проанализировать данные о финансировании AI и написать рыночный отчёт",
context="""Необработанные данные в /tmp/ai-funding-data.json содержат результаты поиска и
извлечённые веб-страницы о финансировании AI, приобретениях и IPO в Q1 2026.
Написать структурированный рыночный отчёт: ключевые сделки, тренды, заметные игроки
и перспективы. Сосредоточиться на сделках свыше $100M.""",
toolsets=["terminal", "file"]
)

Это часто самый эффективный паттерн: execute_code дёшево обрабатывает 10+ последовательных вызовов инструментов, а затем под-агент выполняет единственную дорогую задачу рассуждения с чистым контекстом.


Выбор набора инструментов​

Выбирайте наборы инструментов в зависимости от того, что нужно под-агенту:

Тип задачиНаборы инструментовПочему
Веб-исследование["web"]Только web_search + web_extract
Работа с кодом["terminal", "file"]Доступ к оболочке + файловые операции
Полный стек["terminal", "file", "web"]Всё, кроме обмена сообщениями
Анализ только для чтения["file"]Может только читать файлы, без оболочки

Ограничение наборов инструментов удерживает под-агента в фокусе и предотвращает случайные побочные эффекты (например, под-агент-исследователь, запускающий команды оболочки).


Ограничения​

  • По умолчанию 3 параллельные задачи: пакеты по умолчанию запускают 3 одновременных под-агента (настраивается через delegation.max_concurrent_children в config.yaml, без жёсткого потолка, только нижняя граница 1)
  • Вложенное делегирование — опционально: листовые под-агенты (по умолчанию) не могут вызывать delegate_task, clarify, memory, send_message или execute_code. Под-агенты-оркестраторы (role="orchestrator") сохраняют delegate_task для дальнейшего делегирования, но только если delegation.max_spawn_depth поднят выше значения по умолчанию 1 (нижняя граница 1, без потолка); остальные четыре остаются заблокированными. Отключите глобально через delegation.orchestrator_enabled: false.

Настройка параллелизма и глубины​

ПараметрПо умолчаниюДиапазонЭффект
max_concurrent_children3>=1Размер параллельного пакета на один вызов delegate_task
max_spawn_depth1>=1Сколько уровней делегирования могут порождать дальнейшие

Пример: запуск 30 параллельных рабочих с вложенными под-агентами:

delegation:
max_concurrent_children: 30
max_spawn_depth: 2
  • Отдельные терминалы — каждый под-агент получает собственную сессию терминала с отдельным рабочим каталогом и состоянием
  • Нет истории разговора — под-агенты видят только goal и context, которые родительский агент передаёт при вызове delegate_task
  • По умолчанию 50 итераций — установите max_iterations ниже для простых задач, чтобы сэкономить ресурсы
  • Не сохраняется — delegate_task синхронна и выполняется внутри родительского хода. Если родитель прерывается (новое сообщение пользователя, /stop, /new), все активные дочерние агенты отменяются (status="interrupted"), а их работа отбрасывается. Для работы, которая должна пережить текущий ход, используйте cronjob или terminal(background=True, notify_on_complete=True).

Советы​

Будьте конкретны в целях. «Исправь баг» — слишком расплывчато. «Исправь TypeError в api/handlers.py на строке 47, где process_request() получает None от parse_body()» даёт под-агенту достаточно информации для работы.

Указывайте пути к файлам. Под-агенты не знают структуру вашего проекта. Всегда указывайте абсолютные пути к соответствующим файлам, корень проекта и команду для тестов.

Используйте делегирование для изоляции контекста. Иногда нужен свежий взгляд. Делегирование заставляет вас чётко сформулировать проблему, и под-агент подходит к ней без предположений, накопившихся в вашем разговоре.

Проверяйте результаты. Сводки под-агентов — это всего лишь сводки. Если под-агент говорит «исправил баг, тесты проходят», проверьте это, запустив тесты самостоятельно или прочитав diff.


Полную документацию по делегированию — все параметры, интеграцию с ACP и расширенную конфигурацию — см. в разделе Делегирование под-агентам.