Оптимизация параллельных агентов: смещение PID и распределение аккаунтов
Смещение PID — это механизм оптимизации распределения аккаунтов на основе идентификатора процесса. Он вычисляет смещение через process.pid % accounts.length, позволяя нескольким процессам OpenCode или параллельным агентам oh-my-opencode приоритетно выбирать разные Google-аккаунты. Когда несколько процессов работают одновременно, каждый процесс автоматически выбирает разные стартовые аккаунты на основе остатка от деления своего PID. Это эффективно предотвращает ошибки ограничения скорости 429, вызванные одновременным использованием одного аккаунта несколькими процессами. Производительность значительно повышается за счёт повышения коэффициента успешных запросов и эффективности использования квот в параллельных сценариях. Особенно рекомендуется для разработчиков, которым необходимо одновременно запускать несколько агентов или выполнять параллельные задачи.
Что вы сможете делать после изучения
- Понимать проблемы конфликтов аккаунтов в сценариях с параллельными агентами
- Включить функцию смещения PID для приоритетного выбора разных аккаунтов разными процессами
- Сочетать со стратегией round-robin для максимального использования нескольких аккаунтов
- Устранять неполадки с ограничением скорости и выбором аккаунтов в параллельных агентах
Ваша текущая ситуация
При использовании oh-my-opencode или одновременном запуске нескольких экземпляров OpenCode вы можете столкнуться со следующими проблемами:
- Несколько дочерних агентов одновременно используют один аккаунт, часто сталкиваясь с ограничением скорости 429
- Даже при настройке нескольких аккаунтов параллельные запросы по-прежнему конкурируют за один аккаунт
- Разные процессы при запуске начинают с первого аккаунта, что приводит к неравномерному распределению аккаунтов
- После неудачного запроса необходимо ждать довольно долгое время перед повторной попыткой
Когда использовать эту функцию
Функция смещения PID подходит для следующих сценариев:
| Сценарий | Нужно ли смещение PID | Причина |
|---|---|---|
| Один экземпляр OpenCode | ❌ Не нужно | Один процесс, нет конфликтов аккаунтов |
| Ручное переключение между несколькими аккаунтами | ❌ Не нужно | Не параллельно, достаточно стратегии sticky |
| oh-my-opencode — несколько агентов | ✅ Рекомендуется | Многопроцессная параллельность, нужно распределение аккаунтов |
| Одновременный запуск нескольких экземпляров OpenCode | ✅ Рекомендуется | Разные процессы с независимыми PID, автоматическое распределение |
| CI/CD — параллельные задачи | ✅ Рекомендуется | Каждая задача — независимый процесс, избежание конкуренции |
Предварительная проверка
Перед началом этого урока убедитесь, что вы:
- ✅ Настроили как минимум 2 Google-аккаунта
- ✅ Понимаете принцип работы стратегий выбора аккаунтов
- ✅ Используете oh-my-opencode или необходимо параллельно запускать несколько экземпляров OpenCode
Урок по настройке нескольких аккаунтов | Урок по стратегиям выбора аккаунтов
Основная идея
Что такое смещение PID?
PID (Process ID) — это уникальный идентификатор, присваиваемый операционной системой каждому процессу. Когда одновременно запущено несколько процессов OpenCode, у каждого процесса разный PID.
Смещение PID — это оптимизация распределения аккаунтов на основе идентификатора процесса:
Предположим, есть 3 аккаунта (index: 0, 1, 2):
Процесс A (PID=123):
123 % 3 = 0 → приоритетный аккаунт 0
Процесс B (PID=456):
456 % 3 = 1 → приоритетный аккаунт 1
Процесс C (PID=789):
789 % 3 = 2 → приоритетный аккаунт 2Каждый процесс приоритетно выбирает разные аккаунты на основе остатка от деления своего PID, избегая конкуренции за один аккаунт с самого начала.
Зачем нужно смещение PID?
Без смещения PID все процессы при запуске начинают с аккаунта 0:
Временная шкала:
T1: Процесс A запускается → использует аккаунт 0
T2: Процесс B запускается → использует аккаунт 0 ← Конфликт!
T3: Процесс C запускается → использует аккаунт 0 ← Конфликт!После включения смещения PID:
Временная шкала:
T1: Процесс A запускается → смещение PID → использует аккаунт 0
T2: Процесс B запускается → смещение PID → использует аккаунт 1 ← Распределение!
T3: Процесс C запускается → смещение PID → использует аккаунт 2 ← Распределение!Сочетание со стратегиями выбора аккаунтов
Смещение PID действует только на этапе fallback стратегии sticky (стратегии round-robin и hybrid имеют собственную логику распределения):
| Стратегия | Смещение PID активно | Рекомендуемый сценарий |
|---|---|---|
sticky | ✅ Активно | Одиночный процесс + приоритет prompt cache |
round-robin | ❌ Неактивно | Многопроцессность/параллельные агенты, максимальная пропускная способность |
hybrid | ❌ Неактивно | Интеллектуальное распределение, приоритет health score |
Почему round-robin не нуждается в смещении PID?
Стратегия round-robin сама по себе осуществляет ротацию аккаунтов:
// При каждом запросе переключается на следующий аккаунт
this.cursor++;
const account = available[this.cursor % available.length];Несколько процессов естественным образом распределяются по разным аккаунтам, дополнительное смещение PID не требуется.
Лучшие практики
Для сценариев с параллельными агентами рекомендуется следующая конфигурация:
{
"account_selection_strategy": "round-robin",
"pid_offset_enabled": false // round-robin не требуется
}Если необходимо использовать стратегии sticky или hybrid, включите смещение PID.
Практическое руководство
Шаг 1: Проверка конфигурации множественных аккаунтов
Зачем Для работы смещения PID требуется минимум 2 аккаунта. При наличии только 1 аккаунта, независимо от остатка от деления PID, будет использоваться этот единственный аккаунт.
Действие
Проверьте текущее количество аккаунтов:
opencode auth listВы должны увидеть минимум 2 аккаунта:
2 account(s) saved:
1. [email protected]
2. [email protected]Если только 1 аккаунт, добавьте дополнительные:
opencode auth loginСледуйте подсказкам и выберите (a)dd new account(s).
Ожидаемый результат: Список аккаунтов показывает 2 или более аккаунтов.
Шаг 2: Конфигурация смещения PID
Зачем Включение функции смещения PID через конфигурационный файл позволяет плагину учитывать идентификатор процесса при выборе аккаунта.
Действие
Откройте конфигурационный файл OpenCode:
- macOS/Linux:
~/.config/opencode/antigravity.json - Windows:
%APPDATA%\opencode\antigravity.json
Добавьте или измените следующую конфигурацию:
{
"pid_offset_enabled": true
}Пример полной конфигурации (с совместным использованием стратегии sticky):
{
"pid_offset_enabled": true,
"account_selection_strategy": "sticky"
}Способ через переменные окружения (опционально):
export OPENCODE_ANTIGRAVITY_PID_OFFSET_ENABLED=1Ожидаемый результат: В конфигурационном файле параметр pid_offset_enabled установлен в true.
Шаг 3: Проверка эффекта смещения PID
Зачем Через фактический запуск нескольких процессов проверить, активно ли смещение PID, и используют ли разные процессы приоритетно разные аккаунты.
Действие
Откройте два окна терминала и запустите OpenCode в каждом:
Терминал 1:
opencode chat
# Отправьте запрос, запишите используемый аккаунт (посмотрите логи или toast)Терминал 2:
opencode chat
# Отправьте запрос, запишите используемый аккаунтНаблюдайте за поведением выбора аккаунтов:
- ✅ Ожидается: Два терминала приоритетно используют разные аккаунты
- ❌ Проблема: Два терминала используют один и тот же аккаунт
Если проблема сохраняется, проверьте:
- Конфигурация загружается ли правильно
- Является ли стратегия выбора аккаунта
sticky(round-robin не требует смещения PID) - Есть ли только 1 аккаунт
Включите отладочные логи для просмотра подробного процесса выбора аккаунтов:
export OPENCODE_ANTIGRAVITY_DEBUG=1
opencode chatВ логах будет отображаться:
[accounts] Applying PID offset: 1 (process.pid % accounts.length)
[accounts] Starting account index for 'claude': 1Ожидаемый результат: Разные терминалы приоритетно используют разные аккаунты, или в логах показано, что смещение PID применено.
Шаг 4: (Опционально) Совместное использование со стратегией round-robin
Зачем Стратегия round-robin сама по себе осуществляет ротацию аккаунтов и не требует смещения PID. Однако для высокочастотных параллельных агентов round-robin является лучшим выбором.
Действие
Измените конфигурационный файл:
{
"account_selection_strategy": "round-robin",
"pid_offset_enabled": false
}Запустите несколько агентов oh-my-opencode, наблюдайте за распределением запросов:
Агент 1 → аккаунт 0 → аккаунт 1 → аккаунт 2 → аккаунт 0 ...
Агент 2 → аккаунт 1 → аккаунт 2 → аккаунт 0 → аккаунт 1 ...Каждый агент независимо ротирует аккаунты, полностью используя квоты всех аккаунтов.
Ожидаемый результат: Запросы равномерно распределяются по всем аккаунтам, каждый агент независимо ротирует аккаунты.
Контрольная точка ✅
После завершения описанных выше шагов вы должны уметь:
- [ ] Успешно настроить минимум 2 Google-аккаунта
- [ ] Включить
pid_offset_enabledвantigravity.json - [ ] При запуске нескольких экземпляров OpenCode разные процессы приоритетно используют разные аккаунты
- [ ] Понимать, почему round-robin не требует смещения PID
- [ ] Использовать отладочные логи для просмотра процесса выбора аккаунтов
Частые проблемы
Проблема 1: Нет эффекта после включения
Симптом: Настроен pid_offset_enabled: true, но несколько процессов по-прежнему используют один и тот же аккаунт.
Причина: Возможно, стратегия выбора аккаунта — round-robin или hybrid, эти две стратегии не используют смещение PID.
Решение: Переключитесь на стратегию sticky или поймите, что текущая стратегия не требует смещения PID.
{
"account_selection_strategy": "sticky", // изменить на sticky
"pid_offset_enabled": true
}Проблема 2: Только 1 аккаунт
Симптом: После включения смещения PID все процессы по-прежнему используют аккаунт 0.
Причина: Смещение PID вычисляется через process.pid % accounts.length. При наличии только 1 аккаунта остаток от деления всегда будет 0.
Решение: Добавьте дополнительные аккаунты:
opencode auth login
# выберите (a)dd new account(s)Проблема 3: Не работает prompt cache
Симптом: После включения смещения PID обнаруживается, что prompt cache Anthropic больше не работает.
Причина: Смещение PID может привести к тому, что разные процессы или сессии используют разные аккаунты. Prompt cache разделяется по аккаунтам. После переключения аккаунта необходимо повторно отправлять промпты.
Решение: Это ожидаемое поведение. Если prompt cache имеет более высокий приоритет, отключите смещение PID и используйте стратегию sticky:
{
"pid_offset_enabled": false,
"account_selection_strategy": "sticky"
}Проблема 4: Конфликты нескольких агентов oh-my-opencode
Симптом: Даже при настройке нескольких аккаунтов несколько агентов oh-my-opencode по-прежнему часто сталкиваются с ошибками 429.
Причина: oh-my-opencode может запускать агентов последовательно. В течение короткого времени несколько агентов одновременно отправляют запросы к одному аккаунту.
Решение:
- Используйте стратегию
round-robin(рекомендуется):
{
"account_selection_strategy": "round-robin"
}- Или увеличьте количество аккаунтов, чтобы у каждого агента был независимый аккаунт:
# При наличии 3 агентов рекомендуется минимум 5 аккаунтов
opencode auth loginРезюме урока
Функция смещения PID оптимизирует распределение аккаунтов в сценариях с несколькими процессами через идентификатор процесса (PID):
- Принцип: Вычисление смещения через
process.pid % accounts.length - Функция: Позволяет разным процессам приоритетно выбирать разные аккаунты, избегая конфликтов
- Ограничение: Работает только со стратегией sticky, round-robin и hybrid не требуют
- Лучшая практика: Для сценариев с параллельными агентами рекомендуется стратегия round-robin без смещения PID
После настройки нескольких аккаунтов выбирайте подходящую стратегию в зависимости от вашего сценария использования:
| Сценарий | Рекомендуемая стратегия | Смещение PID |
|---|---|---|
| Одиночный процесс, приоритет prompt cache | sticky | Нет |
| Многопроцессность/параллельные агенты | round-robin | Нет |
| Стратегия hybrid + распределённый запуск | hybrid | Опционально |
Анонс следующего урока
В следующем уроке мы изучим Полное руководство по параметрам конфигурации.
Вы узнаете:
- Расположение и приоритет конфигурационных файлов
- Параметры конфигурации поведения моделей, ротации аккаунтов и поведения приложения
- Рекомендуемые схемы конфигурации для различных сценариев
- Методы расширенной настройки конфигурации
Приложение: Справочник по исходному коду
Нажмите, чтобы развернуть и посмотреть расположение исходного кода
Обновлено: 2026-01-23
| Функция | Путь к файлу | Строки |
|---|---|---|
| Реализация смещения PID | src/plugin/accounts.ts | 388-393 |
| Определение схемы конфигурации | src/plugin/config/schema.ts | 244-255 |
| Поддержка переменных окружения | src/plugin/config/loader.ts | 163-168 |
| Место передачи конфигурации | src/plugin.ts | 902 |
| Документация по использованию | docs/MULTI-ACCOUNT.md | 111-125 |
| Руководство по конфигурации | docs/CONFIGURATION.md | 69 |
Ключевые функции:
getCurrentOrNextForFamily(): Основная функция выбора аккаунтов, внутренняя обработка логики смещения PIDprocess.pid % this.accounts.length: Основная формула вычисления смещения
Ключевые константы:
sessionOffsetApplied[family]: Маркер применения смещения для каждого семейства моделей (применяется только один раз за сессию)