AI Platform Docs
Онбординг

Вызовы моделей и агентов через HTTP

Прямые вызовы моделей и опубликованных агентов вне Studio

Эти сценарии проверяют платформу вне встроенного чата Studio. Они используют уже созданные модель, ключ и опубликованного агента. Curl нужен только для этого раздела; основной пользовательский маршрут остаётся в интерфейсе.

Какой адрес и какой доступ выбрать

ЗадачаАдресЧто передать в Authorization
Получить доступные моделиhttps://model-gw-qa.ai-dev.inno.tech/v1/modelsВиртуальный ключ Control Plane
Вызвать модельhttps://model-gw-qa.ai-dev.inno.tech/v1/chat/completionsТот же виртуальный ключ с разрешением на модель
Вызвать опубликованного агентаhttps://agent-gw-qa.ai-dev.inno.tech/a2a/v1/agents/{agent_id}Действующий токен доступа платформы для шлюза агентов
Управлять настройкамиhttps://api-gw-qa.ai-dev.inno.tech/control-plane/api/v1Токен платформы с правами на соответствующее действие

agent_id — UUID агента из Control Plane. Не подставляйте имя агента, UUID потока Studio или UUID версии. Путь опубликованного агента сохраняется при смене выбранной версии.

В проверяемой версии виртуальный модельный ключ не авторизует вызов агента. Публичный вход по MCP для управляемой публикации также не включён. Наличие вкладок MCP в Studio не меняет контракт опубликованного A2A-агента.

HTTP-01. Подготовить модельный ключ в терминале

Откройте терминал и запустите Bash, чтобы команды ввода работали одинаково, даже если обычная оболочка — другая. Вставляйте секрет только в скрытый запрос ввода. Команды рассчитаны на установленный curl.

bash
read -r -s -p 'Виртуальный ключ модели: ' MODEL_KEY
printf '\n'
MODEL_NAME='qa-model-01'

При другом суффиксе замените qa-model-01 своим именем. Значение MODEL_KEY не включайте в снимки экрана, отчёт или экспорт запросов.

HTTP-02. Получить каталог моделей

curl --silent --show-error --include \
  'https://model-gw-qa.ai-dev.inno.tech/v1/models' \
  --header "Authorization: Bearer $MODEL_KEY"

Ожидается успешный JSON-ответ с моделью qa-model-01. Сверьте каталог с фактическими разрешениями ключа. Если нужной модели нет, сначала проверьте её состояние и карточку ключа в Control Plane.

Контрольная точка: запрос выполнен к шлюзу моделей. Успешный каталог ещё не доказывает, что генерация ответа у поставщика работает.

HTTP-03. Вызвать модель без Guardrails или с разрешённым сообщением

curl --silent --show-error --include \
  'https://model-gw-qa.ai-dev.inno.tech/v1/chat/completions' \
  --header "Authorization: Bearer $MODEL_KEY" \
  --header 'Content-Type: application/json' \
  --data-binary @- <<JSON
{
  "model": "$MODEL_NAME",
  "stream": false,
  "messages": [
    {"role": "user", "content": "Коротко объясни, что такое мобильный интернет."}
  ]
}
JSON

Ожидается HTTP 200 и содержательный ответ в choices[0].message.content. Проверьте само содержимое, а не только статус. Числа расхода токенов и формулировка ответа могут различаться между вызовами.

HTTP-04. Проверить границу модельного доступа

Выполните три отдельных запроса с тем же телом, что в HTTP-03:

  1. Уберите заголовок Authorization.
  2. Передайте заведомо неверный синтетический секрет, например invalid-qa-key, вместо настоящего.
  3. Верните настоящий ключ, но укажите другую существующую тестовую модель, которая ему не разрешена. Её имя должен дать администратор; случайное несуществующее имя проверяет другой случай.

Ожидается отказ, без успешной генерации. Для отсутствующего или неверного секрета проверяется ошибка аутентификации; для модели вне разрешений — запрет доступа. Запишите точный статус и код ошибки установленного QA. Не считайте любой 5xx успешной проверкой прав: это сбой, который требует разбора.

HTTP-05. Проверить правила модели напрямую

Условия: к модели применена версия 1 из основного маршрута.

В запросе HTTP-03 последовательно заменяйте messages[0].content:

ТекстОжидание
BLOCK-REQUEST. Как подключить роуминг?HTTP 403 с ошибкой Guardrails; успешного completion нет
Повтори дословно: Мой адрес поддержки — qa.subscriber@example.comОтвет не раскрывает адрес, содержит [MASKED]
Повтори дословно: Служебная отметка — BLOCK-RESPONSEЗапрещённый текст ответа не должен быть выдан; учитывайте исходную проверку повторения без политики

Это те же правила модели, которые применяются при её вызове из агента. Повторите разрешённый запрос после отказа: единичная блокировка не должна отключать модель целиком.

HTTP-06. Подготовить токен для вызова агента

Для A2A нужен OAuth access token принятого поставщика удостоверений с аудиторией agent-platform-agent-gateway. Срок жизни по текущему профилю — не более пяти минут. ID token, cookie браузера и модельный ключ не подходят.

