AI Prompt Engineering · Leçon

Longueur et pertinence du contexte

Trouvez l’équilibre entre un contexte complet, les limites de jetons et la pertinence.

Leçon 4 sur 413 étapes

Longueur et pertinence du contexte est une leçon AI Prompt Engineering gratuite sur CoddyKit. Ceci est la leçon 4 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 Prompt Engineering, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Prompt Engineering comprend 4 leçons au total.

Le budget de la fenêtre de contexte

Chaque modèle possède une fenêtre de contexte maximale : le nombre total de jetons qu’il peut traiter lors d’un seul appel à l’API. Cela comprend à la fois l’entrée (votre invite et l’historique) et la sortie (la réponse du modèle).

Il est essentiel de comprendre ce budget : le dépasser signifie tronquer votre invite ou perdre une partie de la sortie. Le gaspiller avec du contexte non pertinent laisse au modèle moins de place pour raisonner sur ce qui compte.

Taille des fenêtres de contexte

Les limites de contexte varient selon les modèles. En 2025 :

  • GPT-4o : 128 000 jetons
  • Claude Opus 4.5 : 200 000 jetons
  • Gemini 1.5 Pro : 1 000 000 de jetons
  • GPT-3.5 Turbo : 16 385 jetons

Les fenêtres plus grandes permettent d’inclure davantage de contexte, mais coûtent plus cher par appel. Pour la plupart des tâches, 8 000 à 16 000 jetons suffisent. Plus grand ne signifie pas toujours meilleur si cela implique d’inclure du contenu non pertinent.

import tiktoken

def estimate_tokens(text, model='gpt-4o'):
    encoding = tiktoken.encoding_for_model(model)
    return len(encoding.encode(text))

# Quick token budget calculator
models = {
    'GPT-3.5 Turbo':  16385,
    'GPT-4o':        128000,
    'Claude Opus 4.5': 200000,
}

prompt = 'Explain the concept of technical debt in 500 words for a non-technical CEO.'
prompt_tokens = estimate_tokens(prompt)

for model_name, limit in models.items():
    reserved_for_output = 1024
    available = limit - prompt_tokens - reserved_for_output
    print(f'{model_name}: limit={limit:,} | prompt={prompt_tokens} | '
          f'context budget={available:,} tokens')

Que faut-il inclure : évaluer la pertinence

Avant d’inclure un élément de contexte, demandez-vous : Cette information modifie-t-elle la réponse ?

Voici un cadre mental simple : évaluez chaque élément de contexte :

  • Pertinence élevée (à inclure) : influence directement la tâche, façonne le vocabulaire ou limite les options
  • Pertinence moyenne (éventuellement à inclure) : apporte des précisions utiles, mais la sortie resterait correcte sans elle
  • Faible pertinence (à exclure) : l’information est vraie, mais n’influence en rien la réponse
def score_context_element(element, task):
    '''
    Heuristic: does this context element directly constrain or shape the answer?
    Returns: HIGH / MEDIUM / LOW
    '''
    high_signals = ['stack', 'constraint', 'deadline', 'must', 'cannot', 'budget',
                    'audience', 'goal', 'version', 'scale', 'limit']
    low_signals  = ['founded', 'headquartered', 'fun fact', 'history', 'awards',
                    'team building', 'company culture', 'office location']

    el_lower = element.lower()
    if any(s in el_lower for s in high_signals):
        return 'HIGH'
    if any(s in el_lower for s in low_signals):
        return 'LOW'
    return 'MEDIUM'

context_elements = [
    'Our stack is Python FastAPI and PostgreSQL',
    'We cannot use any paid third-party APIs',
    'Our company was founded in Berlin in 2020',
    'We need the solution to handle 1000 requests/second',
    'We won a startup award last year',
]

for el in context_elements:
    score = score_context_element(el, task='optimize our API')
    print(f'[{score:6}] {el}')

Le problème de l’information perdue au milieu

Les recherches montrent que les grands modèles de langage accordent moins d’attention aux informations placées au milieu des invites très longues. Un élément de contexte essentiel placé au milieu d’une invite de 50 000 jetons peut être partiellement ignoré.

