Перейти к основному содержимому

Строгая форма ответа

Модель возвращает не текст, а данные заданной структуры. Для агента это разница между разбором ответа регулярками и готовым объектом.

Как включить​

Передайте response_format со схемой:

curl https://aipomogator.ru/go/v1/chat/completions \
-H "Authorization: Bearer $AIPOMOGATOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "openrouter/openai/gpt-5.4-mini",
"messages": [{"role": "user", "content": "В Москве минус пять. Сообщи погоду."}],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "weather",
"strict": true,
"schema": {
"type": "object",
"properties": {
"city": {"type": "string"},
"temp_c": {"type": "number"}
},
"required": ["city", "temp_c"],
"additionalProperties": false
}
}
}
}'

Ответ придёт ровно по схеме, без пояснений вокруг:

{"city": "Moscow", "temp_c": -5}

Важно: модель может схему проигнорировать​

Строгую форму поддерживают не все модели. И вот что происходит с той, которая не поддерживает:

запрос не падает. Приходит 200 и обычный текст вместо структуры — например Current temperature in Moscow is -5 degrees Celsius. Ваш разбор ответа сломается уже после того, как запрос формально прошёл успешно.

Это поведение маршрутизатора провайдеров, а не нашего шлюза: параметр передаётся дальше, а исполнять его модель не обязана.

Как защититься​

Добавьте provider.require_parameters — тогда запрос уйдёт только к провайдеру, который поддерживает все переданные параметры, а иначе вернётся понятная ошибка:

curl https://aipomogator.ru/go/v1/chat/completions \
-H "Authorization: Bearer $AIPOMOGATOR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "openrouter/ibm-granite/granite-4.0-h-micro",
"messages": [{"role": "user", "content": "В Москве минус пять."}],
"response_format": {"type": "json_schema", "json_schema": {"name": "weather", "strict": true, "schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"], "additionalProperties": false}}},
"provider": {"require_parameters": true}
}'

Результат — честный отказ вместо подмены:

HTTP 404
No endpoints found that can handle the requested parameters

Лучше получить ошибку на старте, чем текст вместо данных в середине работы агента.

Как узнать заранее, какие модели умеют​

В каталоге у модели есть метка «Схема» — по ней работает фильтр на странице Тарифы. Метка выводится из данных провайдера, а не из имени модели, поэтому ей можно верить.

То же в API: поле tags в ответе /api/pricing содержит schema у моделей со строгой формой и tools у моделей с вызовом инструментов.

curl -s https://aipomogator.ru/api/pricing \
| jq '[.data[] | select(.tags | test("schema")) | .model_name] | length'

На 26 июля 2026 года строгую форму поддерживают 238 моделей каталога, вызов инструментов — 242.

Что дальше​