Guida AI parametri dell'API per LLM: dai campi di richiesta a quelli di risposta
La prima volta che leggi la documentazione dell'endpoint di chat completion, la lunga lista di parametri può spaventare. Immagina una chiamata come un ordine in ristorante: messages è la conversazione con il cameriere, temperature quanto deve improvvisare lo chef, max_tokens la porzione massima, tools il permesso di chiamare la cucina. Spieghiamo ogni campo con questo approccio.
Aggiornato il
Punti chiave
- messages è composto da quattro ruoli: system, user, assistant, tool. Il modello non ha memoria, devi portarti la cronologia.
- temperature controlla la casualità, top_p il range dei candidati. Hanno effetti simili: usa solo uno dei due.
- finish_reason indica come gestire il risultato: stop è normale, length è tagliato, tool_calls richiede l'esecuzione della funzione.
- usage è la base affidabile per costi e budget: leggilo ogni volta.
Com'è fatta una richiesta
L'endpoint è POST https://api.apidamoxing.com/v1/chat/completions, l'header di autenticazione è Authorization: Bearer <key>, il corpo è JSON e il formato è compatibile con la chat completion di OpenAI. Ecco una richiesta completa con i campi comuni:
curl https://api.apidamoxing.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "你是一位耐心的天文科普作者。"},
{"role": "user", "content": "为什么月亮总是同一面朝向地球?"}
],
"temperature": 0.7,
"top_p": 0.9,
"max_tokens": 400,
"stop": ["###"]
}'Nota che model deve essere solo uncensored, poiché il servizio offre un solo modello senza alternative. Verifica con GET /v1/models. Di seguito spieghiamo i campi uno per uno.
Leggendo tutto, vedrai che i parametri rientrano in tre categorie: cosa dire (messages, tools), come dirlo (temperature, top_p), quanto dire e quando fermarsi (max_tokens, stop, stream). Questa classificazione ti aiuta a intuire lo scopo di nuovi campi.
messages: il "registro" della conversazione
messages è un array di oggetti con role e content. Immagina un verbale di riunione: il modello legge tutto da capo e scrive la pagina successiva. Non ricorda cosa ha letto prima, quindi devi includere tu la cronologia.
| role | Chi scrive | Scopo |
|---|---|---|
| system | Tu (sviluppatore) | Definisce identità, regole e formato; va all'inizio |
| user | Utente finale | Domande o istruzioni |
| assistant | Modello (o cronologia inserita da te) | Risposte precedenti per il contesto multi-turno |
| tool | Il tuo programma | Risultato della funzione, richiede tool_call_id |
Trucco: inserisci una messaggio assistant finto per impostare il tono. Attenzione: prompt + output non superino 100.000 token.
Esempio: assistant che risponde solo di ordini. Per la seconda domanda, messages deve includere system, user1, assistant1, user2. Senza tutto, il modello non capisce.
Parametri di campionamento: regola lo "spazio di manovra"
Il modello assegna probabilità a ogni candidato. Questi due parametri regolano la selezione:
| Parametro | Analogia | Come interpretarlo | Valori comuni |
|---|---|---|---|
| temperature | Creatività dello chef | Più basso è più conservativo; più alto è più creativo | Da 0 a 1,2: valori bassi per i Q&A, valori alti per la creazione di contenuti |
| top_p | Seleziona solo tra i primi candidati | Seleziona solo tra i candidati che raggiungono la probabilità cumulativa p | Da 0,8 a 1; il valore predefinito è solitamente sufficiente |
Entrambi controllano la casualità. Modificarli insieme confonde i risultati: agisci su uno alla volta. I parametri standard vengono passati così come sono.
Esempio: probabilità 60%, 30%, 10%. temperature basso favorisce il primo; alto equalizza. top_p 0.9 mantiene solo i primi due (90%). Numeri ipotetici.
Controllo della lunghezza e interruzione: max_tokens, stop, stream
| Parametro | Funzione | Punti chiave |
|---|---|---|
| max_tokens | Limita il numero massimo di token generati in questa richiesta | Default 2048, max 32.000; insieme al prompt non supera 100.000 |
| stop | Interrompe la generazione quando viene rilevata la stringa specificata | Accetta un array di stringhe; utile per segmentare o troncare formati fissi |
| stream | Attiva il ritorno dei dati in streaming | Imposta true per invio a blocchi via SSE; viene aggiunto automaticamente un blocco con usage alla fine |
max_tokens è come la dimensione del piatto: se il piatto è piccolo, il cibo viene ritirato prima di essere servito del tutto e finish_reason sarà length. stop funziona come un segnale convenzionale: lo chef smette quando lo riceve. stream non cambia il contenuto, solo il modo di consegna: invece di "servire tutto insieme", si serve "un boccone alla volta", dando all'utente la sensazione di una risposta più rapida.
Un uso molto pratico di stop: chiedi al modello di seguire un formato fisso come "Domanda: ... Risposta: ...###" e imposta ### come stop. La generazione si interromperà automaticamente al separatore, risparmiando token ed evitando che il modello aggiunga discorsi superflui. Nota: quando stop viene attivato, anche finish_reason sarà stop; se devi distinguere i casi, devi verificare il contenuto tu stesso.
tools e tool_choice: far "chiamare" il modello a te
Il modello non può recuperare dati in tempo reale. Con function calling, tu fornisci al modello la descrizione delle funzioni disponibili; quando lo ritiene necessario, il modello non risponde direttamente, ma restituisce "chiama la funzione X con i parametri Y". Il tuo programma esegue la funzione e restituisce il risultato al modello, che a sua volta organizza la risposta finale. Il formato è compatibile con OpenAI.
| Parametro | Valore | Descrizione |
|---|---|---|
| tools | Array di descrizioni delle funzioni | Ogni elemento contiene name, description e parameters in formato JSON Schema |
| tool_choice | "auto" / "none" / nome della funzione specifica | auto lascia la decisione al modello; none disabilita le chiamate; specificare una funzione forza il suo utilizzo |
import json
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.apidamoxing.com/v1", api_key=os.environ["API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_tide_time",
"description": "查询某港口今天的高潮时刻",
"parameters": {
"type": "object",
"properties": {"port": {"type": "string", "description": "港口名称"}},
"required": ["port"],
},
},
}]
messages = [{"role": "user", "content": "青岛今天几点涨潮?"}]
first = client.chat.completions.create(
model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
args = json.loads(call.function.arguments)
result = {"port": args["port"], "high_tide": "14:20"} # 这里换成你自己的查询
messages.append(msg)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result, ensure_ascii=False)})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
else:
print(msg.content)Fase 1: ottieni tool_calls. Fase 2: aggiungi il risultato con role tool e ripeti. Una description dettagliata aiuta. Il parametro è una stringa JSON: usa json.loads per validare.
Campi di risposta: leggere la "ricevuta"
Una risposta corretta ha approssimativamente questa struttura, con campi fissi:
{
"id": "chatcmpl-xxxx",
"object": "chat.completion",
"model": "uncensored",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "因为潮汐锁定……"},
"finish_reason": "stop"
}
],
"usage": {"prompt_tokens": 38, "completion_tokens": 212, "total_tokens": 250}
}| Campo | Significato |
|---|---|
| choices | Array dei risultati, solitamente con un solo elemento; il testo è in choices[0].message.content |
| finish_reason | Motivo di terminazione: stop indica una terminazione normale; length indica che è stato raggiunto il limite di max_tokens; tool_calls indica che il modello ha richiesto l'esecuzione di una funzione |
| usage.prompt_tokens | Token consumati per l'input |
| usage.completion_tokens | Token consumati per l'output |
| usage.total_tokens | La somma dei due valori precedenti |
Nel codice, controlla prima finish_reason: se è length, avvisa l'utente che il contenuto è stato troncato o prosegui automaticamente; se è tool_calls, passa al ramo di esecuzione delle funzioni. L'utilizzo di usage è spiegato nel dettaglio nella guida sui token e i costi.
I principali errori sui parametri
- Credere che max_tokens limiti l'input. Controlla solo l'output; l'input lo gestisci tu.
- Pensare che il modello ricordi la richiesta precedente. Ogni richiesta è indipendente: porta tu la cronologia.
- Impostare temperature a 0 e aspettarsi risultati identici. Aumenta la stabilità, ma non garantire la corrispondenza carattere per carattere.
- Leggere choices[0].message nello streaming. I blocchi contengono delta: devi assemblarli tu.
- Dopo la chiamata allo strumento, hai dimenticato di aggiungere il messaggio dell'assistant con tool_calls, causando un errore nel secondo turno.
Significato errori e retry indocumentazione. Esempio completo inChatbot.
Domande frequenti
Posso impostare sia temperature che top_p?
Sì, ma è difficile isolare l'effetto. Usa solo temperature nella maggior parte dei casi; regola top_p solo per un controllo preciso.
Significa che l'output ha raggiunto il limite di max_tokens ed è stato troncato. Puoi aumentare max_tokens (fino a 32.000) o chiedere al modello di generare in segmenti.
Indica che l'output è stato troncato per aver raggiunto max_tokens. Puoi aumentare max_tokens, con un limite massimo di 32,000, oppure far generare al modello il testo in segmenti.
Sì, utilizza il formato OpenAI per tools e tool_choice; anche tool_calls nella risposta ha la stessa struttura.
Come recuperare l'utilizzo in una risposta streaming?
Con stream attivo, alla fine viene aggiunto automaticamente un blocco contenente usage; basta leggerlo, senza parametri aggiuntivi.
Compila il modulo per ottenere la chiave
Crea un account, copia la chiave e modifica il Base URL. La configurazione è semplice.
Crea un account, copia la chiave e modifica il Base URL. La configurazione è così semplice.