Skip to content

Спецификация API Antigravity

⚠️ Важное примечание: Это внутренняя спецификация API Antigravity, а не публичная документация. Данный учебник основан на проверке прямых тестов API и предназначен для разработчиков, которым необходимо глубоко понимать детали API.

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


Чему вы научитесь

  • Понимать принцип работы унифицированного API шлюза Antigravity
  • Освоить форматы запросов/ответов и ограничения JSON Schema
  • Узнать, как настроить модели Thinking и вызов функций
  • Понять механизмы ограничения скорости и обработки ошибок
  • Уметь отлаживать проблемы с вызовами API

Обзор API Antigravity

Antigravity — это унифицированный шлюзовой API Google, который через интерфейс в стиле Gemini предоставляет доступ к нескольким моделям искусственного интеллекта, включая Claude и Gemini, обеспечивая единый формат и унифицированную структуру ответов.

Отличие от Vertex AI

Antigravity не является прямым API модели Vertex AI. Это внутренний шлюз, предоставляющий:

  • Единый формат API (все модели в стиле Gemini)
  • Доступ на уровне проекта (через аутентификацию Google Cloud)
  • Внутреннюю маршрутизацию к бэкендам моделей (Vertex AI для Claude, Gemini API для Gemini)
  • Унифицированный формат ответов (структура candidates[])

Ключевые особенности:

ОсобенностьОписание
Единый формат APIВсе модели используют массив contents в стиле Gemini
Доступ на уровне проектаТребуется действующий идентификатор проекта Google Cloud
Внутренняя маршрутизацияАвтоматическая маршрутизация к правильному бэкенду (Vertex AI или Gemini API)
Унифицированные ответыВсе модели возвращают структуру candidates[]
Поддержка ThinkingClaude и Gemini 3 поддерживают расширенные рассуждения

Конечные точки и пути

Среды API

СредаURLСтатусНазначение
Daily (Sandbox)https://daily-cloudcode-pa.sandbox.googleapis.com✅ АктивенОсновная конечная точка (как в CLIProxy)
Productionhttps://cloudcode-pa.googleapis.com✅ АктивенМодели Gemini CLI, loadCodeAssist
Autopush (Sandbox)https://autopush-cloudcode-pa.sandbox.googleapis.com❌ НедоступенУстарел

Расположение исходного кода: src/constants.ts:32-43

Пути API

ДействиеПутьОписание
Генерация контента/v1internal:generateContentНепотоковый запрос
Потоковая генерация/v1internal:streamGenerateContent?alt=sseПотоковый запрос (SSE)
Загрузка помощника по коду/v1internal:loadCodeAssistОбнаружение проекта (автоматическое получение Project ID)
Онбординг пользователя/v1internal:onboardUserОнбординг пользователя (обычно не используется)

Методы аутентификации

Поток OAuth 2.0

URL авторизации: https://accounts.google.com/o/oauth2/auth
URL токена: https://oauth2.googleapis.com/token

Обязательные Scopes

http
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/cclog
https://www.googleapis.com/auth/experimentsandconfigs

Расположение исходного кода: src/constants.ts:14-20

Обязательные Headers

Конечные точки Antigravity (по умолчанию)

http
Authorization: Bearer {access_token}
Content-Type: application/json
User-Agent: antigravity/1.11.5 windows/amd64
X-Goog-Api-Client: google-cloud-sdk vscode_cloudshelleditor/0.1
Client-Metadata: {"ideType":"IDE_UNSPECIFIED","platform":"PLATFORM_UNSPECIFIED","pluginType":"GEMINI"}

Конечные точки Gemini CLI (модели без суффикса :antigravity)

http
Authorization: Bearer {access_token}
Content-Type: application/json
User-Agent: google-api-nodejs-client/9.15.1
X-Goog-Api-Client: gl-node/22.17.0
Client-Metadata: ideType=IDE_UNSPECIFIED,platform=PLATFORM_UNSPECIFIED,pluginType=GEMINI

Дополнительный Header для потоковых запросов

http
Accept: text/event-stream

Расположение исходного кода: src/constants.ts:73-83


Формат запроса

Базовая структура

json
{
  "project": "{project_id}",
  "model": "{model_id}",
  "request": {
    "contents": [...],
    "generationConfig": {...},
    "systemInstruction": {...},
    "tools": [...]
  },
  "userAgent": "antigravity",
  "requestId": "{unique_id}"
}

Массив Contents (обязательно)

Важное ограничение

