Руководство
Как использовать glm-5.3 через API hiapi: curl, Python и один рабочий запрос
Что вы создадите
Рабочую интеграцию, которая вызывает glm-5.3 через OpenAI-совместимый Chat Completions API от hiapi — один запрос возвращает реальный результат дополнения, а также объясняет самую распространенную проблему на практике при работе с этой моделью: её токены рассуждения расходуют ваш бюджет max_tokens.
Предварительные требования: API-ключ hiapi. Получите его в панели управления — это строка вида sk-..., и один и тот же ключ работает для всех включённых моделей в вашей учётной записи, а не только для этой модели.
Каждый запрос и ответ ниже был фактически выполнен к рабочему API на момент написания этой статьи.
Минимальный рабочий пример
glm-5.3 — это текстовая модель на стандартном эндпоинте Chat Completions, а не асинхронный процесс /v1/tasks, который hiapi использует для моделей изображений/видео/аудио. Один запрос, один ответ, без опроса.
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer sk-<your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3",
"messages": [
{"role": "user", "content": "Reply with exactly: OK"}
],
"max_tokens": 200
}'
Ответ (сокращён):
{
"id": "8be5f07603f0407c90734e8b4c2f02f0",
"object": "chat.completion",
"model": "glm-5.3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "OK",
"reasoning_content": "The user wants me to reply with exactly \"OK\" ..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 17,
"completion_tokens": 35,
"total_tokens": 52,
"completion_tokens_details": { "reasoning_tokens": 32 }
}
}
Тот же вызов на Python, используя только requests:
import requests
resp = requests.post(
"https://api.hiapi.ai/v1/chat/completions",
headers={"Authorization": "Bearer sk-<your-api-key>"},
json={
"model": "glm-5.3",
"messages": [
{"role": "user", "content": "Reply with exactly: OK"}
],
"max_tokens": 200,
},
timeout=60,
)
resp.raise_for_status()
data = resp.json()
print(data["choices"][0]["message"]["content"])
print(data["usage"])
Поскольку структура совместима с OpenAI, этот код без изменений работает с официальными Python/JS SDK openai — просто укажите base_url как https://api.hiapi.ai/v1 и передайте ваш ключ hiapi.
Режимы для продакшена
Токены рассуждения съедают заниженный бюджет max_tokens
glm-5.3 всегда рассуждает перед ответом — каждый ответ содержит поле reasoning_content рядом с content, и нет флага запроса, чтобы это отключить. Это содержимое рассуждения учитывается в max_tokens до видимого ответа. Если задать бюджет слишком маленьким, вы получите content: null и finish_reason: "length", потому что модель потратила всю квоту на рассуждения и так и не дошла до написания ответа:
{
"choices": [{
"message": { "content": null, "reasoning_content": "The user has given a very simple instruction: \"" },
"finish_reason": "length"
}],
"usage": { "completion_tokens": 10, "completion_tokens_details": { "reasoning_tokens": 9 } }
}
Даже если запрос простой, давайте достаточный запас (200+ токенов — безопасный минимум) и всегда проверяйте finish_reason перед тем, как доверять content — "length" означает, что ответ был обрезан, возможно, ещё до того, как он начался.
Потоковый вывод
Установите "stream": true и читайте Server-Sent Events. Содержимое рассуждения и текст ответа приходят как отдельные поля delta — сначала блоки delta.reasoning_content, затем, когда модель начинает фактически отвечать, delta.content — поток завершается на последнем блоке с finish_reason: "stop":
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer sk-<your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3",
"messages": [{"role": "user", "content": "Count to 3."}],
"max_tokens": 200,
"stream": true
}'
data: {"choices":[{"delta":{"role":"assistant","content":"","reasoning_content":null},"finish_reason":null}]}
data: {"choices":[{"delta":{"content":null,"reasoning_content":"The"},"finish_reason":null}]}
data: {"choices":[{"delta":{"content":"1, ","reasoning_content":null},"finish_reason":null}]}
data: {"choices":[{"delta":{"content":"2, 3.","reasoning_content":null},"finish_reason":null}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
Если вы выполняете потоковую передачу в UI, направляйте reasoning_content и content в разные панели, а не соединяйте их — это не один и тот же поток текста.
Вызов инструментов
Вызов функций следует стандартной структуре OpenAI. Объявите tools, и когда модель решает вызвать инструмент, finish_reason вернётся как "tool_calls" с заполненным массивом tool_calls (она также сначала рассуждает, поэтому reasoning_content тоже появится):
{
"message": {
"role": "assistant",
"content": null,
"reasoning_content": "The user wants to know the weather in Paris. I have a tool available for that. Let me call it.",
"tool_calls": [{
"id": "call_12e21fe488f046bc9edb4488",
"type": "function",
"function": { "name": "get_weather", "arguments": "{\"city\": \"Paris\"}" }
}]
},
"finish_reason": "tool_calls"
}
В следующем раунде воспроизведите сообщение tool_calls ассистента и сообщение с результатом role: "tool", как в любой OpenAI-совместимой интеграции.
Обработка ошибок
Недействительный или отсутствующий ключ возвращает HTTP 401 с согласованной структурой ошибки — проверяйте код состояния перед разбором choices:
{
"error": {
"code": "permission_denied",
"message": "This API key is invalid. Check that it is correct or use another API key and try again.",
"type": "hiapi_error"
}
}
Связанные ресурсы
- Страница модели glm-5.3 — возможности и текущая доступность
- Тарифы hiapi — текущие ставки за токен
- Панель API-ключей — создание и управление ключами
- Как использовать kimi-k3 через API hiapi — ещё одна текстовая модель Chat Completions на hiapi
- Как использовать deepseek-v4.1-flash через API hiapi — тот же шаблон интеграции, другая модель
Часто задаваемые вопросы
Поддерживает ли glm-5.3 потоковый вывод?
Да — установите "stream": true и читайте блоки SSE. Содержимое рассуждения и содержимое ответа передаются как отдельные поля delta.
Почему в моём ответе content равен null?
Почти всегда потому, что бюджет max_tokens слишком мал, чтобы покрыть и рассуждения, и ответ. Проверьте finish_reason: "length" означает, что ответ был обрезан до (или во время) фактического ответа. Увеличьте max_tokens.
Могу ли я отключить этап рассуждения?
Нет, через параметры запроса — glm-5.3 рассуждает перед каждым ответом, и reasoning_content всегда заполняется. Заложите для него бюджет, а не пытайтесь его отключить.
Поддерживает ли glm-5.3 вызов функций/инструментов?
Да, используется стандартная структура OpenAI tools / tool_calls, проверено на рабочем эндпоинте.
Могу ли я использовать официальный OpenAI SDK вместо необработанного HTTP?
Да. Укажите base_url SDK как https://api.hiapi.ai/v1 и используйте ваш ключ hiapi sk-... в качестве API-ключа — других изменений не требуется.
Как оплачивается glm-5.3? По токенам, как и другие текстовые модели hiapi. Смотрите тарифы для текущих ставок, а не полагайтесь на какое-либо число из этой статьи.
Похожие статьи
Все статьи →-
Руководство
Как вызвать hailuo-2.3-fast/image-to-video через HiAPI API: практика с curl и Python
Первый рабочий запрос к быстрому и недорогому уровню генерации видео по изображению — от ID модели до загрузки MP4
-
Руководство
Как вызывать hailuo-2.3/text-to-video через API HiAPI: curl, Python и рабочие примеры запросов
-
Руководство
Использование Kandinsky 6.0 Pro для преобразования текста в видео на HiAPI: руководство по curl и Python
Практическая демонстрация с упором на запросы: построение вызова от промпта до видеоклипа, отправка запроса, опрос статуса завершения и скачивание результата