Skip to content

Оптимизация параллельных агентов: смещение 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 сама по себе осуществляет ротацию аккаунтов:

typescript
// При каждом запросе переключается на следующий аккаунт
this.cursor++;
const account = available[this.cursor % available.length];

Несколько процессов естественным образом распределяются по разным аккаунтам, дополнительное смещение PID не требуется.

Лучшие практики

Для сценариев с параллельными агентами рекомендуется следующая конфигурация:

json
{
  "account_selection_strategy": "round-robin",
  "pid_offset_enabled": false  // round-robin не требуется
}

Если необходимо использовать стратегии sticky или hybrid, включите смещение PID.

Практическое руководство

Шаг 1: Проверка конфигурации множественных аккаунтов

Зачем Для работы смещения PID требуется минимум 2 аккаунта. При наличии только 1 аккаунта, независимо от остатка от деления PID, будет использоваться этот единственный аккаунт.

Действие

Проверьте текущее количество аккаунтов:

bash
opencode auth list

Вы должны увидеть минимум 2 аккаунта:

2 account(s) saved:
  1. [email protected]
  2. [email protected]

Если только 1 аккаунт, добавьте дополнительные:

bash
opencode auth login

Следуйте подсказкам и выберите (a)dd new account(s).

Ожидаемый результат: Список аккаунтов показывает 2 или более аккаунтов.

Шаг 2: Конфигурация смещения PID

Зачем Включение функции смещения PID через конфигурационный файл позволяет плагину учитывать идентификатор процесса при выборе аккаунта.

Действие

Откройте конфигурационный файл OpenCode:

  • macOS/Linux: ~/.config/opencode/antigravity.json
  • Windows: %APPDATA%\opencode\antigravity.json

Добавьте или измените следующую конфигурацию:

json
{
  "pid_offset_enabled": true
}

Пример полной конфигурации (с совместным использованием стратегии sticky):

json
{
  "pid_offset_enabled": true,
  "account_selection_strategy": "sticky"
}

Способ через переменные окружения (опционально):

bash
export OPENCODE_ANTIGRAVITY_PID_OFFSET_ENABLED=1

Ожидаемый результат: В конфигурационном файле параметр pid_offset_enabled установлен в true.

Шаг 3: Проверка эффекта смещения PID

Зачем Через фактический запуск нескольких процессов проверить, активно ли смещение PID, и используют ли разные процессы приоритетно разные аккаунты.

Действие

Откройте два окна терминала и запустите OpenCode в каждом:

Терминал 1:

bash
opencode chat
# Отправьте запрос, запишите используемый аккаунт (посмотрите логи или toast)

Терминал 2:

bash
opencode chat
# Отправьте запрос, запишите используемый аккаунт

Наблюдайте за поведением выбора аккаунтов:

  • Ожидается: Два терминала приоритетно используют разные аккаунты
  • Проблема: Два терминала используют один и тот же аккаунт

Если проблема сохраняется, проверьте:

  1. Конфигурация загружается ли правильно
  2. Является ли стратегия выбора аккаунта sticky (round-robin не требует смещения PID)
  3. Есть ли только 1 аккаунт

Включите отладочные логи для просмотра подробного процесса выбора аккаунтов:

bash
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 является лучшим выбором.

Действие

Измените конфигурационный файл:

json
{
  "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.

json
{
  "account_selection_strategy": "sticky",  // изменить на sticky
  "pid_offset_enabled": true
}

Проблема 2: Только 1 аккаунт

Симптом: После включения смещения PID все процессы по-прежнему используют аккаунт 0.

Причина: Смещение PID вычисляется через process.pid % accounts.length. При наличии только 1 аккаунта остаток от деления всегда будет 0.

Решение: Добавьте дополнительные аккаунты:

bash
opencode auth login
# выберите (a)dd new account(s)

Проблема 3: Не работает prompt cache

Симптом: После включения смещения PID обнаруживается, что prompt cache Anthropic больше не работает.

Причина: Смещение PID может привести к тому, что разные процессы или сессии используют разные аккаунты. Prompt cache разделяется по аккаунтам. После переключения аккаунта необходимо повторно отправлять промпты.

Решение: Это ожидаемое поведение. Если prompt cache имеет более высокий приоритет, отключите смещение PID и используйте стратегию sticky:

json
{
  "pid_offset_enabled": false,
  "account_selection_strategy": "sticky"
}

Проблема 4: Конфликты нескольких агентов oh-my-opencode

Симптом: Даже при настройке нескольких аккаунтов несколько агентов oh-my-opencode по-прежнему часто сталкиваются с ошибками 429.

Причина: oh-my-opencode может запускать агентов последовательно. В течение короткого времени несколько агентов одновременно отправляют запросы к одному аккаунту.

Решение:

  1. Используйте стратегию round-robin (рекомендуется):
json
{
  "account_selection_strategy": "round-robin"
}
  1. Или увеличьте количество аккаунтов, чтобы у каждого агента был независимый аккаунт:
bash
# При наличии 3 агентов рекомендуется минимум 5 аккаунтов
opencode auth login

Резюме урока

Функция смещения PID оптимизирует распределение аккаунтов в сценариях с несколькими процессами через идентификатор процесса (PID):

  • Принцип: Вычисление смещения через process.pid % accounts.length
  • Функция: Позволяет разным процессам приоритетно выбирать разные аккаунты, избегая конфликтов
  • Ограничение: Работает только со стратегией sticky, round-robin и hybrid не требуют
  • Лучшая практика: Для сценариев с параллельными агентами рекомендуется стратегия round-robin без смещения PID

После настройки нескольких аккаунтов выбирайте подходящую стратегию в зависимости от вашего сценария использования:

СценарийРекомендуемая стратегияСмещение PID
Одиночный процесс, приоритет prompt cachestickyНет
Многопроцессность/параллельные агентыround-robinНет
Стратегия hybrid + распределённый запускhybridОпционально

Анонс следующего урока

В следующем уроке мы изучим Полное руководство по параметрам конфигурации.

Вы узнаете:

  • Расположение и приоритет конфигурационных файлов
  • Параметры конфигурации поведения моделей, ротации аккаунтов и поведения приложения
  • Рекомендуемые схемы конфигурации для различных сценариев
  • Методы расширенной настройки конфигурации

Приложение: Справочник по исходному коду

Нажмите, чтобы развернуть и посмотреть расположение исходного кода

Обновлено: 2026-01-23

ФункцияПуть к файлуСтроки
Реализация смещения PIDsrc/plugin/accounts.ts388-393
Определение схемы конфигурацииsrc/plugin/config/schema.ts244-255
Поддержка переменных окруженияsrc/plugin/config/loader.ts163-168
Место передачи конфигурацииsrc/plugin.ts902
Документация по использованиюdocs/MULTI-ACCOUNT.md111-125
Руководство по конфигурацииdocs/CONFIGURATION.md69

Ключевые функции:

  • getCurrentOrNextForFamily(): Основная функция выбора аккаунтов, внутренняя обработка логики смещения PID
  • process.pid % this.accounts.length: Основная формула вычисления смещения

Ключевые константы:

  • sessionOffsetApplied[family]: Маркер применения смещения для каждого семейства моделей (применяется только один раз за сессию)