kimik3.io/Errori/Risposta vuota

Perché Kimi K3 restituisce una risposta vuota

La chiamata riesce, HTTP 200. content è una stringa vuota. La fattura no. Ecco il motivo esatto, riprodotto su sei budget il 2026-07-16.

La risposta breve: il tuo max_completion_tokens è troppo basso. K3 ragiona sempre prima di rispondere, e quel ragionamento attinge allo stesso budget di token della risposta. Metti il tetto sotto quanto K3 vuole pensare e il ragionamento se lo prende tutto, senza lasciare niente per content. Ottieni finish_reason: "length", una stringa vuota e un addebito per ogni token di ragionamento. Come si risolve: alza max_completion_tokens, oppure lascialo al valore predefinito di 131,072.

Misurato su api.moonshot.ai con il modello kimi-k3 il 2026-07-16 — come abbiamo misurato.

Le sei esecuzioni

Abbiamo fatto a K3 una sola domanda breve — «Explain why the sky is blue» — su sei budget, senza cambiare altro:

Il ragionamento riempie qualsiasi budget gli dai

Token di output per esecuzione · la risposta compare solo a 2,048 · misurato 2026-07-16

0 512 1,024 1,536 2,048 budget 64 — 61 token di ragionamento, content vuoto budget 128 — 125 token di ragionamento, content vuoto budget 256 — 253 token di ragionamento, content vuoto budget 512 — 509 token di ragionamento, content vuoto budget 1024 — 1021 token di ragionamento, content vuoto budget 2048 — 1308 token di ragionamento budget 2048 — 740 token di risposta: finalmente content 61 · vuoto 125 · vuoto 253 · vuoto 509 · vuoto 1,021 · vuoto risposta ✓ 64 128 256 512 1024 2048 max_completion_tokens
Un'esecuzione per budget, su api.moonshot.ai. Sotto 2,048 l'intero budget se lo prende il ragionamento: paghi ogni token e ricevi una stringa vuota. I numeri completi sono nella tabella qui sotto. Riconfermato il 2026-07-18 tramite EvoLink: budget da 128 token, stesso risultato vuoto ma fatturato.
Un'esecuzione per budget, kimi-k3, 2026-07-16.
max_completion_tokens finish_reason Token di ragionamento Content restituito Fatturato come output
64length61niente61
128length125niente125
256length253niente253
512length509niente509
1024length1021niente1021
2048stop13081,954 caratteri2048

Guarda lo schema. A ogni budget sotto 2048 il ragionamento ha consumato il tetto intero a meno di tre token, e la risposta non è mai partita. L'ultima riga spiega perché: questa singola domanda breve ha speso 1,308 token a pensare prima di scrivere una parola. Qualsiasi tetto più basso è una ricevuta per il nulla.

Nota anche che l'errore è silenzioso: niente eccezioni, niente avvisi — HTTP 200 con un corpo di risposta ben formato in cui content è semplicemente "". Se il codice fa response.choices[0].message.content.strip() e tira dritto, questo bug finisce in produzione.

Perché succede

Nella maggior parte delle API il limite di token vincola la risposta. In K3 vincola ragionamento più risposta, e il ragionamento viene per primo.

K3 non ha un interruttore per spegnere il ragionamento: non è una modalità da attivare, è il modo in cui il modello funziona. Ogni risposta porta un campo reasoning_content, e ognuno di quei token è fatturato alla tariffa di output di $15.00 per 1M, esattamente come la risposta. Quindi il budget che imposti se ne va in deliberazione prima che esista un solo carattere della risposta.

È per questo che la trappola scatta soprattutto quando porti codice da un'altra parte. Codice che con un'altra API funziona benissimo — dove max_tokens: 512 significa «dammi una risposta breve» — qui significa tutt'altro: «pensa per al massimo 512 token, poi fermati, che tu abbia detto qualcosa o no».

Come si risolve

