Skip to content

Первый запрос: проверка успешной установки

Что вы сможете делать после изучения

  • Отправлять первый запрос к модели Antigravity
  • Понимать назначение параметров --model и --variant
  • Выбирать подходящую модель и конфигурацию размышлений в соответствии с задачей
  • Диагностировать распространенные ошибки при запросах к моделям

Ваша текущая ситуация

Вы только что установили плагин, завершили OAuth-аутентификацию, настроили определения моделей, но сейчас не уверены:

  • Будет ли плагин работать корректно?
  • Какую модель использовать для первого теста?
  • Как использовать параметр --variant?
  • Если запрос не выполнится, как определить, на каком этапе возникла проблема?

Когда использовать этот подход

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

  • После первой установки — подтвердите, что аутентификация, конфигурация и модели работают корректно
  • После добавления новой учетной записи — проверьте доступность нового аккаунта
  • После изменения конфигурации модели — убедитесь, что новая конфигурация корректна
  • Перед возникновением проблемы — установите базовый уровень для последующего сравнения

🎒 Подготовка перед началом

Предварительная проверка

Прежде чем продолжить, убедитесь:

  • ✅ Завершена быстрая установка
  • ✅ Выполнена команда opencode auth login для завершения OAuth-аутентификации
  • ✅ В файл ~/.config/opencode/opencode.json добавлены определения моделей
  • ✅ Терминал OpenCode или CLI доступен

Основная концепция

Зачем нужна предварительная проверка

Плагин включает взаимодействие нескольких компонентов:

  1. OAuth-аутентификация — получение токена доступа
  2. Управление учетными записями — выбор доступного аккаунта
  3. Преобразование запросов — конвертация формата OpenCode в формат Antigravity
  4. Потоковый ответ — обработка SSE-ответов и конвертация обратно в формат OpenCode

Отправка первого запроса позволяет проверить, весь ли путь работает корректно. Если успешно — все компоненты функционируют правильно; если нет — можно локализовать проблему по сообщению об ошибке.

Взаимосвязь Model и Variant

В плагине Antigravity модель и variant — это два независимых понятия:

КонцепцияНазначениеПример
Model (модель)Выбор конкретной ИИ-моделиantigravity-claude-sonnet-4-5-thinking
Variant (вариант)Конфигурация бюджета размышлений или режимаlow (облегченные размышления), max (максимальные размышления)

Что такое бюджет размышлений?

Бюджет размышлений (thinking budget) — это количество токенов, которое модель может использовать для "размышлений" перед генерацией ответа. Больший бюджет означает больше времени на рассуждения, но также увеличивает время ответа и стоимость.

  • Модели Claude Thinking: настраивается через thinkingConfig.thinkingBudget (единица: токен)
  • Модели Gemini 3: настраивается через thinkingLevel (строковый уровень: minimal/low/medium/high)

Рекомендуемые комбинации для начала

Рекомендуемые комбинации моделей и вариантов для различных потребностей:

ПотребностьМодельVariantОсобенности
Быстрое тестированиеantigravity-gemini-3-flashminimalСамый быстрый ответ, подходит для проверки
Повседневная разработкаantigravity-claude-sonnet-4-5-thinkinglowБаланс скорости и качества
Сложные рассужденияantigravity-claude-opus-4-5-thinkingmaxМаксимальные способности к рассуждениям
Задачи с визуальными даннымиantigravity-gemini-3-prohighПоддержка мультимодальности (изображения/PDF)

Следуйте инструкциям

Шаг 1: Отправьте простейший тестовый запрос

Сначала протестируйте базовое подключение с помощью простейшей команды.

Почему Этот запрос не использует функцию thinking, возвращается очень быстро, подходит для быстрой проверки аутентификации и состояния учетной записи.

Выполните команду

bash
opencode run "Hello" --model=google/antigravity-claude-sonnet-4-5

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

Hello! I'm Claude Sonnet 4.5, an AI assistant...

Признак успеха

Если вы видите ответ от ИИ, это означает:

  • ✅ OAuth-аутентификация успешна
  • ✅ Учетная запись имеет права доступа
  • ✅ Преобразование запросов работает корректно
  • ✅ Потоковый ответ правильно разобран

Шаг 2: Используйте модель Thinking и Variant

Теперь протестируйте полный процесс размышлений, включая параметр variant.

Почему Модели Thinking требуют дополнительной логики преобразования запросов, что является одной из ключевых функций плагина.

Выполните команду

bash
opencode run "Объясните, что такое замыкание, с помощью простой аналогии" --model=google/antigravity-claude-sonnet-4-5-thinking --variant=max

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

  1. Потоковый вывод размышлений: Вы увидите, как модель сначала выводит процесс размышлений (с тегом <thinking>)
  2. Процесс размышлений: Модель подробно проанализирует, как организовать ответ
  3. Финальный ответ: После завершения размышлений выводится финальное содержание
Посмотреть полный пример ответа
<thinking>
Пользователь спрашивает, что такое замыкание, и нужно объяснить это с помощью простой аналогии.