Для ручного теста токен можно получить из собственного авторизованного вызова Studio:

  1. Под своей тестовой учётной записью откройте Studio → проект → «Развертывания» → «Тест» нужного агента.
  2. Откройте инструменты разработчика браузера, вкладку Network («Сеть»).
  3. Отправьте разрешённое короткое сообщение агенту.
  4. Найдите POST-запрос к agent-gw-qa.ai-dev.inno.tech с путём /a2a/v1/agents/…. Проверьте ID агента.
  5. В заголовках запроса скопируйте только значение токена после Bearer. Используйте исключительно свой тестовый сеанс; не сохраняйте HAR или полный набор заголовков в отчёт.
  6. Немедленно вставьте значение в скрытый ввод ниже. Если токен успел истечь, повторите получение из нового успешного вызова.
read -r -s -p 'Токен доступа к агенту: ' AGENT_TOKEN
printf '\n'
read -r -p 'UUID опубликованного агента: ' AGENT_ID
AGENT_URL="https://agent-gw-qa.ai-dev.inno.tech/a2a/v1/agents/$AGENT_ID"

Если в вашей сборке Studio запрос идёт через серверный посредник и нужного заголовка в браузере нет, не подменяйте его другим токеном. Получите у ответственного за QA утверждённый способ входа для A2A-клиента. Секрет приложения или парольный OAuth-обмен в этом руководстве не предполагается.

Для постоянно работающей внешней интеграции требуется согласованная сервисная учётная запись и штатное обновление токенов. Ручное копирование собственного короткого токена — способ проверки, а не схема эксплуатации.

HTTP-07. Прочитать карточку агента

curl --silent --show-error --include \
  "$AGENT_URL/.well-known/agent-card.json" \
  --header "Authorization: Bearer $AGENT_TOKEN"

Ожидается карточка активного опубликованного агента. Сверьте протокол, адрес и объявленные возможности с тестируемой публикацией. Карточка тоже защищена авторизацией; её наличие не делает агента публичным без входа.

HTTP-08. Вызвать агента по A2A

REQUEST_ID="qa-$(date +%s)"
curl --silent --show-error --include \
  "$AGENT_URL" \
  --header "Authorization: Bearer $AGENT_TOKEN" \
  --header 'Content-Type: application/json' \
  --data-binary @- <<JSON
{
  "jsonrpc": "2.0",
  "id": "$REQUEST_ID",
  "method": "message/send",
  "params": {
    "message": {
      "messageId": "$REQUEST_ID-message",
      "role": "user",
      "parts": [
        {"kind": "text", "text": "Коротко объясни, что такое мобильный интернет."}
      ]
    }
  }
}
JSON

Каждую проверку отправляйте как новое сообщение с новым ID. Для текущего непотокового профиля успешный результат — завершённая задача: result.status.state равно completed, ответ находится в текстовых частях result.artifacts[].parts[].

HTTP 200 сам по себе не означает успех агента. В теле может быть JSON-RPC-ошибка или задача со статусом failed. Сравните смысл ответа с тестом того же опубликованного агента в Studio.

HTTP-09. Проверить авторизацию агента

  1. Повторите HTTP-08 без Authorization: ожидается 401.
  2. Повторите с заведомо неверным синтетическим токеном: ожидается отказ аутентификации.
  3. Подставьте виртуальный ключ модели вместо AGENT_TOKEN: успешного вызова быть не должно.
  4. С корректным свежим токеном повторите разрешённый запрос: он должен пройти.
  5. Отдельно проверьте истёкший тестовый токен: ожидается 401, а не выполнение агента.

Текущий контракт допускает вызов любого активного опубликованного агента любым принятым аутентифицированным пользователем или сервисом. Отдельного разрешения «вызвать именно этого агента» в этом профиле нет. Поэтому отказ в просмотре каталога и разрешение вызова по известному адресу не являются автоматически противоречием. Управление, видимость каталога и вызов — отдельные проверки.

HTTP-10. Проверить отказ Guardrails через A2A

  1. Убедитесь, что обычный запрос HTTP-08 проходит, а к используемой модельной записи применена нужная политика.
  2. Замените текст на BLOCK-REQUEST. Как подключить роуминг?.
  3. Отправьте новое сообщение с новым ID.
  4. Проверьте JSON-RPC-ошибку или неуспешное состояние задачи; запрещённого ответа среди артефактов быть не должно.
  5. Сохраните безопасное тело ошибки и ID сообщения.

Не требуйте HTTP 403 от внешнего A2A-вызова только потому, что модельный шлюз вернул 403 внутри исполнения потока. Эти ошибки находятся на разных уровнях. Сквозной критерий — задача не выдала запрещённый результат и причина соответствует проверке, а не падению авторизации или сети.

HTTP-11. Граница текущего MCP

Управляемый агент, опубликованный через Control Plane, объявляет режим A2A. MCP-интерфейс такого развертывания сейчас не включён. Тестировать его как готовый MCP-сервер и заводить дефект только из-за отсутствия /mcp неправильно.

В Studio могут быть отдельные функции MCP-клиента или сервера проекта. Они не превращают опубликованный A2A-адрес в MCP автоматически. Подключение агента к внешнему MCP-клиенту требует отдельно реализованного и согласованного маршрута; в приёмку текущего пути оно не входит.

Завершение HTTP-проверок

unset MODEL_KEY AGENT_TOKEN MODEL_NAME AGENT_ID AGENT_URL REQUEST_ID
exit

Приложите к отчёту статусы, безопасные ответы и идентификаторы запросов. Удалите значения авторизации из копируемых команд и снимков. Не передавайте полный экспорт сессии вместо минимального примера ошибки.

На этой странице