Questo articolo tratta dei nuovi parametri e delle note di utilizzo per Kimi K3. Su AIHubMix, K3 è disponibile tramite le API di Chat Completions, Risposte e Messaggi compatibili con Claude. Vedi anche: documentazione ufficiale della piattaforma Moonshot.
Le conclusioni e le risposte campione "Verificate" in ciascuna sezione provengono da chiamate effettive effettuate il 2026-07-17 tramite le API di AIHubMix (Chat Completions / Risposte / Messaggi).
1. Specifiche del Modello a Colpo d'Occhio
| Elemento | Valore |
|---|---|
| Finestra di contesto | 1M token |
| Output massimo | max_completion_tokens predefinito a 131.072, fino a 1.048.576 |
| Modalità di input | Testo, immagini (per input video vedere la documentazione ufficiale di Moonshot) |
| Modalità di pensiero | Attivata per impostazione predefinita; reasoning_effort supporta solo "max" |
| Sequenze di stop | stop consente al massimo 5 voci, ciascuna non più lunga di 32 byte |
Verificato: entrambi i limiti distopsono convalidati e superare uno di essi restituisce 400; l'API Messaggi applica la stessa convalida astop_sequences.
❗ Quando viene colpita una sequenza di stop, l'API Messaggi non segue la semantica di Anthropic: nei test,stop_reasonè"end_turn"(anziché"stop_sequence"),stop_sequenceènull, e il testo visibile prima della parola di stop potrebbe essere vuoto. I client che si basano su questi due campi per rilevare la troncatura dovrebbero prenderne nota.
# stop con 6 voci / una voce di 33 byte -> HTTP 400
"Richiesta non valida: array di stop troppo lungo. Ci si aspettava un array con lunghezza massima 5, ma è stato ricevuto un array con lunghezza 6"
"Richiesta non valida: la sequenza di stop non deve essere più lunga di 32, ma è stata ricevuta 33"
2. Modalità di Pensiero: reasoning_effort Supporta Solo max
Il pensiero di K3 è attivato per impostazione predefinita, e reasoning_effort supporta solo un singolo livello: "max".
Le conversazioni multi-turno devono restituire la storia del pensiero parola per parola: secondo la documentazione ufficiale di Moonshot, K3 è addestrato con il pensiero preservato, quindi nelle conversazioni multi-turno il messaggio precedente dell'assistente deve essere restituito completo e non modificato (incluso il contenuto del pensiero). La mancanza di storia del pensiero porta a una qualità di output instabile. Se utilizzi un framework di gestione delle sessioni o un livello proxy, conferma che il contenuto del pensiero venga restituito senza tagli.
Chat Completions
Il contenuto del pensiero viene restituito nel campo reasoning_content della risposta; nelle conversazioni multi-turno, restituisci il messaggio precedente dell'assistente (incluso reasoning_content) parola per parola.
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
completion = client.chat.completions.create(
model="kimi-k3",
reasoning_effort="max",
messages=[
{"role": "user", "content": "Una lumaca è sul fondo di un pozzo di 10 metri. Ogni giorno sale di 3 metri, ma ogni notte scivola indietro di 2 metri. Quanti giorni ci vogliono per raggiungere la cima?"}
],
)
print(completion.choices[0].message.reasoning_content)
print(completion.choices[0].message.content)
# Multi-turn: restituisci il messaggio precedente dell'assistente parola per parola
messages = [
{"role": "user", "content": "Qual è la capitale della Francia?"},
{"role": "assistant", "content": "Parigi.", "reasoning_content": "<reasoning_content dalla risposta precedente>"},
{"role": "user", "content": "E la sua popolazione?"},
]
Verificato: la risposta restituiscereasoning_content; dopo aver restituito il messaggio precedente dell'assistente (inclusoreasoning_content) parola per parola, i turni successivi rispondono normalmente.
Risposte
Il contenuto del pensiero viene restituito come un elemento di output reasoning; nelle conversazioni multi-turno, aggiungi gli elementi di output del turno precedente (reasoning + message) di nuovo in input parola per parola.
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
response = client.responses.create(
model="kimi-k3",
input="Rispondi in una parola: capitale della Francia",
)
# Tipi di elementi di output osservati: ["reasoning", "message"]; testo: "Parigi"
# Multi-turn: input = [primo messaggio dell'utente] + output della risposta + [prossimo messaggio dell'utente]
# Risposta osservata al secondo turno con elementi di output restituiti: "Berlino"
Messaggi
Il contenuto del pensiero viene restituito come blocchi di contenuto thinking nativi; nelle conversazioni multi-turno, restituisci i blocchi di contenuto precedenti dell'assistente (inclusi i blocchi di pensiero) parola per parola.
from anthropic import Anthropic
client = Anthropic(
api_key="<AIHUBMIX_API_KEY>",
base_url="https://aihubmix.com"
)
response = client.messages.create(
model="kimi-k3",
max_tokens=4096,
messages=[
{"role": "user", "content": "Rispondi in una parola: capitale della Francia"}
],
)
# Tipi di blocchi di risposta osservati: ["thinking", "text"]; testo: "Parigi"
# Multi-turn: restituisci response.content parola per parola come messaggio dell'assistente
3. I Parametri di Campionamento Sono Fissi
I parametri di campionamento di K3 sono fissati dal fornitore del modello: temperature 1.0, top_p 0.95, n 1, e presence_penalty / frequency_penalty 0. La raccomandazione ufficiale è di omettere questi parametri dalle richieste.
Nota: i valori di campionamento fissi fanno parte delle specifiche ufficiali e non possono essere verificati dai segnali di risposta; segui la raccomandazione ufficiale e ometti questi parametri.
4. Chiamata agli Strumenti e Caricamento Dinamico degli Strumenti
tools supporta fino a 128 strumenti; tool_choice supporta la forzatura e la disabilitazione delle chiamate agli strumenti. K3 supporta anche il caricamento dinamico degli strumenti: iniezione di nuovi strumenti a metà conversazione tramite il campo tools di un messaggio di sistema (una forma di messaggio specifica per l'API Chat).
Chat Completions
tool_choice supporta auto / none / required; required costringe il modello a chiamare uno strumento. Caricamento dinamico degli strumenti: il messaggio di sistema che inietta lo strumento non porta alcun content, gli strumenti iniettati hanno effetto per i turni successivi, e il messaggio deve essere incluso di nuovo in ogni richiesta.
messages = [
{"role": "system", "content": "Sei un assistente utile."},
{"role": "user", "content": "Ciao."},
{"role": "assistant", "content": "Ciao, come posso aiutarti?"},
# Inietta un nuovo strumento a metà conversazione: solo campo tools, nessun contenuto
{
"role": "system",
"tools": [
{
"type": "function",
"function": {
"name": "get_time",
"description": "Ottieni l'ora attuale",
"parameters": {"type": "object", "properties": {}},
},
}
],
},
{"role": "user", "content": "Che ore sono adesso?"},
]
# tool_choice="required" con prompt "Ciao" -> il modello è costretto a chiamare lo strumento
"finish_reason": "tool_calls",
"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"city\":\"New York\"}"}}]
Verificato:tool_choice: "required"costringe una chiamata allo strumento anche per prompt non correlati;"none"sopprime le chiamate agli strumenti; gli strumenti iniettati a metà conversazione tramite un messaggio di sistema senzacontentpossono essere chiamati normalmente.
Risposte
Le definizioni degli strumenti utilizzano una struttura piatta (name a livello superiore); costringere una chiamata utilizza anch'esso tool_choice: "required", e le chiamate vengono restituite come elementi di output function_call. Il supporto per il caricamento dinamico degli strumenti è in fase di sviluppo; per ora, dichiara tutti gli strumenti nel parametro tools a livello superiore.
response = client.responses.create(
model="kimi-k3",
input="Ciao",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Ottieni il meteo per una città",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice="required",
)
# L'output osservato contiene: {"type": "function_call", "name": "get_weather", "arguments": "{\"city\":\"London\"}"}
Messaggi
Gli strumenti utilizzano il formato di Anthropic (input_schema); costringi una chiamata con tool_choice: {"type": "any"} e disabilita le chiamate con {"type": "none"}. ❗ L'endpoint ufficiale dei Messaggi di Kimi K3 (compatibile con Anthropic) non supporta il caricamento dinamico degli strumenti: nei test, il messaggio di iniezione restituisce 200, ma lo strumento iniettato non ha effetto (il modello non può chiamarlo). Dichiara tutti gli strumenti nel parametro tools a livello superiore.
response = client.messages.create(
model="kimi-k3",
max_tokens=4096,
tools=[{
"name": "get_weather",
"description": "Ottieni il meteo per una città",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "Ciao"}],
)
# Osservato: stop_reason "tool_use"; il contenuto contiene un blocco tool_use che chiama get_weather
5. Output Strutturato
L'output strutturato fa sì che il modello restituisca contenuti che si conformano rigorosamente a uno schema JSON dato.
Chat Completions
response_format supporta json_schema con modalità strict.
completion = client.chat.completions.create(
model="kimi-k3",
messages=[
{"role": "user", "content": "Parigi è la capitale della Francia. Estrai il nome della città."}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "extract",
"strict": True,
"schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
},
)
# Contenuto di risposta osservato: {"city":"Parigi"}
Verificato: l'output è un JSON valido conforme allo schema.
Risposte
L'output strutturato è dichiarato tramite text.format.
response = client.responses.create(
model="kimi-k3",
input="Parigi è la capitale della Francia. Estrai il nome della città.",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}
},
)
# Testo di output osservato: {"city":"Parigi"}
Messaggi
❗ L'endpoint ufficiale dei Messaggi di Kimi K3 (compatibile con Anthropic) non supporta l'output strutturato: i campi di output strutturato vengono silenziosamente ignorati: la richiesta restituisce HTTP 200 con testo libero, senza errore o avviso di fallback, e il parsing JSON a valle fallirà. Quando hai bisogno di output strutturato, utilizza le API Chat Completions o Responses.
6. Il Caching del Contesto è Automatico
Il caching del contesto di K3 è abilitato automaticamente, senza parametri richiesti. Quando un prefisso lungo ripetuto colpisce la cache, l'importo colpito viene riportato nell'uso (il nome del campo varia a seconda dell'API). I prezzi della cache sono sulla pagina del modello.
Chat Completions
# uso della seconda chiamata con un prefisso lungo identico
"prompt_tokens_details": {"cached_tokens": 1536}
Verificato: la seconda richiesta con un prefisso lungo identico riporta il colpo inusage.prompt_tokens_details.cached_tokens.
Risposte
# uso della seconda chiamata Risposte con istruzioni lunghe identiche
"input_tokens_details": {"cached_tokens": 1536}
Messaggi
# uso della seconda chiamata Messaggi con un lungo prompt di sistema identico
"cache_read_input_tokens": 1536
7. Completamento del Prefisso partial
Il completamento del prefisso fa sì che il modello continui a generare da un dato prefisso, ben adatto al completamento del codice e all'output controllato dal formato.
Chat Completions
Passa "partial": true nell'ultimo messaggio dell'assistente.
messages = [
{"role": "user", "content": "Scrivi un haiku sul mare."},
{"role": "assistant", "content": "Le onde si piegano nella schiuma,", "partial": True},
]
# Prefisso: "Le onde si piegano nella schiuma," -> continuazione restituita dal modello
# il sale aleggia nell'aria—
# la luna tira la marea a casa.
Verificato: la generazione continua dal prefisso dato senza ripeterlo.
Risposte
Passa il prefisso come messaggio dell'assistente alla fine dell'array input; non è necessario alcun parametro partial.
response = client.responses.create(
model="kimi-k3",
input=[
{"role": "user", "content": "Scrivi un haiku sul mare."},
{"role": "assistant", "content": "Le onde si piegano nella schiuma,"},
],
)
# Continuazione osservata: "il sale aleggia nell'aria— / la luna tira la marea a casa."
Messaggi
La stessa capacità è raggiunta con il prefill nativo dell'assistente del protocollo, senza alcun parametro partial: passa il prefisso come ultimo messaggio dell'assistente.
response = client.messages.create(
model="kimi-k3",
max_tokens=4096,
messages=[
{"role": "user", "content": "Scrivi un haiku sul mare."},
{"role": "assistant", "content": "Le onde si piegano nella schiuma,"},
],
)
# Continuazione osservata: "il vento di sale porta il grido del gabbiano— / la marea tira ..."
8. Input Visivo
Le immagini vengono passate come base64; il formato del blocco di contenuto varia a seconda dell'API.
Chat Completions
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Qual è il colore dominante di questa immagine? Una parola."},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,<BASE64>"}},
],
}
]
# Contenuto di risposta osservato: "Rosso" (input: un PNG rosso solido 64x64)
Verificato: l'input dell'immagine base64 funziona, e il modello descrive correttamente l'immagine di test.
Risposte
input = [
{
"role": "user",
"content": [
{"type": "input_text", "text": "Qual è il colore dominante di questa immagine? Una parola."},
{"type": "input_image", "image_url": "data:image/png;base64,<BASE64>"},
],
}
]
# Testo di output osservato: "Rosso"
Messaggi
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Qual è il colore dominante di questa immagine? Una parola."},
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "<BASE64>"}},
],
}
]
# Testo di risposta osservato: "Rosso"
9. Riferimento Verificato: Latenza e Utilizzo di un Compito Lungo in una Singola Chiamata
Il pensiero di K3 è fissato al livello massimo, quindi le richieste singole per compiti complessi richiedono significativamente più tempo rispetto ai modelli tipici. Dati misurati da un compito di generazione di gioco HTML a file singolo (un prompt con un'immagine di riferimento, generato in un colpo solo senza iterazione): la richiesta singola ha impiegato 2.541 secondi (circa 42 minuti), con 74.994 token di completamento, di cui 54.486 (73%) erano token di pensiero; l'output finale era di 1.275 righe di codice direttamente eseguibile, con finish_reason stop.
Raccomandazioni lato client:
- Imposta i timeout del client su minuti o più a lungo, e preferisci lo streaming per compiti lunghi;
- Lascia ampio margine in
max_completion_tokens: in questo caso il solo pensiero ha consumato 54.486 token.
10. Capacità × Matrice di Supporto API
Ogni cella nella tabella sottostante è stata verificata il 2026-07-17 tramite chiamate effettive alle API di produzione di AIHubMix; ogni cella mostra la sintassi del parametro / campo per l'API corrispondente.
| Capacità | Chat Completions | Risposte | Messaggi |
|---|---|---|---|
| Contenuto di pensiero nella risposta | ✅ reasoning_content campo |
✅ elemento di output reasoning |
✅ blocco di contenuto thinking |
| Passaggio della storia del pensiero | ✅ messaggio dell'assistente restituito parola per parola | ✅ elementi di output restituiti parola per parola | ✅ blocchi di contenuto restituiti parola per parola |
| Forzare / disabilitare le chiamate agli strumenti | ✅ tool_choice: "required" / "none" |
✅ tool_choice: "required" |
✅ {"type": "any"} / {"type": "none"} |
| Caricamento dinamico degli strumenti | ✅ messaggio di sistema con tools (senza content) |
➖ Supporto in fase di sviluppo | ❗ Non supportato sull'endpoint ufficiale dei Messaggi (compatibile con Anthropic) |
| Output strutturato | ✅ response_format (json_schema + strict) |
✅ text.format (json_schema) |
❗ Non supportato sull'endpoint ufficiale; i campi vengono silenziosamente ignorati (200 + testo libero); usa Chat / Risposte invece |
| Misurazione automatica dei colpi in cache | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| Completamento del prefisso | ✅ "partial": true |
✅ prefill dell'assistente | ✅ prefill dell'assistente (nativo del protocollo) |
| Input visivo | ✅ image_url (base64) |
✅ input_image (base64) |
✅ blocco di contenuto image (base64) |
| Sequenze di stop | ✅ stop (limiti convalidati) |
➖ Supporto in fase di sviluppo | ❗ i limiti di stop_sequences sono convalidati in modo identico, ma in caso di colpo né stop_reason: "stop_sequence" né il valore di stop_sequence vengono restituiti |
FAQ
Quali API supporta K3 su AIHubMix?
Chat Completions (/v1/chat/completions), Risposte (/v1/responses), e l'API Messaggi compatibile con Claude (/v1/messages).
È possibile disabilitare o ridurre il pensiero?
No. Il pensiero di K3 è attivato per impostazione predefinita, e reasoning_effort supporta solo il singolo livello "max".
Perché reasoning_content deve essere restituito nelle conversazioni multi-turno?
K3 è addestrato con il pensiero preservato; Moonshot richiede che il messaggio precedente dell'assistente venga restituito completo e non modificato. La mancanza di storia del pensiero porta a una qualità di output instabile.
Quali sono i limiti sul parametro stop?
Al massimo 5 sequenze di stop, ciascuna non più lunga di 32 byte; superare uno di questi limiti restituisce un errore 400.
L'API Messaggi supporta output strutturato?
❗ No. L'endpoint ufficiale dei Messaggi di Kimi K3 (compatibile con Anthropic) ignora silenziosamente i campi di output strutturato (restituendo 200 con testo libero e senza errore). Per output strutturato, utilizza response_format su Chat Completions o text.format su Risposte.
Perché le richieste singole di K3 richiedono così tanto tempo?
Il pensiero di K3 è fissato al livello massimo, e i token di pensiero costituiscono una grande parte nei compiti complessi (73% dei token di completamento nel caso misurato). Imposta i timeout del client su minuti o più a lungo e utilizza lo streaming.
Per prezzi e stato in tempo reale, vedere la pagina del modello Kimi K3; per altri modelli, visita la galleria dei modelli.
Ultimo aggiornamento: 2026-07-17



