Tutoriel
Comment utiliser glm-5.3 via l'API hiapi : curl, Python et une requête exécutable
Ce que vous allez construire
Une intégration exécutable qui appelle glm-5.3 via l'API Chat Completions compatible OpenAI de hiapi — une seule requête renvoie un véritable résultat de complétion, et met en lumière le piège le plus fréquent avec ce modèle : ses tokens de raisonnement consomment votre budget max_tokens.
Prérequis : une clé API hiapi. Obtenez-la depuis le dashboard — c'est simplement une chaîne sk-..., et la même clé fonctionne pour tous les modèles activés sur votre compte, pas seulement celui-ci.
Chaque requête et réponse ci-dessous a été réellement exécutée contre l'API en production au moment de la rédaction de cet article.
Exemple minimal exécutable
glm-5.3 est un modèle texte sur le point de terminaison standard Chat Completions — pas le flux asynchrone /v1/tasks que hiapi utilise pour les modèles d'image/vidéo/audio. Une requête, une réponse, aucune interrogation répétée.
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
}'
Réponse (tronquée) :
{
"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 }
}
}
Le même appel en Python, avec uniquement 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"])
Comme la structure est compatible OpenAI, ce code fonctionne aussi sans modification avec les SDK Python/JS officiels openai — il suffit de pointer base_url vers https://api.hiapi.ai/v1 et de passer votre clé hiapi.
Modes de production
Les tokens de raisonnement dévorent un budget max_tokens trop bas
glm-5.3 réfléchit toujours avant de répondre — chaque réponse porte un champ reasoning_content à côté de content, et aucun indicateur de requête ne permet de le désactiver. Ce contenu de raisonnement est décompté de max_tokens avant la réponse visible. Si vous fixez le budget trop bas, vous obtenez content: null et finish_reason: "length", car le modèle a dépensé tout son quota à réfléchir et n'est jamais arrivé à l'étape de rédaction de la réponse :
{
"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 } }
}
Même avec un prompt simple, laissez une marge confortable (200+ tokens est un plancher sûr), et vérifiez toujours finish_reason avant de faire confiance à content — "length" signifie que la réponse a été tronquée, voire qu'elle n'a peut-être même pas commencé.
Sortie en streaming
Définissez "stream": true et lisez les Server-Sent Events. Le contenu de raisonnement et le texte de la réponse arrivent sous forme de champs delta distincts — d'abord les blocs delta.reasoning_content, puis delta.content quand le modèle commence sa réponse réelle — et le flux se termine sur le dernier bloc avec 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"}]}
Si vous diffusez en streaming vers une UI, acheminez reasoning_content et content vers des panneaux distincts au lieu de les concaténer — ce ne sont pas les mêmes flux de texte.
Appel d'outils
L'appel de fonctions suit la structure OpenAI standard. Déclarez tools ; lorsque le modèle décide d'appeler un outil, finish_reason revient avec "tool_calls" et un tableau tool_calls rempli (il raisonne toujours d'abord, donc reasoning_content apparaît aussi) :
{
"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"
}
Au tour suivant, renvoyez le message tool_calls de l'assistant ainsi qu'un message de résultat avec role: "tool", comme dans toute intégration compatible OpenAI.
Gestion des erreurs
Une clé invalide ou absente renvoie un HTTP 401 avec une structure d'erreur cohérente — vérifiez le code de statut avant d'analyser 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"
}
}
Ressources associées
- Page du modèle glm-5.3 — capacités et disponibilité actuelle
- Tarifs hiapi — tarif actuel par token
- Dashboard des clés API — créer et gérer des clés
- Comment utiliser kimi-k3 via l'API hiapi — un autre modèle texte Chat Completions sur hiapi
- Comment utiliser deepseek-v4.1-flash via l'API hiapi — même schéma d'intégration, modèle différent
Questions fréquentes
glm-5.3 prend-il en charge le streaming ?
Oui — définissez "stream": true et lisez les blocs SSE. Le contenu de raisonnement et le contenu de la réponse sont diffusés sous forme de champs delta distincts.
Pourquoi content est-il null dans ma réponse ?
Presque toujours parce que le budget max_tokens est trop petit pour couvrir à la fois le raisonnement et la réponse. Vérifiez finish_reason : "length" signifie que la réponse a été tronquée avant (ou pendant) la vraie réponse. Augmentez max_tokens.
Puis-je désactiver l'étape de raisonnement ?
Non, pas via un paramètre de requête — glm-5.3 raisonne avant chaque réponse, et reasoning_content est toujours rempli. Prévoyez un budget pour lui plutôt que d'essayer de le désactiver.
glm-5.3 prend-il en charge l'appel de fonctions/outils ?
Oui, avec la structure standard OpenAI tools / tool_calls, vérifiée sur le point de terminaison en production.
Puis-je utiliser le SDK OpenAI officiel plutôt que du HTTP brut ?
Oui. Pointez base_url du SDK vers https://api.hiapi.ai/v1 et utilisez votre clé hiapi sk-... comme clé API — aucune autre modification n'est nécessaire.
Comment glm-5.3 est-il facturé ? À la consommation de tokens, comme les autres modèles texte hiapi. Consultez la page Tarifs pour les taux actuels plutôt que de vous fier à un chiffre donné dans cet article.
Articles similaires
Voir tous les articles →-
Tutoriel
Comment appeler hailuo-2.3-fast/image-to-video via l'API HiAPI : curl et Python en pratique
La première requête exploitable du palier image-vers-vidéo rapide et économique — de l'ID du modèle au téléchargement du MP4
-
Tutoriel
Comment appeler hailuo-2.3/text-to-video via l'API HiAPI : curl, Python et exemples de requêtes exécutables
-
Tutoriel
Utiliser Kandinsky 6.0 Pro texte-vers-vidéo sur HiAPI : tutoriel curl et Python
Démonstration pratique axée sur la requête : construire l'appel du prompt au clip vidéo, soumettre la requête, interroger l'état d'achèvement et télécharger le résultat