Tutoriale
Come usare glm-5.3 tramite l'API hiapi: curl, Python e una richiesta eseguibile
Cosa costruirai
Un'integrazione funzionante che chiama glm-5.3 tramite l'API Chat Completions compatibile con OpenAI di hiapi: una singola richiesta restituisce un completamento reale, e spiega la difficoltà più comune che si incontra effettivamente usando questo modello: i suoi token di ragionamento consumano il tuo budget di max_tokens.
Prerequisiti: una chiave API hiapi. Ottienila dalla dashboard: è semplicemente una stringa sk-..., e la stessa chiave funziona per tutti i modelli abilitati nel tuo account, non solo per questo modello.
Ogni richiesta e risposta riportata di seguito è stata ottenuta eseguendo realmente l'API in produzione al momento della stesura di questo articolo.
Esempio minimo eseguibile
glm-5.3 è un modello testuale sull'endpoint standard Chat Completions, non il flusso asincrono /v1/tasks che hiapi usa per i modelli di immagini/video/audio. Una richiesta, una risposta, nessun polling.
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
}'
Risposta (troncata):
{
"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 }
}
}
La stessa chiamata in Python, usando solo 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"])
Poiché la struttura è compatibile con OpenAI, questo codice funziona senza modifiche anche con gli SDK Python/JS ufficiali openai: basta puntare base_url a https://api.hiapi.ai/v1 e passare la tua chiave hiapi.
Modelli per la produzione
I token di ragionamento consumano un budget max_tokens troppo basso
glm-5.3 pensa sempre prima di rispondere: ogni risposta include il campo reasoning_content accanto a content, e non esiste un flag di richiesta per disattivarlo. Quel contenuto di ragionamento viene conteggiato in max_tokens prima della risposta visibile. Se imposti il budget troppo basso, otterrai content: null e finish_reason: "length", perché il modello ha speso l'intera quota nel ragionamento e non è mai arrivato a scrivere la risposta:
{
"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 } }
}
Anche con prompt semplici, lascia un margine sufficiente (200+ token è una soglia minima sicura) e controlla sempre finish_reason prima di fidarti di content: "length" significa che la risposta è stata troncata, o che potrebbe non essere nemmeno iniziata.
Output in streaming
Imposta "stream": true e leggi gli Server-Sent Events. Il contenuto di ragionamento e il testo della risposta arrivano come campi delta separati: prima i blocchi delta.reasoning_content, poi, quando il modello inizia la risposta effettiva, delta.content; lo stream termina sull'ultimo blocco con 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"}]}
Se fai streaming verso una UI, indirizza reasoning_content e content su pannelli diversi invece di concatenarli: non sono lo stesso flusso di testo.
Chiamata di strumenti
La chiamata di funzioni segue la struttura standard di OpenAI. Dichiara tools, e quando il modello decide di chiamare uno strumento, finish_reason viene restituito come "tool_calls" con un array tool_calls popolato (ragiona comunque prima, quindi apparirà anche 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"
}
Nel turno successivo, riproduci il messaggio tool_calls dell'assistente e un messaggio di risultato con role: "tool", come in qualsiasi integrazione compatibile con OpenAI.
Gestione degli errori
Una chiave non valida o assente restituisce HTTP 401 con una struttura di errore coerente: controlla il codice di stato prima di analizzare 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"
}
}
Risorse correlate
- Pagina del modello glm-5.3: capacità e disponibilità attuale
- Prezzi hiapi: tariffa attuale per token
- Dashboard delle chiavi API: crea e gestisci le chiavi
- Come usare kimi-k3 tramite l'API hiapi: un altro modello testuale Chat Completions su hiapi
- Come usare deepseek-v4.1-flash tramite l'API hiapi: stesso schema di integrazione, modello diverso
Domande frequenti
glm-5.3 supporta lo streaming?
Sì: imposta "stream": true e leggi i blocchi SSE. Il contenuto di ragionamento e il contenuto della risposta vengono trasmessi come campi delta separati.
Perché content è null nella mia risposta?
Quasi sempre perché il budget max_tokens è troppo piccolo per coprire sia il ragionamento sia la risposta. Controlla finish_reason: "length" indica che la risposta è stata troncata prima (o durante) la risposta effettiva. Aumenta max_tokens.
Posso disattivare la fase di ragionamento?
No, non tramite parametri della richiesta: glm-5.3 ragiona prima di ogni risposta e reasoning_content viene sempre popolato. Prevedi un budget per questo, invece di provare a disattivarlo.
glm-5.3 supporta la chiamata di funzioni/strumenti?
Sì, usando la struttura standard OpenAI tools / tool_calls, verificata sull'endpoint di produzione.
Posso usare l'SDK OpenAI ufficiale invece di HTTP grezzo?
Sì. Punta base_url dell'SDK a https://api.hiapi.ai/v1 e usa la tua chiave hiapi sk-... come API key: nessun'altra modifica necessaria.
Come viene fatturato glm-5.3? A token, come gli altri modelli testuali hiapi. Consulta la pagina dei prezzi per le tariffe attuali, invece di affidarti a un numero specifico in questo articolo.
Articoli correlati
Vedi tutti gli articoli →-
Tutoriale
Come chiamare hailuo-2.3-fast/image-to-video tramite l'API HiAPI: pratica con curl e Python
La prima richiesta funzionante per il livello image-to-video veloce ed economico — dall'ID del modello al download di un MP4
-
Tutoriale
Come chiamare hailuo-2.3/text-to-video tramite l'API HiAPI: curl, Python ed esempi di richiesta eseguibili
-
Tutoriale
Utilizzare Kandinsky 6.0 Pro su HiAPI per la generazione di video da testo: tutorial con curl e Python
Dimostrazione pratica guidata dalla richiesta: costruire la chiamata da prompt a clip video, inviare la richiesta, monitorare lo stato di completamento e scaricare il risultato