Home → Assistenza

400 forzando una chiamata a uno strumento su un modello di ragionamento

Imposta tool_choice su auto e indica nel prompt quando lo strumento va usato. Sui modelli in cui il ragionamento è sempre attivo, una chiamata forzata dovrebbe saltare quel ragionamento, quindi l'API rifiuta la richiesta invece di degradare il modello in silenzio.

Cosa vedi

Perché succede

Voler forzare una chiamata a uno strumento è ragionevole. È così che molti framework garantiscono un output strutturato: definiscono uno strumento, lo forzano e ne analizzano gli argomenti. Il trucco smette di funzionare sui modelli che ragionano prima di ogni risposta, perché il percorso forzato salta proprio il passaggio che stai pagando.

Il rifiuto è meglio dell'alternativa. Un'API che accettasse il parametro e lo ignorasse ti farebbe credere di aver vincolato il modello quando non è così: un bug che emerge molto più tardi, in produzione, come output occasionalmente impossibile da analizzare.

Gli stessi modelli di solito rifiutano valori non predefiniti di temperature, top_p e top_k, e non supportano il precompilamento del turno dell'assistente. Il codice portato da un modello più vecchio della stessa famiglia ne incontra diversi insieme, e sembra così un problema di autenticazione o di endpoint invece che di parametri.

Verifica se la causa è questa

Invia la stessa richiesta due volte cambiando solo tool_choice:

for CHOICE in '{"type":"auto"}' '{"type":"any"}'; do
  echo -n "$CHOICE -> "
  curl -s -o /dev/null -w '%{http_code}\n' \
    'YOUR_BASE_URL/chat/completions' \
    -H 'Authorization: Bearer YOUR_KEY' \
    -H 'Content-Type: application/json' \
    -d "{\"model\":\"YOUR_MODEL\",\"max_tokens\":16,
         \"messages\":[{\"role\":\"user\",\"content\":\"hi\"}],
         \"tool_choice\":$CHOICE}"
done

Se auto restituisce 200 e any restituisce 400, il modello non supporta l'uso forzato degli strumenti. Non c'è nulla di sbagliato nella tua chiave o nel tuo endpoint.

Come risolvere

  1. Lascia tool_choice su auto e sii esplicito nel promptIndica chiaramente la condizione: «chiama search quando la domanda richiede informazioni aggiornate». I modelli di ragionamento seguono bene questa istruzione; è il loro mestiere.
  2. Usa una risposta vincolata da schema invece di uno strumento forzatoSe forzavi uno strumento solo per ottenere un output strutturato, un parametro di output strutturato o di JSON schema fa direttamente quel lavoro ed è di solito ancora supportato.
  3. Controlla contemporaneamente temperatureI framework impostano una temperature predefinita che non hai mai scelto. Su questi modelli qualsiasi valore non predefinito dà 400, identico in apparenza all'errore di tool_choice.
  4. Valida l'output invece di fidarti del vincoloAnche dove forzare funziona, i modelli emettono argomenti che non rispettano lo schema. Vale la pena scrivere una volta per tutte un'analisi con percorso di ripiego.
Su APICLAN questo riguarda claude-fable-5-1 e claude-fable-5: l'uso forzato degli strumenti, i parametri di campionamento non predefiniti e il precompilamento dell'assistente vengono tutti rifiutati. La guida a Fable 5.1 riporta l'elenco completo insieme ai prezzi della cache.

Articoli correlati

Unexpected token '<' quando chiami un'API compatibile con OpenAI401 invalid API key: quando la chiave sembra giusta ma continua a fallire

Ultima verifica: 2026-10-01. Scritto a partire da problemi diagnosticati su un gateway compatibile con OpenAI in produzione, non raccolto da altri siti.