Концепция замыкания:
1. Функция может получить доступ к переменным из внешней области видимости
2. Даже если внешняя функция уже выполнена
3. Эта способность похожа на "рюкзак"

Идея аналогии:
- Можно использовать аналогию с "рюкзаком"
- Функция возвращается, захватив некоторые переменные
- Как будто на выходе из дома в рюкзак положили вещи из дома
</thinking>

Замыкание — это как "рюкзак" функции.

Когда функция создается, она "упаковывает" переменные из внешней области, к которым имеет доступ, как будто перед выходом из дома кладет нужные вещи в рюкзак. Даже если функция покинула место своего создания (внешняя функция выполнена), она все равно может получить доступ к этим переменным через свой "рюкзак".

Например:
```javascript
function createCounter() {
  let count = 0;  // эта переменная попадает в "рюкзак"
  return function() {
    count++;  // все еще можно получить доступ к переменной из рюкзака
    return count;
  };
}

Контрольная точка ✅

  • [ ] Увидели блок <thinking> (если настроено keep_thinking: true)
  • [ ] Содержание ответа разумно и логично
  • [ ] Время ответа в приемлемых пределах (обычно 2-10 секунд)

Шаг 3: Протестируйте модель Gemini 3

Протестируйте различные уровни размышлений модели Gemini 3 Pro.

Почему Gemini 3 использует строковый thinkingLevel, что позволяет проверить поддержку разных семейств моделей.

Выполните команду

bash
# Тестирование Gemini 3 Flash (быстрый ответ)
opencode run "Напишите пузырьковую сортировку" --model=google/antigravity-gemini-3-flash --variant=low

# Тестирование Gemini 3 Pro (глубокое размышление)
opencode run "Проанализируйте временную сложность пузырьковой сортировки" --model=google/antigravity-gemini-3-pro --variant=high

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

  • Модель Flash отвечает быстрее (подходит для простых задач)
  • Модель Pro размышляет глубже (подходит для сложного анализа)
  • Обе модели работают корректно

Шаг 4: Протестируйте мультимодальные возможности (опционально)

Если ваша конфигурация модели поддерживает ввод изображений, вы можете протестировать мультимодальную функцию.

Почему Antigravity поддерживает ввод изображений/PDF, что необходимо для многих сценариев использования.

Подготовьте тестовое изображение: любой файл изображения (например, test.png)

Выполните команду

bash
opencode run "Опишите содержание этого изображения" --model=google/antigravity-gemini-3-pro --image=test.png

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

  • Модель точно описывает содержание изображения
  • Ответ включает результаты визуального анализа

Контрольная точка ✅

После выполнения всех тестов подтвердите следующий список:

Проверяемый пунктОжидаемый результатСтатус
Базовое подключениеШаг 1: простой запрос выполнен успешно
Модель ThinkingШаг 2: процесс размышлений отображен
Модель Gemini 3Шаг 3: обе модели работают корректно
Параметр VariantРазные variant дают разные результаты
Потоковый выводОтвет отображается в реальном времени без прерываний

Все проверки пройдены?

Если все проверяемые пункты успешно пройдены, поздравляем! Плагин полностью настроен и готов к использованию.

Следующие шаги:

Подсказки по устранению проблем

Ошибка 1: Model not found

Сообщение об ошибке

Error: Model 'antigravity-claude-sonnet-4-5' not found

Причина Определение модели не было корректно добавлено в provider.google.models в файле opencode.json.

Решение

Проверьте файл конфигурации:

bash
cat ~/.config/opencode/opencode.json | grep -A 10 "models"

Подтвердите, что формат определения модели корректен:

json
{
  "provider": {
    "google": {
      "models": {
        "antigravity-claude-sonnet-4-5": {
          "name": "Claude Sonnet 4.5 (Antigravity)",
          "limit": { "context": 200000, "output": 64000 },
          "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] }
        }
      }
    }
  }
}

Обратите внимание на орфографию

Имя модели должно полностью совпадать с ключом в файле конфигурации (с учетом регистра):

  • ❌ Неправильно: --model=google/claude-sonnet-4-5
  • ✅ Правильно: --model=google/antigravity-claude-sonnet-4-5

Ошибка 2: 403 Permission Denied

Сообщение об ошибке

403 Permission denied on resource '//cloudaicompanion.googleapis.com/...'

Причина

  1. OAuth-аутентификация не завершена
  2. Учетная запись не имеет прав доступа
  3. Проблема с настройкой Project ID (для моделей Gemini CLI)

Решение

  1. Проверьте статус аутентификации:

    bash
    cat ~/.config/opencode/antigravity-accounts.json

    Вы должны увидеть хотя бы одну запись об учетной записи.

  2. Если учетная запись пуста или аутентификация не удалась:

    bash
    rm ~/.config/opencode/antigravity-accounts.json
    opencode auth login
  3. Если ошибка возникает с моделью Gemini CLI: Необходимо вручную настроить Project ID (подробнее см. FAQ - 403 Permission Denied)

Ошибка 3: Invalid variant 'max'

Сообщение об ошибке

Error: Invalid variant 'max' for model 'antigravity-gemini-3-pro'

Причина Разные модели поддерживают разные форматы конфигурации variant.

Решение

Проверьте определение variant в конфигурации модели:

Тип моделиФормат variantПример значения
Claude ThinkingthinkingConfig.thinkingBudget{ "thinkingConfig": { "thinkingBudget": 32768 } }
Gemini 3thinkingLevel{ "thinkingLevel": "high" }
Gemini 2.5thinkingConfig.thinkingBudget{ "thinkingConfig": { "thinkingBudget": 8192 } }

Пример правильной конфигурации:

json
{
  "antigravity-claude-sonnet-4-5-thinking": {
    "name": "Claude Sonnet 4.5 Thinking",
    "variants": {
      "low": { "thinkingConfig": { "thinkingBudget": 8192 } },
      "max": { "thinkingConfig": { "thinkingBudget": 32768 } }
    }
  },
  "antigravity-gemini-3-pro": {
    "name": "Gemini 3 Pro",
    "variants": {
      "low": { "thinkingLevel": "low" },
      "high": { "thinkingLevel": "high" }
    }
  }
}

Ошибка 4: Таймаут запроса или отсутствие ответа

Симптомы Команда выполняется долго без вывода или в итоге завершается по таймауту.

Возможные причины

  1. Проблемы с сетевым подключением
  2. Медленный ответ сервера
  3. Все учетные записи находятся в состоянии ограничения скорости

Решение

  1. Проверьте сетевое подключение:

    bash
    ping cloudaicompanion.googleapis.com
  2. Просмотрите логи отладки:

    bash
    OPENCODE_ANTIGRAVITY_DEBUG=1 opencode run "test" --model=google/antigravity-claude-sonnet-4-5
  3. Проверьте статус учетных записей:

    bash
    cat ~/.config/opencode/antigravity-accounts.json

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

Ошибка 5: Прерывание SSE-потокового вывода

Симптомы Ответ прерывается на середине или отображается только часть содержания.

Возможные причины

  1. Нестабильная сеть
  2. Токен учетной записи истекает в процессе запроса
  3. Ошибка сервера

Решение

  1. Включите логи отладки для просмотра подробной информации:

    bash
    OPENCODE_ANTIGRAVITY_DEBUG=2 opencode run "test"
  2. Проверьте файлы логов:

    bash
    tail -f ~/.config/opencode/antigravity-logs/latest.log
  3. Если прерывания происходят часто:

    • Попробуйте переключиться на более стабильную сетевую среду
    • Используйте модель без Thinking для сокращения времени запроса
    • Проверьте, не приближается ли учетная запись к лимиту квоты

Резюме урока

Отправка первого запроса — это ключевой шаг для проверки успешной установки. В этом уроке вы научились:

  • Базовый запрос: использование opencode run --model для отправки запросов
  • Использование Variant: конфигурация бюджета размышлений через --variant
  • Выбор модели: выбор моделей Claude или Gemini в соответствии с потребностями
  • Диагностика проблем: локализация и решение проблем на основе сообщений об ошибках

Рекомендуемая практика

В повседневной разработке:

  1. Сначала простой тест: после каждого изменения конфигурации сначала отправьте простой запрос для проверки
  2. Постепенно увеличивайте сложность: от отсутствия thinking → low thinking → max thinking
  3. Записывайте базовое время ответа: запомните время ответа в нормальных условиях для последующего сравнения
  4. Используйте логи отладки: при возникновении проблем включите OPENCODE_ANTIGRAVITY_DEBUG=2

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

В следующем уроке мы изучим Обзор доступных моделей.

Вы узнаете:

  • Полный список доступных моделей и их особенности
  • Руководство по выбору моделей Claude и Gemini
  • Сравнение ограничений контекста и вывода
  • Лучшие сценарии использования моделей Thinking

Приложение: Ссылки на исходный код

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

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

ФункцияПуть к файлуНомер строки
Точка входа преобразования запросовsrc/plugin/request.ts1-100
Выбор учетной записи и управление токенамиsrc/plugin/accounts.ts1-50
Преобразование модели Claudesrc/plugin/transform/claude.tsполный текст
Преобразование модели Geminisrc/plugin/transform/gemini.tsполный текст
Обработка потоковых ответовsrc/plugin/core/streaming/index.tsполный текст
Система логов отладкиsrc/plugin/debug.tsполный текст

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

  • prepareAntigravityRequest(): преобразование запроса OpenCode в формат Antigravity (request.ts)
  • createStreamingTransformer(): создание преобразователя потоковых ответов (core/streaming/)
  • resolveModelWithVariant(): разбор конфигурации модели и variant (transform/model-resolver.ts)
  • getCurrentOrNextForFamily(): выбор учетной записи для запроса (accounts.ts)

Примеры конфигурации: