0Pricing
AI Engineering Academy · Leçon

Le point d’accès Chat Completions

Comprenez le tableau de messages avec les rôles système, utilisateur et assistant, rédigez votre premier prompt et interprétez l’objet de réponse renvoyé par l’API.

Le point d’accès Chat Completions est une leçon AI Engineering Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Engineering Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Engineering Academy comprend 4 leçons au total.

L’architecture du tableau de messages

Le point de terminaison Chat Completions fonctionne avec un tableau de messages : une liste de tours de parole, chacun associé à un rôle (système, utilisateur ou assistant). Le modèle est sans état ; vous devez donc envoyer l’historique à chaque fois.

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {'role': 'system', 'content': 'You are a concise Python tutor.'},
        {'role': 'user', 'content': 'What is a list comprehension?'}
    ]
)

print(response.choices[0].message.content)

Le rôle système : définir le comportement

Le message système est votre principal levier d’action. Il définit la personnalité, les règles et le format du modèle avant même que l’utilisateur ne saisisse un mot. Prenez le temps de le soigner : il influence tout le reste. Consultez le code.

system_prompt = '''You are a customer support agent for TechShop.
You help customers with: order tracking, returns, and product questions.
You do NOT discuss pricing changes or competitor products.
Always respond in 2-3 sentences maximum.
If you cannot help, say: 'Let me connect you with a human agent.'
'''

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[
        {'role': 'system', 'content': system_prompt},
        {'role': 'user', 'content': 'Where is my order #12345?'}
    ]
)

Gérer une conversation à plusieurs tours

Pour faire durer une conversation, vous ajoutez chaque tour au tableau de messages avec append, puis vous renvoyez l’ensemble. C’est ainsi que le modèle semble se souvenir : vous lui fournissez tout l’historique.

history = [
    {'role': 'system', 'content': 'You are a helpful assistant.'}
]

def chat(user_message):
    history.append({'role': 'user', 'content': user_message})
    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=history
    )
    assistant_reply = response.choices[0].message.content
    history.append({'role': 'assistant', 'content': assistant_reply})
    return assistant_reply

print(chat('My name is Alice.'))
print(chat('What is my name?'))  # model remembers 'Alice'

Anatomie de la réponse de l’API

La réponse est un objet, pas seulement du texte. choices contient la réponse, finish_reason indique pourquoi la génération s’est arrêtée et usage comptabilise les jetons — ce qui détermine votre coût. Consignez ces informations en production.

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[{'role': 'user', 'content': 'Say hello in one word.'}]
)

# Accessing response fields
print('Content:', response.choices[0].message.content)
print('Finish reason:', response.choices[0].finish_reason)  # 'stop'
print('Model:', response.model)  # exact version like gpt-4o-mini-2024-07-18
print('Prompt tokens:', response.usage.prompt_tokens)
print('Completion tokens:', response.usage.completion_tokens)
print('Total tokens:', response.usage.total_tokens)

Comprendre finish_reason

finish_reason vous indique pourquoi la génération s’est arrêtée. « stop » signifie qu’elle est terminée ; « length » signifie qu’elle a atteint max_tokens et que la réponse a été coupée en plein milieu. Vérifiez-le toujours : la troncature est un bogue silencieux.

def safe_completion(messages, max_tokens=500):
    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=messages,
        max_tokens=max_tokens
    )
    choice = response.choices[0]
    
    if choice.finish_reason == 'length':
        print(f'WARNING: Response was truncated at {max_tokens} tokens!')
    elif choice.finish_reason == 'content_filter':
        print('WARNING: Response blocked by content filter!')
        return None
    
    return choice.message.content

Choisir le modèle adapté

Choisissez le modèle adapté à la tâche. gpt-4o est le plus puissant pour les raisonnements complexes ; gpt-4o-mini coûte beaucoup moins cher et convient très bien à la plupart des tâches. Effectuez des comparaisons avant de supposer qu’un modèle plus grand donnera de meilleurs résultats.

# Model comparison guidance
models = {
    'gpt-4o': {
        'use_for': 'Complex reasoning, code generation, nuanced analysis',
        'input_cost_per_1M': 2.50,  # USD
        'output_cost_per_1M': 10.00
    },
    'gpt-4o-mini': {
        'use_for': 'Classification, extraction, summarization, Q&A',
        'input_cost_per_1M': 0.15,
        'output_cost_per_1M': 0.60
    }
}
# gpt-4o is ~17x more expensive on input tokens

Les types de contenu dans les messages

Le contenu d’un message ne se limite pas au texte. Avec les modèles de vision comme gpt-4o, vous transmettez une liste mêlant texte et images : vous pouvez ainsi poser des questions sur des graphiques ou des captures d’écran.

