Фоновые параллельные задачи: Работа как команда
Что вы узнаете
- ✅ Запускать несколько параллельных фоновых задач, позволяя разным AI-агентам работать одновременно
- ✅ Настраивать лимиты параллелизма для избежания ограничений API и перерасхода средств
- ✅ Получать результаты фоновых задач без ожидания завершения
- ✅ Отменять задачи для освобождения ресурсов
Ваша текущая задача
Только один человек работает в один момент времени?
Представьте этот сценарий:
- Вам нужно, чтобы агент Explore нашёл реализации аутентификации в кодовой базе
- Одновременно агент Librarian изучил лучшие практики
- И агент Oracle проверил архитектурный дизайн
Если выполнять последовательно: Общее время = 10 мин + 15 мин + 8 мин = 33 минуты
Но что если вы можете запустить их параллельно? 3 агента работают одновременно, общее время = max(10, 15, 8) = 15 минут, экономя 54% вашего времени.
Проблема: По умолчанию OpenCode может обрабатывать только одну сессию за раз. Для достижения параллелизма вам нужно вручную управлять несколькими окнами или ждать завершения задач.
Решение: Система фоновых задач oh-my-opencode может запускать несколько AI-агентов одновременно и отслеживать их прогресс в фоновом режиме, позволяя вам продолжать другую работу.
Когда использовать этот подход
Сценарии, в которых использование системы фоновых задач может повысить эффективность:
| Сценарий | Пример | Значение |
|---|---|---|
| Параллельное исследование | Explore находит реализации + Librarian консультирует документацию | В 3 раза быстрее завершение исследования |
| Мультиэкспертная проверка | Oracle проверяет архитектуру + Momus валидирует планы | Быстро получайте мультиперспективную обратную связь |
| Асинхронные задачи | Выполняйте обзор кода при отправке Git-коммита | Не блокируйте основной поток |
| Ограничения ресурсов | Ограничьте параллелизм для избежания ограничений API | Контролируйте стоимость и стабильность |
Режим Ultrawork
Добавление ultrawork или ulw в ваш промпт автоматически активирует режим максимальной производительности, включая всех профессиональных агентов и параллельные фоновые задачи. Ручная настройка не требуется.
🎒 Предварительные требования
Предварительные требования
Перед началом этого руководства убедитесь:
- oh-my-opencode установлен (см. Руководство по установке)
- Базовая конфигурация завершена с доступом хотя бы к одному AI-провайдеру
- Вы понимаете базовое использование оркестратора Sisyphus (см. Руководство по Sisyphus)
Основные концепции
Принцип работы системы фоновых задач можно свести к трём основным концепциям:
1. Параллельное выполнение
Система фоновых задач позволяет запускать несколько задач AI-агентов одновременно, каждая задача выполняется в независимой сессии. Это означает:
- Explore ищет код
- Librarian консультирует документацию
- Oracle проверяет дизайн
Три задачи выполняются параллельно, общее время равно самой медленной задаче.
2. Контроль параллелизма
Чтобы избежать запуска слишком многих задач одновременно, что приводит к ограничениям API или перерасходу средств, система предоставляет три уровня лимитов параллелизма:
Приоритет: Модель > Провайдер > По умолчанию
Пример конфигурации:
modelConcurrency: claude-opus-4-5 → 2
providerConcurrency: anthropic → 3
defaultConcurrency: all → 5Правила:
- Если указан лимит уровня модели, используйте его
- Иначе, если указан лимит уровня провайдера, используйте его
- Иначе используйте лимит по умолчанию (значение по умолчанию 5)
3. Механизм опроса
Система проверяет статус задач каждые 2 секунды для определения завершения задач. Условия завершения:
- Сессия бездействует (событие session.idle)
- Обнаружение стабильности: Количество сообщений не изменяется при 3 последовательных опросах
- Список TODO пуст: Все задачи завершены
Следуйте за нами
Шаг 1: Запуск фоновых задач
Используйте инструмент delegate_task для запуска фоновых задач:
Запустите параллельные фоновые задачи:
1. Explore находит реализации аутентификации
2. Librarian изучает лучшие практики
3. Oracle проверяет архитектурный дизайн
Выполнить параллельно:Почему Это классический случай использования для демонстрации фоновых задач. Три задачи могут выполняться одновременно, значительно экономя время.
Что вы должны увидеть Система вернёт 3 ID задачи:
Фоновая задача успешно запущена.
ID задачи: bg_abc123
ID сессии: sess_xyz789
Описание: Explore: 查找认证实现
Агент: explore
Статус: pending
...
Фоновая задача успешно запущена.
ID задачи: bg_def456
ID сессии: sess_uvwx012
Описание: Librarian: 研究最佳实践
Агент: librarian
Статус: pending
...Объяснение статусов задач
- pending: В очереди ожидает слот параллелизма
- running: В данный момент выполняется
- completed: Завершена
- error: Возникла ошибка
- cancelled: Отменена
Шаг 2: Проверка статуса задачи
Используйте инструмент background_output для просмотра статуса задачи:
Проверить статус bg_abc123:Почему Понять, завершена ли задача или всё ещё выполняется. По умолчанию не ожидает и возвращает статус немедленно.
Что вы должны увидеть Если задача всё ещё выполняется:
## Статус задачи
| Поле | Значение |
|--- | ---|
| ID задачи | `bg_abc123` |
| Описание | Explore: 查找认证实现 |
| Агент | explore |
| Статус | **running** |
| Длительность | 2m 15s |
| ID сессии | `sess_xyz789` |
> **Примечание**: Не нужно явно ожидать - система уведомит вас, когда эта задача завершится.
## Исходный промпт
查找 src/auth 目录下的认证实现,包括登录、注册、Token 管理等Если задача завершена:
Результат задачи
ID задачи: bg_abc123
Описание: Explore: 查找认证实现
Длительность: 5m 32s
ID сессии: sess_xyz789
---
找到了 3 个认证实现:
1. `src/auth/login.ts` - JWT 认证
2. `src/auth/register.ts` - 用户注册
3. `src/auth/token.ts` - Token 刷新
...Шаг 3: Настройка контроля параллелизма
Отредактируйте ~/.config/opencode/oh-my-opencode.json:
{
"$schema": "https://code-yeongyu.github.io/oh-my-opencode/schema.json",
"background_task": {
// Лимиты параллелизма уровня провайдера (рекомендуемые настройки)
"providerConcurrency": {
"anthropic": 3, // Модели Anthropic максимум 3 одновременно
"openai": 2, // Модели OpenAI максимум 2 одновременно
"google": 2 // Модели Google максимум 2 одновременно
},
// Лимиты параллелизма уровня модели (высший приоритет)
"modelConcurrency": {
"claude-opus-4-5": 2, // Opus 4.5 максимум 2 одновременно
"gpt-5.2": 2 // GPT 5.2 максимум 2 одновременно
},
// Лимит параллелизма по умолчанию (используется, когда ничего выше не настроено)
"defaultConcurrency": 3
}
}Почему Контроль параллелизма - ключ к предотвращению перерасхода средств. Если вы не установите лимиты и запустите 10 задач Opus 4.5 одновременно, вы можете мгновенно израсходовать большую часть квоты API.
Рекомендуемые настройки
Для большинства сценариев рекомендуемые настройки:
providerConcurrency.anthropic: 3providerConcurrency.openai: 2defaultConcurrency: 5
Что вы должны увидеть После вступления конфигурации в силу, при запуске фоновых задач:
- Если достигнут лимит параллелизма, задачи перейдут в статус pending и встанут в очередь
- После завершения задачи, задачи в очереди автоматически запустятся
Шаг 4: Отмена задач
Используйте инструмент background_cancel для отмены задач:
Отменить все фоновые задачи:Почему Иногда задачи застревают или больше не нужны; вы можете активно отменить их для освобождения ресурсов.
Что вы должны увидеть
Отменено 3 фоновых задач(и):
| ID задачи | Описание | Статус | ID сессии |
|--- | --- | --- | ---|
| `bg_abc123` | Explore: 查找认证实现 | running | `sess_xyz789` |
| `bg_def456` | Librarian: 研究最佳实践 | running | `sess_uvwx012` |
| `bg_ghi789` | Oracle: 审查架构设计 | pending | (не запущена) |
## Инструкции продолжения
Для продолжения отменённой задачи используйте:
delegate_task(session_id="<session_id>", prompt="Continue: <your follow-up>")
Продолжаемые сессии:
- `sess_xyz789` (Explore: 查找认证实现)
- `sess_uvwx012` (Librarian: 研究最佳实践)Контрольная точка ✅
Подтвердите, что вы понимаете следующие моменты:
- [ ] Можете запускать несколько параллельных фоновых задач
- [ ] Понимаете статусы задач (pending, running, completed)
- [ ] Настроили разумные лимиты параллелизма
- [ ] Можете просматривать и получать результаты задач
- [ ] Можете отменять ненужные задачи
Распространённые ошибки
Ошибка 1: Забытие настройки лимитов параллелизма
Симптом: Запущено слишком много задач, квота API мгновенно исчерпана или достигнут Rate Limit.
Решение: Настройте providerConcurrency или defaultConcurrency в oh-my-opencode.json.
Ошибка 2: Слишком частый опрос результатов
Симптом: Вызов background_output каждые несколько секунд для проверки статуса задачи, добавляя ненужные накладные расходы.
Решение: Система автоматически уведомит вас, когда задачи завершатся. Проверяйте вручную только когда вам действительно нужны промежуточные результаты.
Ошибка 3: Тайм-аут задачи
Симптом: Задачи автоматически отменяются после выполнения более 30 минут.
Причина: Фоновые задачи имеют TTL (тайм-аут) 30 минут.
Решение: Если вам нужны долго выполняющиеся задачи, рассмотрите разделение на несколько подзадач или используйте delegate_task(background=false) для выполнения на переднем плане.
Ошибка 4: Ожидающие задачи никогда не запускаются
Симптом: Статус задачи остаётся pending, никогда не переходя в running.
Причина: Лимит параллелизма заполнен, нет доступных слотов.
Решение:
- Дождитесь завершения существующих задач
- Увеличьте настройку лимита параллелизма
- Отмените ненужные задачи для освобождения слотов
Резюме
Система фоновых задач позволяет вам работать как настоящая команда, с несколькими AI-агентами, выполняющими задачи параллельно:
- Запуск параллельных задач: Используйте инструмент
delegate_task - Контроль параллелизма: Настройте
providerConcurrency,modelConcurrency,defaultConcurrency - Получение результатов: Используйте инструмент
background_output(система автоматически уведомляет) - Отмена задач: Используйте инструмент
background_cancel
Основные правила:
- Опрос статуса задачи каждые 2 секунды
- Задача завершается при стабильности 3 раза подряд или бездействии
- Задачи автоматически истекают через 30 минут
- Приоритет: modelConcurrency > providerConcurrency > defaultConcurrency
Что дальше
В следующем уроке мы изучим LSP и AST-Grep: Инструменты рефакторинга кода.
Вы узнаете:
- Как использовать инструменты LSP для навигации по коду и рефакторинга
- Как использовать AST-Grep для точного поиска и замены шаблонов
- Лучшие практики объединения LSP и AST-Grep
Приложение: Справочник по исходному коду
Нажмите для раскрытия местоположения исходного кода
Обновлено: 2026-01-26
| Функция | Путь к файлу | Номера строк |
|---|---|---|
| Менеджер фоновых задач | src/features/background-agent/manager.ts | 1-1378 |
| Контроль параллелизма | src/features/background-agent/concurrency.ts | 1-138 |
| Инструмент delegate_task | src/tools/background-task/tools.ts | 51-119 |
| Инструмент background_output | src/tools/background-task/tools.ts | 320-384 |
| Инструмент background_cancel | src/tools/background-task/tools.ts | 386-514 |
Ключевые константы:
TASK_TTL_MS = 30 * 60 * 1000: Тайм-аут задачи (30 минут)MIN_STABILITY_TIME_MS = 10 * 1000: Время начала обнаружения стабильности (10 секунд)DEFAULT_STALE_TIMEOUT_MS = 180_000: Тайм-аут по умолчанию (3 минуты)MIN_IDLE_TIME_MS = 5000: Минимальное время игнорирования раннего бездействия (5 секунд)
Ключевые классы:
BackgroundManager: Менеджер фоновых задач, отвечает за запуск, отслеживание, опрос и завершение задачConcurrencyManager: Менеджер контроля параллелизма, реализует трёхуровневый приоритет (модель > провайдер > по умолчанию)
Ключевые функции:
BackgroundManager.launch(): Запуск фоновой задачиBackgroundManager.pollRunningTasks(): Опрос статуса задачи каждые 2 секунды (строка 1182)BackgroundManager.tryCompleteTask(): Безопасное завершение задачи, предотвращение гонок (строка 909)ConcurrencyManager.getConcurrencyLimit(): Получение лимита параллелизма (строка 24)ConcurrencyManager.acquire()/ConcurrencyManager.release(): Получение/освобождение слота параллелизма (строки 41, 71)