Lascia max_completion_tokens al valore predefinito di 131,072, a meno che tu non abbia un motivo concreto per cambiarlo. K3 si ferma quando ha finito; il tetto è un limite di sicurezza, non un controllo della lunghezza.

Se devi davvero limitare la spesa, calcola il budget per il ragionamento più la risposta — e verifica la firma dell'errore invece di fidarti della risposta:

choice = response.choices[0]
if choice.finish_reason == "length" and not choice.message.content:
    raise RuntimeError(
        f"Reasoning consumed the whole budget "
        f"({response.usage.completion_tokens_details.reasoning_tokens} reasoning tokens). "
        f"Raise max_completion_tokens."
    )

Se quello che vuoi davvero è una risposta breve, chiedila nel prompt. Non usare il tetto di token per ottenerla: in K3 controlla quanto a lungo il modello può pensare, non quanto può parlare.

Quanto margine lasciare?

Abbiamo misurato il ragionamento al 43–77% dei token di output totali su tre prompt, e 1,308 token sulla singola domanda breve qui sopra. La coda alta della distribuzione non l'abbiamo caratterizzata, e non inventeremo una regola su tre punti. L'indicazione onesta: il valore predefinito esiste per un motivo, e qualsiasi tetto imposti dovrebbe essere diverse volte quello che pensi serva alla risposta. Cosa significa per la fattura lo trovi nella ripartizione del costo del ragionamento.

Lo stesso bug in streaming

Morde anche in streaming, e lì è peggio: lo stream finisce e basta, senza mai emettere un delta di content. Su cinque esecuzioni in streaming con un prompt banale e un tetto di 128 token, tre non hanno prodotto nemmeno un token di content. I delta di ragionamento arrivano, lo stream si chiude, e un consumer ingenuo che guarda solo delta.content vede un risultato vuoto senza alcuna spiegazione.

Se usi lo streaming, guarda finish_reason sull'ultimo chunk e passa stream_options: {"include_usage": true} per vedere i token di ragionamento che ti sono stati addebitati. I dettagli sono nella guida API.

Altri due modi in cui K3 fallisce senza dare errore, entrambi misurati: reasoning_effort: "low" viene ignorato in silenzio con HTTP 200 anche se è supportato solo max, e max_completion_tokens: 2000000 — il doppio della finestra di contesto — restituisce anch'esso 200, con il valore troncato in silenzio. L'insieme completo dei corpi di errore reali è nel riferimento errori.

FAQ sulla risposta vuota di Kimi K3

Perché Kimi K3 restituisce una risposta vuota?

Il tuo max_completion_tokens è troppo basso. K3 ragiona sempre prima di rispondere e quel ragionamento attinge allo stesso budget di token della risposta, quindi un tetto basso viene consumato interamente dal ragionamento. Ricevi finish_reason pari a length, una stringa content vuota e un addebito per ogni token di ragionamento. Alza max_completion_tokens oppure lascialo al valore predefinito di 131,072.

Una risposta vuota di Kimi K3 viene comunque fatturata?

Sì. I token di ragionamento sono fatturati alla tariffa di output di $15.00 per 1M token, che venga restituito del content o no. Con un budget di 1024 token abbiamo misurato 1,021 token di ragionamento fatturati con zero caratteri di content.

Qual è il minimo di max_completion_tokens per Kimi K3?

Non esiste un minimo documentato, e il valore giusto dipende dal prompt. Nel nostro test una singola domanda breve ha speso 1,308 token in ragionamento: i budget da 64, 128, 256, 512 e 1024 hanno restituito content vuoto, mentre 2048 ha restituito una risposta completa. Il valore predefinito di 131,072 esiste per un motivo.

Provalo tu stesso

Ogni numero di questa pagina è riproducibile in circa un minuto. EvoLink offre kimi-k3 su un endpoint compatibile con OpenAI — 10 crediti gratuiti e registrazione da qualsiasi paese, senza numero di telefono cinese.

Ottieni una API key EvoLink