HiAPI
Блог

Руководство

Как использовать glm-5.3 через API hiapi: curl, Python и один рабочий запрос

Sep 17, 2026
Как использовать 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 потоковый вывод? Да — установите "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. Смотрите тарифы для текущих ставок, а не полагайтесь на какое-либо число из этой статьи.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API