Skip to content

Фоновые параллельные задачи: Работа как команда

Что вы узнаете

  • ✅ Запускать несколько параллельных фоновых задач, позволяя разным 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 в ваш промпт автоматически активирует режим максимальной производительности, включая всех профессиональных агентов и параллельные фоновые задачи. Ручная настройка не требуется.

🎒 Предварительные требования

Предварительные требования

Перед началом этого руководства убедитесь:

  1. oh-my-opencode установлен (см. Руководство по установке)
  2. Базовая конфигурация завершена с доступом хотя бы к одному AI-провайдеру
  3. Вы понимаете базовое использование оркестратора 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 для запуска фоновых задач:

markdown
Запустите параллельные фоновые задачи:

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 для просмотра статуса задачи:

markdown
Проверить статус 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:

jsonc
{
  "$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: 3
  • providerConcurrency.openai: 2
  • defaultConcurrency: 5

Что вы должны увидеть После вступления конфигурации в силу, при запуске фоновых задач:

  • Если достигнут лимит параллелизма, задачи перейдут в статус pending и встанут в очередь
  • После завершения задачи, задачи в очереди автоматически запустятся

Шаг 4: Отмена задач

Используйте инструмент background_cancel для отмены задач:

markdown
Отменить все фоновые задачи:

Почему Иногда задачи застревают или больше не нужны; вы можете активно отменить их для освобождения ресурсов.

Что вы должны увидеть

Отменено 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-агентами, выполняющими задачи параллельно:

  1. Запуск параллельных задач: Используйте инструмент delegate_task
  2. Контроль параллелизма: Настройте providerConcurrency, modelConcurrency, defaultConcurrency
  3. Получение результатов: Используйте инструмент background_output (система автоматически уведомляет)
  4. Отмена задач: Используйте инструмент 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.ts1-1378
Контроль параллелизмаsrc/features/background-agent/concurrency.ts1-138
Инструмент delegate_tasksrc/tools/background-task/tools.ts51-119
Инструмент background_outputsrc/tools/background-task/tools.ts320-384
Инструмент background_cancelsrc/tools/background-task/tools.ts386-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)