Должен использоваться формат в стиле Gemini. Массив messages в стиле Anthropic не поддерживается.

Правильный формат:

json
{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Your message here" }
      ]
    },
    {
      "role": "model",
      "parts": [
        { "text": "Assistant response" }
      ]
    }
  ]
}

Значения Role:

  • user - сообщение пользователя/человека
  • model - ответ модели (не assistant)

Generation Config

json
{
  "generationConfig": {
    "maxOutputTokens": 1000,
    "temperature": 0.7,
    "topP": 0.95,
    "topK": 40,
    "stopSequences": ["STOP"],
    "thinkingConfig": {
      "thinkingBudget": 8000,
      "includeThoughts": true
    }
  }
}
ПолеТипОписание
maxOutputTokensnumberМаксимальное количество токенов в ответе
temperaturenumberСлучайность (0.0 - 2.0)
topPnumberПорог nucleus sampling
topKnumbertop-K sampling
stopSequencesstring[]Триггеры остановки генерации
thinkingConfigobjectКонфигурация расширенного рассуждения (Thinking модели)

System Instructions

Ограничение формата

System Instruction должен быть объектом, содержащим parts, не может быть простой строкой.

json
// ✅ Правильно
{
  "systemInstruction": {
    "parts": [
      { "text": "You are a helpful assistant." }
    ]
  }
}

// ❌ Неправильно - вернет ошибку 400
{
  "systemInstruction": "You are a helpful assistant."
}

Tools / Function Calling

json
{
  "tools": [
    {
      "functionDeclarations": [
        {
          "name": "get_weather",
          "description": "Get weather for a location",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "City name"
              }
            },
            "required": ["location"]
          }
        }
      ]
    }
  ]
}

Правила именования Function

ПравилоОписание
Первый символДолжен быть буквой (a-z, A-Z) или подчеркиванием (_)
Допустимые символыa-zA-Z0-9, подчеркивание (_), точка (.), двоеточие (😃, дефис (-)
Максимальная длина64 символа
НедопустимоСлэш (/), пробелы, другие специальные символы

Примеры:

  • get_weather - допустимо
  • mcp:mongodb.query - допустимо (допускается двоеточие и точка)
  • read-file - допустимо (допускается дефис)
  • mcp/query - недопустимо (не допускается слэш)
  • 123_tool - недопустимо (должно начинаться с буквы или подчеркивания)

Поддержка JSON Schema

Поддерживаемые функции

ФункцияСтатусОписание
type✅ Поддерживаетсяobject, string, number, integer, boolean, array
properties✅ ПоддерживаетсяСвойства объекта
required✅ ПоддерживаетсяМассив обязательных полей
description✅ ПоддерживаетсяОписание поля
enum✅ ПоддерживаетсяПеречисляемые значения
items✅ ПоддерживаетсяSchema элементов массива
anyOf✅ ПоддерживаетсяВнутренне преобразуется в any_of
allOf✅ ПоддерживаетсяВнутренне преобразуется в all_of
oneOf✅ ПоддерживаетсяВнутренне преобразуется в one_of
additionalProperties✅ ПоддерживаетсяSchema дополнительных свойств

Неподдерживаемые функции (вызывают ошибку 400)

Следующие поля вызовут ошибку 400

  • const - используйте enum: [value] вместо этого
  • $ref - определяйте schema встроенно
  • $defs / definitions - определяйте встроенно
  • $schema - удалите эти метаданные
  • $id - удалите эти метаданные
  • default - удалите эти документационные поля
  • examples - удалите эти документационные поля
  • title (вложенный) - ⚠️ может вызвать проблемы во вложенных объектах
json
// ❌ Неправильно - вернет ошибку 400
{ "type": { "const": "email" } }

// ✅ Правильно - используйте enum вместо const
{ "type": { "enum": ["email"] } }

Автоматическая обработка плагином: Плагин автоматически обрабатывает эти преобразования через функцию cleanJSONSchemaForAntigravity() в request-helpers.ts.


Формат ответа

Непотоковый ответ

json
{
  "response": {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            { "text": "Response text here" }
          ]
        },
        "finishReason": "STOP"
      }
    ],
    "usageMetadata": {
      "promptTokenCount": 16,
      "candidatesTokenCount": 4,
      "totalTokenCount": 20
    },
    "modelVersion": "claude-sonnet-4-5",
    "responseId": "msg_vrtx_..."
  },
  "traceId": "abc123..."
}

Потоковый ответ (SSE)

Content-Type: text/event-stream