Bonne pratique : placez le contexte le plus important au début ou à la fin de votre invite : le modèle accorde le plus d’attention à ces positions.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Structure: critical constraint at the TOP, then the body, then the task
well_structured_prompt = (
    # Critical constraint FIRST
    'CRITICAL CONSTRAINT: Output must be under 50 words and contain no code.\n\n'
    # Background in the middle
    'Background: we are explaining our API rate limiting policy to non-technical support agents. '
    'They handle billing inquiries and need to explain errors to customers. '
    'Our rate limit is 100 requests per minute per API key.\n\n'
    # Task at the end
    'Task: Write the explanation.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=128,
    messages=[{'role': 'user', 'content': well_structured_prompt}]
)
print(response.content[0].text)

Découper les longs documents

Lorsque vous devez travailler avec un document plus long que votre budget de jetons, trois options s’offrent à vous :

  • Résumer d’abord : demandez au modèle de condenser le document, puis travaillez avec le résumé
  • Découper et traiter : divisez le document en parties, traitez chacune d’elles, puis combinez les résultats
  • Extraire et insérer : extrayez uniquement les sections pertinentes avant de les inclure dans l’invite

N’essayez jamais de faire entrer de force un document qui dépasse la fenêtre de contexte : il sera tronqué sans avertissement.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

def chunk_and_summarize(long_text, chunk_size=2000):
    '''Split text into chunks, summarize each, combine summaries.'''
    words = long_text.split()
    chunks = []
    for i in range(0, len(words), chunk_size):
        chunk = ' '.join(words[i:i + chunk_size])
        chunks.append(chunk)

    summaries = []
    for idx, chunk in enumerate(chunks):
        response = client.messages.create(
            model='claude-opus-4-5',
            max_tokens=256,
            messages=[{
                'role': 'user',
                'content': f'Summarize this section in 3 bullet points:\n\n{chunk}'
            }]
        )
        summaries.append(f'Section {idx+1}:\n{response.content[0].text}')

    return '\n\n'.join(summaries)

# Example usage
long_doc = 'word ' * 5000  # placeholder for a real document
print('Chunks needed:', len(long_doc.split()) // 2000 + 1)

Filtrer la pertinence en pratique

Filtrer la pertinence consiste à extraire uniquement les parties pertinentes d’un document volumineux avant de les inclure dans une invite. Cette pratique est particulièrement importante pour :

  • Les longs rapports dont une seule section est pertinente
  • Les fichiers de code dont une seule fonction doit être examinée
  • Les fils de courriels dans lesquels seuls les 3 derniers messages comptent
  • Les schémas de bases de données dans lesquels seules 2 tables sur 50 sont pertinentes
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Step 1: Filter first, then ask
full_schema = (
    'Table: users (id, name, email, created_at, role)\n'
    'Table: products (id, name, price, stock, category_id)\n'
    'Table: orders (id, user_id, total, status, created_at)\n'
    'Table: order_items (id, order_id, product_id, quantity, unit_price)\n'
    'Table: categories (id, name, parent_id)\n'
    'Table: reviews (id, product_id, user_id, rating, body)\n'
    'Table: sessions (id, user_id, token, expires_at)'
)

# Only include relevant tables for the specific question
relevant_context = (
    'Relevant tables for this query:\n'
    'Table: orders (id, user_id, total, status, created_at)\n'
    'Table: order_items (id, order_id, product_id, quantity, unit_price)\n'
)

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{
        'role': 'user',
        'content': f'{relevant_context}\nWrite SQL to find the top 5 orders by total value this month.'
    }]
)
print(response.choices[0].message.content)

Gérer l’historique des conversations

Dans les conversations à plusieurs échanges, l’historique s’allonge à chaque échange. Le gérer intelligemment permet de préserver votre budget de jetons :

  • Fenêtre glissante : ne conserver que les N derniers échanges
  • Insertion d’un résumé : résumer périodiquement les anciens échanges en un seul message
  • Extraction des faits clés : suivre les décisions importantes sous forme de liste à puces et les insérer comme contexte système
  • Réinitialisation lors d’un changement de sujet : commencer une nouvelle session lorsque vous passez à un sujet sans rapport
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

def summarize_history(old_history):
    '''Compress old conversation turns into a brief summary.'''
    history_text = '\n'.join(
        f'{m["role"].upper()}: {m["content"]}' for m in old_history
    )
    response = client.chat.completions.create(
        model='gpt-4o',
        max_tokens=200,
        messages=[{
            'role': 'user',
            'content': (
                'Summarize this conversation history in 3 bullet points. '
                'Focus on decisions made and key information established.\n\n'
                + history_text
            )
        }]
    )
    return response.choices[0].message.content