# Sending an image to a vision-capable model
response = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {
            'role': 'user',
            'content': [
                {
                    'type': 'text',
                    'text': 'What is in this image? Describe in one sentence.'
                },
                {
                    'type': 'image_url',
                    'image_url': {'url': 'https://example.com/photo.jpg'}
                }
            ]
        }
    ]
)

Le paramètre n : plusieurs complétions

Le paramètre n renvoie plusieurs complétions pour une seule invite. C’est pratique pour choisir la meilleure ou évaluer la confiance : si les n réponses concordent, le modèle est probablement sûr de lui ; si elles divergent, soyez prudent.

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[{'role': 'user', 'content': 'Name the capital of Germany.'}],
    n=3,  # generate 3 independent completions
    temperature=0.5
)

for i, choice in enumerate(response.choices):
    print(f'Completion {i+1}: {choice.message.content}')

# Check if all completions agree (confidence signal)
answers = [c.message.content.strip() for c in response.choices]
print('All agree:', len(set(answers)) == 1)

Traiter la réponse comme une chaîne de caractères

Pour récupérer la réponse sous forme de texte, utilisez toujours le chemin response.choices[0].message.content. Encapsulez-le dans une fonction auxiliaire et gérez le cas None, qui peut se produire lors d’appels d’outils ou à cause de filtres.

def get_completion(prompt, system='You are a helpful assistant.', model='gpt-4o-mini'):
    '''Simple helper that returns the response text as a string.'''
    response = client.chat.completions.create(
        model=model,
        messages=[
            {'role': 'system', 'content': system},
            {'role': 'user', 'content': prompt}
        ]
    )
    content = response.choices[0].message.content
    if content is None:
        raise ValueError(f'No content in response. Finish reason: {response.choices[0].finish_reason}')
    return content

result = get_completion('Explain recursion in one sentence.')
print(result)

Inspecter la requête et la réponse brutes

Vous déboguez des réponses étranges ? Inspectez la requête et la réponse brutes. En définissant OPENAI_LOG=debug, vous affichez le corps complet dans votre terminal : c’est le moyen le plus rapide de voir ce qui circule réellement.

import json
import httpx

# Enable debug logging (shows full request/response)
import os
os.environ['OPENAI_LOG'] = 'debug'

# Or use a custom logging client:
class LoggingClient(httpx.Client):
    def send(self, request, *args, **kwargs):
        print('REQUEST:', request.method, request.url)
        print('BODY:', json.loads(request.content))
        response = super().send(request, *args, **kwargs)
        print('STATUS:', response.status_code)
        return response

Construire une boucle de conversation minimale

Vous pouvez maintenant construire une boucle de conversation minimale : conservez une liste de messages, ajoutez chaque tour, envoyez l’ensemble, puis recommencez. Ce schéma simple alimente toutes les applications de conversation utilisant l’API. Le code vous le montre.

import openai

client = openai.OpenAI()

SYSTEM_PROMPT = 'You are a helpful assistant. Be concise.'

def simple_chat_loop():
    messages = [{'role': 'system', 'content': SYSTEM_PROMPT}]
    print('Chat started. Type "quit" to exit.')

    while True:
        user_input = input('You: ').strip()
        if user_input.lower() == 'quit':
            break
        if not user_input:
            continue

        messages.append({'role': 'user', 'content': user_input})

        response = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            max_tokens=500
        )

        assistant_reply = response.choices[0].message.content
        messages.append({'role': 'assistant', 'content': assistant_reply})
        print(f'Assistant: {assistant_reply}\n')

print('Example chat loop defined. Run simple_chat_loop() to start.')

Vérification rapide

Vérifiez votre compréhension des concepts d’ingénierie de l’IA présentés dans cette leçon.

Récapitulatif de la leçon

Vous avez appris les bases de la conversation : le tableau de messages contrôle l’échange, et la réponse contient le contenu, finish_reason et le nombre de jetons. Ensuite : les paramètres.

Questions Fréquemment Posées

La leçon « Le point d’accès Chat Completions » est-elle gratuite ?

Oui — le texte complet de « Le point d’accès Chat Completions » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Engineering Academy, passe à CoddyKit PRO. Le cours AI Engineering Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Le point d’accès Chat Completions » ?

Comprenez le tableau de messages avec les rôles système, utilisateur et assistant, rédigez votre premier prompt et interprétez l’objet de réponse renvoyé par l’API. Tu pratiques AI Engineering Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer AI Engineering Academy ?

Aucune expérience préalable n'est requise. AI Engineering Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Le point d’accès Chat Completions » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon AI Engineering Academy ?

Oui. Chaque leçon AI Engineering Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Configurer votre environnement Python
  2. Le point d’accès Chat Completions
  3. Contrôler le comportement du modèle avec des paramètres
  4. Gestion des erreurs et limites de débit
← Retour à AI Engineering Academy