data: {"response": {"candidates": [{"content": {"role": "model", "parts": [{"text": "Hello"}]}}], "usageMetadata": {...}, "modelVersion": "...", "responseId": "..."}, "traceId": "..."}

data: {"response": {"candidates": [{"content": {"role": "model", "parts": [{"text": " world"]}, "finishReason": "STOP"}], "usageMetadata": {...}}, "traceId": "..."}

Описание полей ответа

ПолеОписание
response.candidatesМассив кандидатов ответа
response.candidates[].content.roleВсегда "model"
response.candidates[].content.partsМассив частей контента
response.candidates[].finishReasonSTOP, MAX_TOKENS, OTHER
response.usageMetadata.promptTokenCountКоличество входных токенов
response.usageMetadata.candidatesTokenCountКоличество выходных токенов
response.usageMetadata.totalTokenCountОбщее количество токенов
response.usageMetadata.thoughtsTokenCountКоличество токенов Thinking (Gemini)
response.modelVersionФактически используемая модель
response.responseIdID запроса (формат зависит от модели)
traceIdID трассировки для отладки

Формат Response ID

Тип моделиФорматПример
Claudemsg_vrtx_...msg_vrtx_01UDKZG8PWPj9mjajje8d7u7
GeminiСтиль Base64ypM9abPqFKWl0-kPvamgqQw
GPT-OSSСтиль Base64y5M9aZaSKq6z2roPoJ7pEA

Ответ Function Call

Когда модель хочет вызвать функцию:

json
{
  "response": {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            {
              "functionCall": {
                "name": "get_weather",
                "args": {
                  "location": "Paris"
                },
                "id": "toolu_vrtx_01PDbPTJgBJ3AJ8BCnSXvUqk"
              }
            }
          ]
        },
        "finishReason": "OTHER"
      }
    ]
  }
}

Предоставление результатов Function

json
{
  "contents": [
    { "role": "user", "parts": [{ "text": "What's the weather?" }] },
    { "role": "model", "parts": [{ "functionCall": { "name": "get_weather", "args": {...}, "id": "..." } }] },
    { "role": "user", "parts": [{ "functionResponse": { "name": "get_weather", "id": "...", "response": { "temperature": "22C" } } }] }
  ]
}

Thinking / Расширенные рассуждения

Конфигурация Thinking

Для моделей с поддержкой Thinking (*-thinking):

json
{
  "generationConfig": {
    "maxOutputTokens": 10000,
    "thinkingConfig": {
      "thinkingBudget": 8000,
      "includeThoughts": true
    }
  }
}

Важное ограничение

maxOutputTokens должен быть больше чем thinkingBudget

Ответ Thinking (Gemini)

Модели Gemini возвращают thinking с подписью:

json
{
  "parts": [
    {
      "thoughtSignature": "ErADCq0DAXLI2nx...",
      "text": "Let me think about this..."
    },
    {
      "text": "The answer is..."
    }
  ]
}

Ответ Thinking (Claude)

Модели Claude thinking могут включать части с thought: true:

json
{
  "parts": [
    {
      "thought": true,
      "text": "Reasoning process...",
      "thoughtSignature": "..."
    },
    {
      "text": "Final answer..."
    }
  ]
}

Обработка плагином: Плагин автоматически кэширует подписи thinking для предотвращения ошибок подписи в многораундовых диалогах. Подробнее см. advanced/session-recovery/.


Ответы об ошибках

Структура ошибки

json
{
  "error": {
    "code": 400,
    "message": "Error description",
    "status": "INVALID_ARGUMENT",
    "details": [...]
  }
}

Коды распространенных ошибок

CodeStatusОписание
400INVALID_ARGUMENTНеверный формат запроса
401UNAUTHENTICATEDНедействительный или просроченный токен
403PERMISSION_DENIEDНет доступа к ресурсу
404NOT_FOUNDМодель не найдена
429RESOURCE_EXHAUSTEDПревышено ограничение скорости

Ответ при ограничении скорости

json
{
  "error": {
    "code": 429,
    "message": "You have exhausted your capacity on this model. Your quota will reset after 3s.",
    "status": "RESOURCE_EXHAUSTED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.RetryInfo",
        "retryDelay": "3.957525076s"
      }
    ]
  }
}

Обработка плагином: Плагин автоматически обнаруживает ошибки 429, переключает аккаунты или ожидает время сброса. Подробнее см. advanced/rate-limit-handling/.


Неподдерживаемые функции

Следующие функции Anthropic/Vertex AI не поддерживаются:

