IT ▾
Ottieni chiave API

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.

roleChi scriveScopo
systemTu (sviluppatore)Definisce identità, regole e formato; va all'inizio
userUtente finaleDomande o istruzioni
assistantModello (o cronologia inserita da te)Risposte precedenti per il contesto multi-turno
toolIl tuo programmaRisultato 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:

ParametroAnalogiaCome interpretarloValori comuni
temperatureCreatività dello chefPiù basso è più conservativo; più alto è più creativoDa 0 a 1,2: valori bassi per i Q&A, valori alti per la creazione di contenuti
top_pSeleziona solo tra i primi candidatiSeleziona solo tra i candidati che raggiungono la probabilità cumulativa pDa 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

ParametroFunzionePunti chiave
max_tokensLimita il numero massimo di token generati in questa richiestaDefault 2048, max 32.000; insieme al prompt non supera 100.000
stopInterrompe la generazione quando viene rilevata la stringa specificataAccetta un array di stringhe; utile per segmentare o troncare formati fissi
streamAttiva il ritorno dei dati in streamingImposta 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.

ParametroValoreDescrizione
toolsArray di descrizioni delle funzioniOgni elemento contiene name, description e parameters in formato JSON Schema
tool_choice"auto" / "none" / nome della funzione specificaauto 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}
}
CampoSignificato
choicesArray dei risultati, solitamente con un solo elemento; il testo è in choices[0].message.content
finish_reasonMotivo 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_tokensToken consumati per l'input
usage.completion_tokensToken consumati per l'output
usage.total_tokensLa 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.

Ottieni la chiave API