FR ▾
Obtenir votre clé API

Paramètres de l'API de LLM : des champs de requête aux champs de réponse

La première lecture des paramètres peut effrayer. Imaginez une commande au restaurant : messages est l'historique, temperature l'improvisation du chef, max_tokens la portion max, et tools la possibilité de demander des ingrédients. Nous détaillons chaque champ ci-dessous.

Mis à jour le

Points clés

  • messages combine les rôles system, user, assistant et tool. Le modèle n'a pas de mémoire ; vous devez fournir l'historique.
  • temperature contrôle la randomisation, top_p la plage des candidats ; leurs effets sont similaires, il suffit généralement de n'en ajuster qu'un seul.
  • finish_reason indique comment traiter la réponse : stop (fin normale), length (tronqué), tool_calls (appel de fonctions).
  • usage est la seule source fiable pour la facturation ; lisez-le à chaque requête.

À quoi ressemble une requête

L'endpoint est POST https://api.apidamoxing.com/v1/chat/completions, l'en-tête d'authentification est Authorization: Bearer <key>, le corps de la requête est au format JSON et est compatible avec le format de complétion de chat d'OpenAI. Voici un exemple de requête complète utilisant les champs courants :

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": ["###"]
  }'

Notez que model doit être rempli avec uncensored, car le service ne propose qu'un seul modèle sans autres options. Vous pouvez le vérifier avec GET /v1/models. Nous expliquons les champs un par un ci-dessous.

Les paramètres se classent en trois catégories : « quoi dire » (messages, tools), « comment le dire » (temperature, top_p), « dire combien et quand » (max_tokens, stop, stream).

messages : le « carnet de notes » de la conversation

messages est un tableau avec role et content. Imaginez un compte-rendu : le modèle relit tout à chaque tour. Il ne se souvient pas de lui-même ; vous devez fournir l'historique complet.

roleAuteurUsage
systemVous (développeur)Rôles, règles, format. À placer en premier.
userUtilisateur finalQuestion ou instruction
assistantModèle (ou historique)Réponses précédentes pour le contexte
toolVotre programmeRésultat d'appel de fonctions, avec tool_call_id

Une astuce courante : pour que le modèle continue d'écrire dans un certain ton, vous pouvez construire vous-même un message assistant à ajouter à l'historique. Notez que la somme du prompt et de la sortie ne doit pas dépasser 100,000 token ; plus l'historique est long, plus il occupe d'espace.

Prenons un exemple concret. Vous créez un assistant de service client avec le prompt system « Répondez uniquement aux questions liées aux commandes, en trois phrases maximum ». L'utilisateur demande d'abord le délai de livraison, puis demande « Et pour les retours ? » lors de la deuxième question. La deuxième requête doit inclure successivement : system, le message user de la première question, la réponse assistant du modèle pour la première question, et le message user de la deuxième question. S'il manque l'un de ces éléments, le modèle ne saura pas à quoi « les retours » fait référence.

Paramètres d'échantillonnage : ajuster la « marge de manœuvre »

Lors de la génération de chaque token, le modèle attribue d'abord une probabilité à tous les candidats, puis procède à un tirage au sort. Les deux paramètres suivants sont des boutons pour ajuster les règles de ce tirage :

ParamètreAnalogieComprendreValeurs courantes
temperatureLa créativité du chefPlus la valeur est faible, plus le modèle est conservateur et stable ; plus elle est élevée, plus les réponses sont divergentes.De 0 à 1,2 : utilisez une valeur basse pour les Q/R et une valeur élevée pour la création de contenu.
top_pTirer uniquement parmi les premiers candidatsTirer uniquement parmi les candidats dont la probabilité cumulée atteint pDe 0,8 à 1 ; la valeur par défaut convient généralement.

Les deux contrôlent le niveau de « hasard », mais sous des angles différents. Il est difficile d'isoler l'effet de l'un ou de l'autre si vous les réglez simultanément ; il est donc conseillé de n'en modifier qu'un à la fois. Ces champs de sampling standard sont transmis tels quels ; l'interface ne les réécrit pas.

Prenons un exemple numérique : supposons que les trois candidats les plus probables aient des probabilités de 60 %, 30 % et 10 %. Baisser temperature favorise davantage le candidat à 60 %, rendant la sortie plus similaire à un choix systématique du premier candidat ; l'augmenter rapproche les probabilités, facilitant le tirage des candidats moins probables. Avec top_p à 0,9, seuls les deux premiers candidats (cumulant 90 %) sont conservés ; le troisième est éliminé. Ces chiffres sont des hypothèses illustratives, pas des probabilités réelles.

Contrôle de la longueur et des arrêts : max_tokens, stop, stream

ParamètreFonctionPoints clés
max_tokensLimite le nombre maximum de tokens générés pour cette requête.Par défaut 2048, maximum 32,000 par requête ; la somme avec le prompt ne doit pas dépasser 100,000
stopArrête la génération dès qu’une chaîne de caractères spécifiée est rencontrée.Accepte un tableau de chaînes ; idéal pour le découpage ou la coupure de formats fixes.
streamActive le retour en streaming.Défini à true, le streaming envoie les données par blocs via SSE, et ajoute automatiquement un dernier bloc contenant usage.