ФункцияОшибка
anthropic_versionUnknown field
Массив messagesUnknown field (должен использоваться contents)
max_tokensUnknown field (должен использоваться maxOutputTokens)
Строковая systemInstructionInvalid value (должен использоваться формат объекта)
system_instruction (корневой snake_case)Unknown field
const JSON SchemaUnknown field (используйте enum: [value] вместо этого)
$ref JSON SchemaНе поддерживается (определяйте встроенно)
$defs JSON SchemaНе поддерживается (определяйте встроенно)
Имя Tool содержит /Invalid (используйте _ или : вместо этого)
Имя Tool начинается с цифрыInvalid (должно начинаться с буквы или подчеркивания)

Полный пример запроса

json
{
  "project": "my-project-id",
  "model": "claude-sonnet-4-5",
  "request": {
    "contents": [
      {
        "role": "user",
        "parts": [
          { "text": "Hello, how are you?" }
        ]
      }
    ],
    "systemInstruction": {
      "parts": [
        { "text": "You are a helpful assistant." }
      ]
    },
    "generationConfig": {
      "maxOutputTokens": 1000,
      "temperature": 0.7
    }
  },
  "userAgent": "antigravity",
  "requestId": "agent-abc123"
}

Headers ответа

HeaderОписание
x-cloudaicompanion-trace-idID трассировки для отладки
server-timingДлительность запроса

Сравнение Antigravity и Vertex AI Anthropic

ХарактеристикаAntigravityVertex AI Anthropic
Конечная точкаcloudcode-pa.googleapis.comaiplatform.googleapis.com
Формат запросаGemini-стиль contentsAnthropic messages
anthropic_versionНе используетсяОбязательно
Имена моделейПростые (claude-sonnet-4-5)Версионные (claude-4-5@date)
Формат ответаcandidates[]Anthropic content[]
Поддержка нескольких моделейДа (Claude, Gemini и др.)Только Anthropic

Резюме урока

В этом учебнике подробно описана внутренняя спецификация унифицированного шлюзового API Antigravity:

  • Конечные точки: Три среды (Daily, Production, Autopush), основная конечная точка — Daily Sandbox
  • Аутентификация: OAuth 2.0 + Bearer Token, обязательные scopes и headers
  • Формат запроса: Gemini-стиль массива contents, поддержка System Instruction и Tools
  • JSON Schema: Поддержка распространенных функций, но не const, $ref, $defs
  • Формат ответа: Структура candidates[], поддержка потокового SSE
  • Thinking: Claude и Gemini 3 поддерживают расширенные рассуждения, требуется thinkingConfig
  • Обработка ошибок: Стандартный формат ошибок, 429 включает задержку повторной попытки

Если вы сталкиваетесь с проблемами при отладке вызовов API, можете использовать режим отладки плагина:

bash
OPENCODE_ANTIGRAVITY_DEBUG=1 opencode

Превью следующего урока

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

Если вам нужно вернуться к началу, можно начать заново с раздела Что такое Antigravity Auth.


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

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

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

ФункцияПуть к файлуСтроки
Константы конечных точек APIsrc/constants.ts:32-4332-43
Antigravity Headerssrc/constants.ts:73-7773-77
Gemini CLI Headerssrc/constants.ts:79-8379-83
OAuth Scopessrc/constants.ts:14-2014-20
Основная логика преобразования запросовsrc/plugin/request.ts:11-2000+
Очистка JSON Schemasrc/plugin/request-helpers.tsВесь файл
Кэширование подписей thinkingsrc/plugin/cache.tsВесь файл

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

  • ANTIGRAVITY_ENDPOINT_DAILY = "https://daily-cloudcode-pa.sandbox.googleapis.com" - Конечная точка Daily Sandbox
  • ANTIGRAVITY_ENDPOINT_PROD = "https://cloudcode-pa.googleapis.com" - Production конечная точка
  • ANTIGRAVITY_DEFAULT_PROJECT_ID = "rising-fact-p41fc" - ID проекта по умолчанию
  • SKIP_THOUGHT_SIGNATURE = "skip_thought_signature_validator" - Сигнальное значение для пропуска проверки подписи thinking

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

  • cleanJSONSchemaForAntigravity(schema) - Очищает JSON Schema в соответствии с требованиями API Antigravity
  • prepareAntigravityRequest(request) - Подготавливает и отправляет запрос к API Antigravity
  • createStreamingTransformer() - Создает трансформатор для потоковых ответов