Documentation de l'API : Créer un appel de fonction de chat (Function Calling)
Description de l'API
À partir d'un prompt (invite), le modèle renverra un ou plusieurs résultats de complétion prédits, et peut également renvoyer les probabilités des tokens alternatifs à chaque position. Cet endpoint prend spécifiquement en charge la fonctionnalité d'Appel de fonction (Function Calling), permettant au modèle de choisir intelligemment entre la génération d'un message et l'appel d'une fonction spécifique.
- Référence officielle : Guide du Function Calling
Informations de base
- Méthode de requête :
POST - URL de la requête :
https://api.codingplanx.ai/v1/chat/completions - Format des données :
application/json
En-têtes de requête (Headers)
| Nom du paramètre | Type | Requis | Valeur d'exemple | Description |
|---|---|---|---|---|
Content-Type | string | Oui | application/json | Type de contenu des données |
Accept | string | Oui | application/json | Type de données accepté par le client |
Authorization | string | Non | Bearer {{YOUR_API_KEY}} | Identifiants d'authentification |
Corps de la requête (Body)
| Nom du paramètre | Type | Requis | Description |
|---|---|---|---|
model | string | Oui | L'ID du modèle à utiliser (par ex. gpt-4o). Pour plus de détails sur les modèles disponibles, veuillez consulter le tableau de compatibilité des endpoints de modèles. |
messages | array | Oui | Une liste de messages composant la conversation jusqu'à présent. Chaque objet doit contenir les champs role et content. |
tools | array | Oui | Une liste d'outils que le modèle peut appeler. Actuellement, seules les fonctions sont prises en charge comme outils. Utilisé pour fournir une liste de fonctions pour lesquelles le modèle peut générer une entrée JSON. |
tool_choice | object/string | Oui | Contrôle quelle fonction (le cas échéant) est appelée par le modèle. none signifie aucun appel ; auto signifie que le modèle choisit de lui-même. Il est également possible de forcer l'appel d'une fonction spécifique via {"type": "function", "function": {"name": "ma_fonction"}}. |
temperature | number | Non | Température d'échantillonnage, comprise entre 0 et 2. Des valeurs plus élevées (comme 0.8) rendent la sortie plus aléatoire, tandis que des valeurs plus basses (comme 0.2) la rendent plus déterministe. Il est recommandé de ne pas modifier à la fois ce paramètre et top_p. |
top_p | number | Non | Méthode d'échantillonnage par noyau (nucleus sampling). 0.1 signifie que seuls les tokens constituant les 10 % de la masse de probabilité supérieure sont pris en compte. Il est recommandé de ne pas modifier à la fois ce paramètre et temperature. |
n | integer | Non | Le nombre de choix de complétion de chat à générer pour chaque message d'entrée. La valeur par défaut est 1. |
stream | boolean | Non | Par défaut, false. Si défini sur true, des deltas de messages partiels seront envoyés sous forme de Server-Sent Events (SSE), et le flux se terminera par data: [DONE]. |
stop | string/array | Non | Jusqu'à 4 séquences où l'API arrêtera de générer d'autres tokens. Par défaut, null. |
max_tokens | integer | Non | Le nombre maximum de tokens à générer dans la complétion de chat. La longueur totale des tokens d'entrée et générés est limitée par la longueur de contexte du modèle. |
presence_penalty | number | Non | Nombre entre -2.0 et 2.0. Des valeurs positives pénalisent les nouveaux tokens selon s'ils apparaissent déjà dans le texte, augmentant la probabilité que le modèle aborde de nouveaux sujets. |
frequency_penalty | number | Non | Nombre entre -2.0 et 2.0. Des valeurs positives pénalisent les nouveaux tokens en fonction de leur fréquence d'apparition dans le texte, réduisant la probabilité que le modèle répète les mêmes phrases. |
logit_bias | object | Non | Modifie la probabilité que des tokens spécifiés apparaissent dans la complétion. Accepte un objet JSON associant des ID de tokens à des valeurs de biais (de -100 à 100). |
user | string | Non | Un identifiant unique représentant votre utilisateur final, qui peut aider à surveiller et détecter les comportements abusifs. |
response_format | object | Non | Un objet spécifiant le format que le modèle doit utiliser en sortie. Par exemple, utilisez { "type": "json_object" } pour activer le mode JSON. |
seen | integer | Non | Fonctionnalité en phase de test. Si spécifié, le système tentera d'effectuer un échantillonnage déterministe afin que des requêtes avec les mêmes seed (graine) et paramètres renvoient le même résultat. |
Exemple de corps de requête
{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "You are a helpful customer support assistant. Use the supplied tools to assist the user."
},
{
"role": "user",
"content": "Hi, can you tell me the delivery date for my order?"
},
{"role": "assistant", "content": "Hi there! I can help with that. Can you please provide your order ID?"},
{"role": "user", "content": "i think it is order_12345"}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_delivery_date",
"description": "Get the delivery date for a customer's order. Call this whenever you need to know the delivery date, for example when a customer asks 'Where is my package'",
"parameters": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "The customer's order ID."
}
},
"required": [
"order_id"
],
"additionalProperties": false
}
}
}
]
}
Paramètres de réponse (Response)
| Nom du paramètre | Type | Description |
|---|---|---|
id | string | Identifiant unique pour la complétion de chat. |
object | string | Type d'objet, généralement chat.completion. |
created | integer | Horodatage Unix (timestamp) de la création de la complétion de chat. |
choices | array | Liste des choix de complétion de chat. |
? index | integer | L'index de ce choix dans la liste des options. |
? message | object | Objet du message de réponse généré par le modèle, contenant role et content. |
? finish_reason | string | La raison pour laquelle le modèle a cessé de générer des tokens (ex. stop, length ou déclenchement d'un appel de fonction). |
usage | object | Informations statistiques sur la consommation de tokens pour cette requête. |
? prompt_tokens | integer | Nombre de tokens consommés par le prompt (entrée). |
? completion_tokens | integer | Nombre de tokens consommés par la réponse générée par le modèle. |
? total_tokens | integer | Nombre total de tokens consommés lors de cette requête. |
Exemple de réponse (200 OK)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
Foire Aux Questions (FAQs)
Q1 : Comment forcer le modèle à appeler une fonction spécifique que j'ai désignée ?
R : Vous pouvez accomplir cela en configurant le paramètre tool_choice. Par exemple, si le nom de votre fonction est get_weather, vous pouvez définir tool_choice sur : {"type": "function", "function": {"name": "get_weather"}}. Ainsi, le modèle ignorera les réponses textuelles normales et sera contraint de générer les arguments pour cette fonction spécifique.
Q2 : Pourquoi le contenu de ma réponse est-il tronqué ?
R : Veuillez vérifier la valeur de choices[0].finish_reason dans la réponse. S'il s'agit de "length", cela signifie que le texte généré a dépassé la limite du paramètre max_tokens que vous avez défini, ou qu'il a atteint la longueur maximale de contexte du modèle. Vous pouvez essayer d'augmenter la valeur de max_tokens.
Q3 : temperature et top_p permettent tous deux de contrôler l'aléatoire, comment dois-je les utiliser ?
R : Ces deux paramètres ajustent effectivement la diversité de la sortie du modèle. Des valeurs élevées rendront la sortie plus créative, tandis que des valeurs plus basses la rendront plus rigoureuse et déterministe. La recommandation officielle est de ne modifier qu'un seul de ces paramètres et de conserver l'autre à sa valeur par défaut. Ne modifiez pas les deux simultanément pour éviter des résultats imprévisibles.
Q4 : Quel est le format des données renvoyées par l'API lorsque stream: true est activé ?
R : Une fois le mode de streaming activé, l'API ne renvoie plus un objet JSON unique, mais un flux de données au format Server-Sent Events (SSE). Les données seront envoyées par blocs progressifs sous la forme data: {"id": "...", "choices": [{"delta": {"content": "..."}}]}. Lorsque la transmission est terminée, le dernier message envoyé sera data: [DONE].
Q5 : Quelles sont les précautions à prendre lors de l'activation du mode JSON via response_format ?
R : Lorsque vous définissez response_format sur { "type": "json_object" }, vous devez absolument indiquer explicitement au modèle de générer des données au format JSON dans les messages (dans le prompt système ou utilisateur). Si vous ne le faites pas, le modèle risque de s'enfermer dans une boucle infinie en générant des espaces blancs, ce qui entraînera une expiration de la requête (timeout) ou l'atteinte de la limite maximale de tokens.