Стратегии выбора аккаунтов: лучшие практики sticky, round-robin, hybrid
Что вы сможете делать после изучения
В зависимости от количества ваших Google-аккаунтов и сценария использования, выбирайте и настраивайте подходящую стратегию выбора аккаунтов:
- 1 аккаунт → используйте стратегию
stickyдля сохранения кэша промптов - 2-3 аккаунта → используйте стратегию
hybridдля интеллектуального распределения запросов - 4+ аккаунтов → используйте стратегию
round-robinдля максимальной пропускной способности
Избегайте неловкой ситуации, когда «все аккаунты ограничены по скорости, но фактическая квота не использована».
Ваша текущая дилемма
У вас настроено несколько Google-аккаунтов, но:
- вы не уверены, какую стратегию использовать для максимизации использования квоты
- часто сталкиваетесь с тем, что все аккаунты ограничены по скорости, но квота какого-то аккаунта ещё не израсходована
- в сценариях с параллельными агентами несколько дочерних процессов всегда используют один и тот же аккаунт, что приводит к ограничениям скорости
Основная концепция
Что такое стратегия выбора аккаунта
Плагин Antigravity Auth поддерживает три стратегии выбора аккаунта, определяющих, как распределять запросы к моделям между несколькими Google-аккаунтами:
| Стратегия | Поведение | Применимые сценарии |
|---|---|---|
sticky | Пока текущий аккаунт не ограничен по скорости, продолжайте использовать его | Один аккаунт, необходимость кэширования промптов |
round-robin | При каждом запросе переключайтесь на следующий доступный аккаунт | Несколько аккаунтов, максимизация пропускной способности |
hybrid (по умолчанию) | Комбинированный интеллектуальный выбор на основе здоровья + Token bucket + LRU | 2-3 аккаунта, баланс между производительностью и стабильностью |
Зачем нужны стратегии?
Google устанавливает ограничения скорости для каждого аккаунта. Если использовать только один аккаунт, частые запросы легко приведут к ограничениям. Несколько аккаунтов могут распределять запросы через ротацию или интеллектуальный выбор, избегая чрезмерного потребления квоты одного аккаунта.
Как работают три стратегии
1. Стратегия Sticky (липкая)
Основная логика: сохраняйте текущий аккаунт, пока он не будет ограничен по скорости, только тогда переключайтесь.
Преимущества:
- Сохраняет кэш промптов, одинаковые контексты отвечают быстрее
- Стабильный шаблон использования аккаунта, меньше вероятность срабатывания системы контроля рисков
Недостатки:
- Неравномерное использование квоты нескольких аккаунтов
- До восстановления после ограничения скорости невозможно использовать другие аккаунты
Применимые сценарии:
- Только один аккаунт
- Важность кэширования промптов (например, долгие диалоги)
2. Стратегия Round-Robin (циклическая)
Основная логика: при каждом запросе переключайтесь на следующий доступный аккаунт, используя циклически.
Преимущества:
- Наиболее сбалансированное использование квоты
- Максимизация параллельной пропускной способности
- Подходит для сценариев с высокой конкуренцией
Недостатки:
- Не учитывает состояние здоровья аккаунта, может выбрать аккаунт, только что восстановившийся после ограничения скорости
- Невозможно использовать кэширование промптов
Применимые сценарии:
- 4 или более аккаунтов
- Пакетные задачи, требующие максимальной пропускной способности
- Сценарии параллельных агентов (в сочетании с
pid_offset_enabled)
3. Стратегия Hybrid (гибридная, по умолчанию)
Основная логика: комплексно учитывать три фактора, выбирая оптимальный аккаунт:
Формула оценки:
Общий балл = здоровье × 2 + токены × 5 + свежесть × 0,1Балл здоровья (0-200): основан на истории успехов/неудач аккаунта
- Успешный запрос: +1 балл
- Ограничение скорости: -10 баллов
- Другие ошибки (аутентификация, сеть): -20 баллов
- Начальное значение: 70 баллов, минимум 0, максимум 100 баллов
- Восстановление 2 балла в час (даже без использования)
Балл токенов (0-500): основан на алгоритме Token bucket
- Максимум 50 токенов на аккаунт, начальное значение 50 токенов
- Восстановление 6 токенов в минуту
- Каждый запрос потребляет 1 токен
- Балл токенов = (текущие токены / 50) × 100 × 5
Балл свежести (0-360): основан на времени с момента последнего использования
- Чем дольше с момента последнего использования, тем выше балл
- Максимум достигается через 3600 секунд (1 час)
Преимущества:
- Интеллектуальный обход аккаунтов с низким здоровьем
- Token bucket предотвращает ограничения скорости, вызванные плотными запросами
- LRU (приоритет наиболее давно не использовавшихся) даёт аккаунтам достаточно времени для отдыха
- Комплексный учёт производительности и стабильности
Недостатки:
- Алгоритм сложный, не такой интуитивно понятный, как round-robin
- При 2 аккаунтах эффект не очень заметен
Применимые сценарии:
- 2-3 аккаунта (стратегия по умолчанию)
- Необходимость баланса между использованием квоты и стабильностью
Таблица быстрого выбора стратегии
В соответствии с рекомендациями из README и CONFIGURATION.md:
| Ваша настройка | Рекомендуемая стратегия | Причина |
|---|---|---|
| 1 аккаунт | sticky | Ротация не требуется, сохраняется кэш промптов |
| 2-3 аккаунта | hybrid (по умолчанию) | Интеллектуальная ротация, избегает чрезмерных ограничений скорости |
| 4+ аккаунтов | round-robin | Максимизация пропускной способности, наиболее сбалансированное использование квоты |
| Параллельные агенты | round-robin + pid_offset_enabled: true | Разные процессы используют разные аккаунты |
🎒 Подготовка к началу
Предварительная проверка
Убедитесь, что вы выполнили:
- [x] Настройку нескольких аккаунтов (минимум 2 Google-аккаунта)
- [x] Понимание двойной системы квот
Следуйте за мной
Шаг 1: Проверьте текущую конфигурацию
Почему Сначала узнайте текущее состояние конфигурации, чтобы избежать повторных изменений.
Действие
Проверьте файл конфигурации вашего плагина:
cat ~/.config/opencode/antigravity.jsonВы должны увидеть:
{
"$schema": "https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/main/assets/antigravity.schema.json"
}Если файл не существует, плагин использует конфигурацию по умолчанию (account_selection_strategy = "hybrid").
Шаг 2: Настройте стратегию в зависимости от количества аккаунтов
Почему Разное количество аккаунтов требует разных стратегий. Выбор неправильной стратегии может привести к потере квоты или частым ограничениям скорости.
cat > ~/.config/opencode/antigravity.json << 'EOF'
{
"$schema": "https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/main/assets/antigravity.schema.json",
"account_selection_strategy": "sticky"
}
EOFcat > ~/.config/opencode/antigravity.json << 'EOF'
{
"$schema": "https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/main/assets/antigravity.schema.json",
"account_selection_strategy": "hybrid"
}
EOFcat > ~/.config/opencode/antigravity.json << 'EOF'
{
"$schema": "https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/main/assets/antigravity.schema.json",
"account_selection_strategy": "round-robin"
}
EOFВы должны увидеть: файл конфигурации обновлён до соответствующей стратегии.
Шаг 3: Включите смещение PID (для сценариев с параллельными агентами)
Почему Если вы используете плагины типа oh-my-opencode для генерации параллельных агентов, несколько дочерних процессов могут одновременно отправлять запросы. По умолчанию они начинают выбор аккаунтов с одной и той же стартовой точки, что приводит к конкуренции за аккаунты и ограничениям скорости.
Действие
Измените конфигурацию, добавив смещение PID:
cat > ~/.config/opencode/antigravity.json << 'EOF'
{
"$schema": "https://raw.githubusercontent.com/NoeFabris/opencode-antigravity-auth/main/assets/antigravity.schema.json",
"account_selection_strategy": "round-robin",
"pid_offset_enabled": true
}
EOFВы должны увидеть: параметр pid_offset_enabled установлен в true.
Принцип работы:
- Каждый процесс рассчитывает смещение на основе своего PID (идентификатора процесса)
- Смещение =
PID % количество_аккаунтов - Разные процессы будут предпочитать разные стартовые аккаунты
- Пример: при 3 аккаунтах процессы с PID 100, 101, 102 используют аккаунты 1, 2, 0 соответственно
Шаг 4: Проверьте, что стратегия применяется
Почему Убедитесь, что конфигурация корректна и стратегия работает как ожидается.
Действие
Отправьте несколько параллельных запросов и наблюдайте за переключением аккаунтов:
# Включите отладочное логирование
export OPENCODE_ANTIGRAVITY_DEBUG=1
# Отправьте 5 запросов
for i in {1..5}; do
opencode run "Test $i" --model=google/antigravity-gemini-3-pro &
done
waitВы должны увидеть:
- В логах отображается, что разные запросы используют разные аккаунты
- Событие
account-switchфиксирует переключение аккаунтов
Пример лога (стратегия round-robin):
[DEBUG] Selected account: [email protected] (index: 0) - reason: rotation
[DEBUG] Selected account: [email protected] (index: 1) - reason: rotation
[DEBUG] Selected account: [email protected] (index: 2) - reason: rotation
[DEBUG] Selected account: [email protected] (index: 0) - reason: rotation
[DEBUG] Selected account: [email protected] (index: 1) - reason: rotationШаг 5: Мониторинг состояния здоровья аккаунтов (стратегия Hybrid)
Почему Стратегия Hybrid выбирает аккаунты на основе оценки здоровья. Понимание состояния здоровья помогает судить о разумности конфигурации.
Действие
Просмотрите оценки здоровья в отладочных логах:
export OPENCODE_ANTIGRAVITY_DEBUG=2 opencode run "Hello" --model=google/antigravity-gemini-3-proВы должны увидеть:
[VERBOSE] Health scores: {
"0": { "score": 85, "consecutiveFailures": 0 },
"1": { "score": 60, "consecutiveFailures": 2 },
"2": { "score": 70, "consecutiveFailures": 0 }
}
[DEBUG] Selected account: [email protected] (index: 0) - hybrid score: 270.2Интерпретация:
- Аккаунт 0: оценка здоровья 85 (отлично)
- Аккаунт 1: оценка здоровья 60 (доступен, но 2 последовательных сбоя)
- Аккаунт 2: оценка здоровья 70 (хорошо)
- В итоге выбран аккаунт 0, комплексная оценка 270.2
Контрольная точка ✅
Как проверить, что конфигурация работает?
- Просмотрите файл конфигурации, чтобы подтвердить значение
account_selection_strategy - Отправьте несколько запросов и наблюдайте за поведением переключения аккаунтов в логах
- Стратегия Hybrid: аккаунты с низкой оценкой здоровья должны выбираться реже
- Стратегия Round-robin: аккаунты должны использоваться циклически без явных предпочтений
Предупреждения о подводных камнях
❌ Несоответствие количества аккаунтов и стратегии
Неправильное поведение:
- Использование round-robin при наличии всего 2 аккаунтов, что приводит к частым переключениям
- Использование sticky при наличии 5 аккаунтов, что приводит к неравномерному использованию квоты
Правильный подход: выбирайте стратегию в соответствии с таблицей быстрого выбора.
❌ Параллельные агенты без включенного смещения PID
Неправильное поведение:
- Несколько параллельных агентов одновременно используют один и тот же аккаунт
- Это приводит к быстрому ограничению скорости аккаунта
Правильный подход: установите pid_offset_enabled: true.
❌ Игнорирование оценки здоровья (стратегия Hybrid)
Неправильное поведение:
- Какой-то аккаунт часто ограничивается по скорости, но всё ещё используется с высокой частотой
- Не используется оценка здоровья для обхода проблемных аккаунтов
Правильный подход: регулярно проверяйте оценки здоровья в отладочных логах. При аномалиях (например, количество последовательных сбоев у какого-то аккаунта > 5) рассмотрите возможность удаления этого аккаунта или переключения стратегии.
❌ Смешивание двойной системы квот и стратегии с одной квотой
Неправильное поведение:
- Модели Gemini используют суффикс
:antigravityдля принудительного использования пула квот Antigravity - При этом настроено
quota_fallback: false - Это приводит к тому, что после исчерпания какого-то пула квот невозможен fallback на другой пул
Правильный подход: поймите двойную систему квот и настройте quota_fallback в соответствии с вашими потребностями.
Резюме урока
| Стратегия | Ключевая особенность | Применимые сценарии |
|---|---|---|
sticky | Сохранение аккаунта до ограничения скорости | 1 аккаунт, необходимость кэширования промптов |
round-robin | Циклическая ротация аккаунтов | 4+ аккаунтов, максимизация пропускной способности |
hybrid | Интеллектуальный выбор на основе здоровья + токены + LRU | 2-3 аккаунта, баланс между производительностью и стабильностью |
Ключевые настройки:
account_selection_strategy: установка стратегии (sticky/round-robin/hybrid)pid_offset_enabled: включение для сценариев с параллельными агентами (true)quota_fallback: fallback для двойного пула квот Gemini (true/false)
Методы проверки:
- Включение отладочного логирования:
OPENCODE_ANTIGRAVITY_DEBUG=1 - Просмотр логов переключения аккаунтов и оценок здоровья
- Наблюдение за индексами аккаунтов, используемых в разных запросах
Анонс следующего урока
В следующем уроке мы изучим обработку ограничений скорости.
Вы узнаете:
- Как понимать различные типы ошибок 429 (исчерпание квоты, ограничение скорости, исчерпание ёмкости)
- Как работают автоматические повторные попытки и алгоритмы отката
- Когда переключаться на другой аккаунт, а когда ждать сброса
Приложение: справочник по исходному коду
Нажмите, чтобы развернуть и просмотреть расположение исходного кода
Время обновления: 2026-01-23
| Функция | Путь к файлу | Номера строк |
|---|---|---|
| Вход стратегии выбора аккаунтов | src/plugin/accounts.ts | 340-412 |
| Реализация стратегии Sticky | src/plugin/accounts.ts | 395-411 |
| Реализация стратегии Hybrid | src/plugin/accounts.ts | 358-383 |
| Система оценки здоровья | src/plugin/rotation.ts | 14-163 |
| Система Token bucket | src/plugin/rotation.ts | 290-402 |
| Алгоритм выбора LRU | src/plugin/rotation.ts | 215-288 |
| Логика смещения PID | src/plugin/accounts.ts | 387-393 |
| Схема конфигурации | src/plugin/config/schema.ts | см. файл |
Ключевые константы:
DEFAULT_HEALTH_SCORE_CONFIG.initial = 70: начальная оценка здоровья нового аккаунтаDEFAULT_HEALTH_SCORE_CONFIG.minUsable = 50: минимальная оценка здоровья пригодного аккаунтаDEFAULT_TOKEN_BUCKET_CONFIG.maxTokens = 50: максимальное количество токенов на аккаунтDEFAULT_TOKEN_BUCKET_CONFIG.regenerationRatePerMinute = 6: количество восстанавливаемых токенов в минуту
Ключевые функции:
getCurrentOrNextForFamily(): выбор аккаунта в соответствии со стратегиейselectHybridAccount(): алгоритм выбора оценок стратегии HybridgetScore(): получение оценки здоровья аккаунта (включая временное восстановление)hasTokens()/consume(): проверка и потребление Token bucketsortByLruWithHealth(): сортировка по LRU + оценка здоровья