# Example: compressing old history before continuing
old_turns = [
    {'role': 'user',      'content': 'We are building a Kanban app.'},
    {'role': 'assistant', 'content': 'Great, what is your stack?'},
    {'role': 'user',      'content': 'React + FastAPI + PostgreSQL.'},
    {'role': 'assistant', 'content': 'Good choice for a Kanban app.'}
]
summary = summarize_history(old_turns)
print('Summary of old history:', summary)

Techniques de compression du contexte

Lorsque vous devez inclure beaucoup de contexte, mais que votre budget de jetons est limité, utilisez des techniques de compression :

  • Les puces plutôt que la prose : les listes à puces utilisent 30 à 50 % moins de jetons que les phrases
  • Abréger les termes connus : « PostgreSQL 15 » → « PG15 » après la première utilisation
  • Supprimer les phrases superflues : « Il convient de noter que… » → énoncez simplement le fait
  • Utiliser des formats structurés : les paires clé:valeur sont plus denses que les phrases
import tiktoken

def count_tokens(text):
    enc = tiktoken.encoding_for_model('gpt-4o')
    return len(enc.encode(text))

# Same information, different token counts
prose_context = (
    'Our company is a startup that was founded recently and we are building '
    'a data analytics platform. It is worth noting that we use Python for our backend. '
    'Additionally, we have chosen PostgreSQL as our primary database. '
    'Furthermore, we deploy on AWS using ECS containers.'
)

bullet_context = (
    'Company: data analytics startup\n'
    'Stack: Python backend, PostgreSQL, AWS ECS'
)

print('Prose context tokens: ', count_tokens(prose_context))
print('Bullet context tokens:', count_tokens(bullet_context))
print('Tokens saved:', count_tokens(prose_context) - count_tokens(bullet_context))
print('Same information? Yes — same facts, 60% fewer tokens')

Sélection dynamique du contexte

Dans les applications d’IA en production, le contexte est souvent sélectionné dynamiquement en fonction de ce qui est le plus pertinent pour la requête actuelle. Cette technique s’appelle la génération augmentée par récupération (RAG).

Au lieu d’inclure tous les documents, vous récupérez uniquement ceux qui sont sémantiquement les plus proches de la question de l’utilisateur, puis vous les insérez dans l’invite. Le contexte reste ainsi concis et très pertinent.

# Simplified RAG pattern: retrieve relevant chunks, inject into prompt
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Simulated knowledge base (in production: vector database)
knowledge_base = [
    {'id': 1, 'topic': 'billing',   'text': 'Refunds are processed within 5-7 business days.'},
    {'id': 2, 'topic': 'shipping',  'text': 'Standard shipping takes 3-5 days.'},
    {'id': 3, 'topic': 'returns',   'text': 'Returns accepted within 30 days with receipt.'},
    {'id': 4, 'topic': 'warranty',  'text': 'All products come with a 1-year warranty.'},
]

def get_relevant_docs(user_query, kb, top_k=2):
    '''Simplified relevance: keyword match. Production uses embeddings.'''
    scored = [(doc, sum(w in user_query.lower() for w in doc['topic'].split())) for doc in kb]
    scored.sort(key=lambda x: x[1], reverse=True)
    return [doc['text'] for doc, _ in scored[:top_k]]

query = 'Can I return this and get my money back?'
relevant = get_relevant_docs(query, knowledge_base)
context = '\n'.join(relevant)
print('Injected context:', context)
response = client.chat.completions.create(
    model='gpt-4o', max_tokens=80,
    messages=[{'role': 'user', 'content': f'Context:\n{context}\n\nQuestion: {query}'}]
)
print('Answer:', response.choices[0].message.content.strip())

Planifier le budget de contexte

Pour les applications en production, planifiez explicitement votre budget de contexte avant de commencer le développement :

  • Réservez 25 % de la fenêtre de contexte pour la sortie
  • Allouez 10 % au message système et à la personnalité
  • Allouez 30 % à l’historique de conversation le plus récent
  • Réservez 35 % au contexte dynamique (documents récupérés, données injectées)