max_tokens agit comme la taille d’une assiette : si l’assiette est trop petite, le service est interrompu avant la fin, et finish_reason vaudra length. stop fonctionne comme un signal convenu : le modèle s’arrête dès qu’il le reçoit. stream ne modifie pas le contenu, seulement le mode de livraison : au lieu d’attendre que tout soit prêt, le contenu est envoyé morceau par morceau, ce qui donne à l’utilisateur une impression de réponse plus rapide.

Une utilisation pratique de stop : si vous demandez au modèle de respecter un format fixe « Question : … Réponse : …### », définir ### comme valeur de stop permet d’arrêter automatiquement la génération à ce séparateur. Cela économise des tokens et évite les digressions. Notez que lorsque stop est déclenché, finish_reason vaut également stop ; si vous devez distinguer les cas, vérifiez manuellement le contenu.

tools et tool_choice : permettre au modèle de « vous appeler »

Le modèle n’a pas accès aux données en temps réel. La méthode function calling consiste à lui indiquer quelles fonctions sont disponibles. Lorsqu’il en a besoin, il ne répond pas directement, mais retourne une demande « Appeler la fonction X avec les paramètres Y ». Votre programme exécute la fonction et renvoie le résultat ; le modèle l’utilise ensuite pour formuler sa réponse. Le format est compatible avec OpenAI.

ParamètreValeurDescription
toolsTableau de descriptions de fonctionsChaque élément contient name, description et parameters (au format JSON Schema).
tool_choice"auto" / "none" / nom de fonction spécifiqueauto laisse le modèle décider ; none désactive les appels ; une fonction spécifique force son appel.
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)

Le processus se fait en deux étapes : la première étape retourne tool_calls ; la deuxième étape ajoute le résultat avec role: tool à la suite, puis effectue la requête. Plus la description est précise, mieux le modèle sait quand appeler. Les paramètres sont une chaîne JSON ; utilisez json.loads pour les analyser et les valider, et ne leur faites pas aveuglément confiance.

Champs de réponse : comprendre le « reçu »

Une réponse réussie ressemble généralement à ceci, avec des champs fixes :

{
  "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}
}
ChampSignification
choicesTableau de résultats (généralement un seul élément). Le contenu se trouve dans choices[0].message.content.
finish_reasonRaison de fin : stop pour une fin normale ; length si la limite max_tokens est atteinte ; tool_calls si le modèle demande l’appel d’une fonction.
usage.prompt_tokensTokens consommés pour l’entrée.
usage.completion_tokensTokens consommés pour la sortie.
usage.total_tokensSomme des deux.

Voyez finish_reason : length pour tronquer ou continuer ; tool_calls pour exécuter. Pour l'usage, voyez token & facturation.

Erreurs courantes sur les paramètres

  • Considérez max_tokens comme une « limite de sortie ». Il ne contrôle que la sortie ; l'entrée est sous votre contrôle.
  • Penser que le modèle se souvient de la requête précédente : chaque requête est indépendante ; c’est à vous de gérer l’historique.
  • Définir temperature à 0 ne signifie pas que les résultats seront strictement identiques à chaque fois. Cela rendra le modèle plus stable, mais il ne faut pas supposer une concordance mot à mot.
  • Lire directement choices[0].message en mode streaming : les blocs contiennent des delta ; vous devez les assembler vous-même.
  • Oublier d’ajouter le message assistant contenant tool_calls après un appel tool, ce qui provoque une erreur à l’étape suivante.

Les significations des codes d'erreur et les stratégies de nouvelle tentative sont décrites dans la documentation. Pour un exemple complet intégrant ces paramètres, consultez l'article Création d'un chatbot.

Questions fréquentes

Peut-on définir temperature et top_p simultanément ?

Oui, mais il est difficile d’isoler l’effet de l’un ou de l’autre. Dans la plupart des cas, ajuster uniquement temperature suffit ; utilisez top_p uniquement lorsque vous avez besoin d’un contrôle précis de la plage des candidats.

Que faire si finish_reason vaut length ?

Cela signifie que la sortie a été tronquée à la limite max_tokens. Vous pouvez augmenter max_tokens (jusqu’à 32 000) ou demander au modèle de générer par segments.

Le format de tools est-il identique à celui d’OpenAI ?

Oui, vous pouvez utiliser les champs tools et tool_choice au format OpenAI ; la réponse contiendra également des tool_calls avec la même structure.

Comment récupérer l’usage dans une réponse en streaming ?

Lorsque stream est activé, un dernier bloc contenant usage est automatiquement ajouté à la fin. Il suffit de le lire ; aucun paramètre supplémentaire n’est nécessaire.

Remplissez simplement le formulaire pour obtenir votre clé

Créez un compte, copiez votre clé et modifiez l’URL de base. La configuration est aussi simple que cela.

Obtenir votre clé API