Documentez ces allocations sous forme de constantes dans votre code afin de pouvoir les ajuster facilement à mesure que votre cas d’utilisation évolue.

# Context budget planner
MODEL_LIMIT = 128000  # GPT-4o

BUDGET = {
    'output_reserve':  int(MODEL_LIMIT * 0.25),  # 32,000 tokens
    'system_message':  int(MODEL_LIMIT * 0.05),  # 6,400 tokens
    'recent_history':  int(MODEL_LIMIT * 0.30),  # 38,400 tokens
    'dynamic_context': int(MODEL_LIMIT * 0.35),  # 44,800 tokens
    'task_prompt':     int(MODEL_LIMIT * 0.05),  # 6,400 tokens
}

total_input = sum(v for k, v in BUDGET.items() if k != 'output_reserve')
print('Context budget plan:')
for key, tokens in BUDGET.items():
    pct = round(tokens / MODEL_LIMIT * 100)
    print(f'  {key:<20}: {tokens:>7,} tokens ({pct}%)')
print(f'  {"total input":<20}: {total_input:>7,} tokens')
print(f'  {"+ output reserve":<20}: {BUDGET["output_reserve"]:>7,} tokens')
print(f'  {"= model limit":<20}: {MODEL_LIMIT:>7,} tokens')

Quand la pertinence l’emporte sur la longueur

Un contexte de 500 jetons très pertinent produit de meilleurs résultats qu’un contexte de 5 000 jetons vaguement pertinent. Le modèle génère une meilleure sortie lorsqu’il a moins de contenu à parcourir.

Voici les signes indiquant que votre contexte est trop long et manque de précision :

  • Le modèle ignore certaines de vos contraintes
  • La sortie semble générique malgré un long contexte
  • Le modèle répond à la mauvaise partie de votre question
  • La latence et le coût sont plus élevés que prévu

Lorsque vous observez ces signes, réduisez le contexte et relancez la requête.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Demonstrating: lean context produces sharper output
lean_context = (
    'Task: write a 50-word product tagline.\n'
    'Product: CLI tool that auto-generates Git commit messages from your diff.\n'
    'Audience: senior developers who hate writing commit messages.\n'
    'Tone: dry, witty, technical.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=100,
    messages=[{'role': 'user', 'content': lean_context}]
)
print('Lean context output:')
print(response.content[0].text.strip())

Vérification des connaissances

Un développeur construit un agent conversationnel avec un historique de 20 échanges. Après 20 échanges, la fenêtre de contexte est presque pleine. Quelle est la meilleure stratégie pour poursuivre la conversation sans perdre le contexte important ?

Longueur et pertinence du contexte — récapitulatif

Gérer efficacement le contexte est une compétence essentielle pour la conception d’invites, qui devient critique dans les applications en production. Principes clés :

  • Évaluez chaque élément de contexte : pertinence élevée / moyenne / faible ; n’incluez que les éléments très pertinents
  • Placez les contraintes essentielles au début ou à la fin, et non au milieu
  • Préférez les formats à puces à la prose pour économiser 30 à 50 % de jetons
  • Résumez ou découpez les documents qui dépassent votre budget
  • Dans les conversations à plusieurs échanges, compressez l’ancien historique plutôt que de recommencer
  • Planifiez explicitement votre budget de contexte sous forme de constantes dans le code
Gratuit pour commencer

Apprends AI Prompt Engineering avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
53
Leçons
199

Questions Fréquemment Posées

La leçon « Longueur et pertinence du contexte » est-elle gratuite ?

Oui — le texte complet de « Longueur et pertinence du contexte » 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 Prompt Engineering, passe à CoddyKit PRO. Le cours AI Prompt Engineering comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Longueur et pertinence du contexte » ?

Trouvez l’équilibre entre un contexte complet, les limites de jetons et la pertinence. Tu pratiques AI Prompt Engineering 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 Prompt Engineering ?

Aucune expérience préalable n'est requise. AI Prompt Engineering 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 4 sur 4.

Combien de temps prend la leçon « Longueur et pertinence du contexte » ?

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 Prompt Engineering ?

Oui. Chaque leçon AI Prompt Engineering 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. Que signifie le contexte dans la formulation de requêtes pour l’IA ?
  2. Fournir des informations générales
  3. Planter efficacement le décor
  4. Longueur et pertinence du contexte
← Retour à AI Prompt Engineering