Claude pour les développeurs : comprendre les fondations avant d’écrire du code

Avant d’écrire la moindre ligne de code avec Claude, il est essentiel de comprendre quelques notions fondamentales : les tokens, la context window, le sampling, le non-déterminisme, le choix du modèle, les modes de prompting et les différentes façons d’accéder à l’API.

Ces concepts constituent la base sur laquelle reposent les usages plus avancés de Claude : tool use, agents, evals, streaming, traitements asynchrones ou encore architectures de production.

Dans cet article, nous allons parcourir ces fondations de manière pratique.

1. Les tokens : l’unité de base de Claude

Claude ne lit pas directement des caractères ou des mots. Il traite des tokens.

Un token peut correspondre à un mot entier, à une partie d’un mot, à un signe de ponctuation ou à d’autres fragments de texte. Le découpage dépend du tokenizer utilisé par le modèle.

Il faut donc éviter de raisonner uniquement en nombre de mots.

Tout ce que Claude traite consomme des tokens :

  • le prompt utilisateur ;
  • le system prompt ;
  • l’historique de la conversation ;
  • les documents ajoutés au contexte ;
  • les définitions des tools ;
  • les tool_result ;
  • la réponse générée par Claude.

Les tokens ont deux conséquences directes : ils déterminent la quantité d’information que le modèle peut traiter et ils interviennent dans le coût d’utilisation de l’API.

À retenir

Pour une application utilisant Claude, il est préférable de raisonner en tokens, car c’est l’unité utilisée à la fois pour la facturation et pour mesurer la capacité de la context window.


2. La context window : un budget limité

La context window correspond au nombre total de tokens que le modèle peut prendre en compte dans une requête.

Elle contient notamment :

  • le system prompt ;
  • les messages précédents ;
  • les documents transmis ;
  • les résultats des tools ;
  • la réponse que Claude est en train de produire.

On peut donc considérer la context window comme un budget fixe de tokens.

Deux situations différentes peuvent se produire lorsque cette limite est atteinte.

L’entrée dépasse déjà la context window

Si les données envoyées sont trop volumineuses avant même que Claude commence à répondre, la requête est rejetée.

La limite est atteinte pendant la génération

Une requête peut tenir dans la fenêtre au départ, mais atteindre la limite pendant la génération de la réponse.

Dans ce cas, le modèle peut s’arrêter et retourner ce qu’il a déjà généré avec une stop reason indiquant que la limite de contexte a été atteinte.

Conséquence en production

Une conversation longue ne peut pas nécessairement conserver indéfiniment tout son historique.

L’application doit parfois :

  • supprimer des messages anciens ;
  • résumer une partie de l’historique ;
  • ne conserver que les informations réellement utiles.

C’est un point important : les problèmes de context window apparaissent souvent beaucoup plus vite en production qu’en environnement de développement.


3. Sampling : pourquoi Claude ne répond pas toujours exactement de la même manière

Un LLM ne choisit pas systématiquement un unique prochain token.

À chaque étape, il calcule une distribution de probabilités parmi plusieurs tokens possibles, puis sélectionne un token à partir de cette distribution.

C’est ce mécanisme que l’on appelle le sampling.

Cela explique pourquoi le même prompt peut produire deux formulations différentes.

Par exemple, Claude peut répondre :

Le système doit vérifier les paramètres avant d’exécuter le tool.

Puis, avec exactement le même prompt :

L’application doit valider les arguments avant l’appel du tool.

Le sens peut être équivalent, mais la formulation diffère.

Certains modèles permettent ou ont permis de contrôler ce comportement via des paramètres tels que :

temperature, top_p ou top_k.

La prise en charge exacte de ces paramètres dépend toutefois du modèle utilisé et doit être vérifiée dans la documentation actuelle de l’API.


4. Non-déterminisme : une conséquence importante pour les tests

Le sampling implique qu’un LLM est non déterministe.

Autrement dit :

entrée identique ≠ sortie nécessairement identique.

Cela change complètement la manière de tester une fonctionnalité basée sur Claude.

Un test de ce type est fragile :

assert response == "La réponse exacte attendue"

Claude peut fournir une réponse parfaitement correcte avec une formulation différente.

Il vaut mieux vérifier des propriétés mesurables.

Par exemple :

- le JSON est valide ;
- le champ "status" existe ;
- la valeur appartient à une liste autorisée ;
- le résultat contient les informations obligatoires.

Lorsque la qualité dépend du sens de la réponse, les evals deviennent particulièrement importantes.

Une eval peut par exemple vérifier si :

  • la réponse respecte les instructions ;
  • une information importante a été oubliée ;
  • le raisonnement produit un résultat correct ;
  • une version de prompt est meilleure qu’une autre.

Principe essentiel

Il faut tester le comportement attendu, et non la formulation exacte produite par le modèle.


5. Choix du modèle et mode de raisonnement : deux décisions différentes

Le choix du modèle et le choix du mode de raisonnement sont deux paramètres conceptuellement distincts.

Le modèle détermine notamment le compromis entre :

  • capacités ;
  • coût ;
  • latence.

Le mode de raisonnement détermine davantage la quantité de travail de raisonnement que le modèle peut consacrer à une requête.

Une tâche simple de classification ne nécessite généralement pas le même niveau de raisonnement qu’un problème complexe impliquant plusieurs étapes.

Exemple

Pour une tâche simple :

Classifie ce ticket dans l’une des catégories suivantes :
BUG, FEATURE, SUPPORT.

Un raisonnement approfondi est probablement inutile.

Pour une tâche plus complexe :

Analyse cette architecture distribuée,
identifie les risques de concurrence,
propose trois stratégies de correction
et compare leurs compromis.

Un mode de raisonnement plus poussé peut être pertinent.

Bonne pratique

Le raisonnement supplémentaire a un coût.

Il doit donc être utilisé lorsque la complexité de la tâche le justifie.


6. Zero-shot, one-shot et multi-shot prompting

Une autre décision importante concerne le nombre d’exemples fournis dans le prompt.

Zero-shot

Aucun exemple n’est fourni.

Classe ce message dans l’une des catégories suivantes :
BUG, FEATURE, SUPPORT.

Cette approche convient lorsque la tâche est simple et suffisamment claire.

One-shot

Un exemple est ajouté.

Exemple :

Entrée :
"L’application plante lorsque je clique sur Enregistrer."

Sortie :
BUG

Classe maintenant le message suivant :
...

L’exemple aide Claude à comprendre précisément le format attendu.

Multi-shot

Plusieurs exemples sont fournis.

Entrée : "L’application plante."
Sortie : BUG

Entrée : "Pouvez-vous ajouter un mode sombre ?"
Sortie : FEATURE

Entrée : "Comment modifier mon mot de passe ?"
Sortie : SUPPORT

Cette approche est également appelée few-shot prompting.

Elle est particulièrement utile lorsque la tâche comporte des nuances ou des cas limites.


7. Le compromis entre exemples, coût et qualité

Chaque exemple ajouté au prompt consomme des tokens.

Il occupe donc une partie de la context window et augmente le coût de chaque requête.

Il faut éviter deux extrêmes :

  • fournir trop peu d’informations et obtenir des résultats instables ;
  • ajouter de nombreux exemples inutiles.

Une bonne stratégie consiste à commencer avec le prompt le plus simple possible.

Puis :

  1. tester le résultat ;
  2. mesurer la qualité avec des evals ;
  3. ajouter un exemple si nécessaire ;
  4. mesurer à nouveau.

Un ou deux bons exemples peuvent parfois être plus efficaces qu’un long paragraphe d’instructions.


8. Le choix du modèle et le prompting sont liés

Un modèle plus performant peut parfois réussir une tâche en zero-shot alors qu’un modèle plus léger nécessite plusieurs exemples.

Cela crée un compromis intéressant.

On peut par exemple choisir entre :

Modèle plus performant
+
prompt court

ou :

Modèle moins coûteux
+
quelques exemples supplémentaires

Il n’existe pas de réponse universelle.

La bonne solution est celle qui atteint le niveau de qualité attendu avec un compromis acceptable entre :

  • qualité ;
  • coût ;
  • latence.

Les evals permettent précisément de mesurer ce compromis.


9. Accéder à Claude : SDK ou API REST

Claude est accessible via une API HTTP REST.

Une application peut donc envoyer directement une requête HTTP contenant :

  • une clé API ;
  • des paramètres ;
  • un body JSON.

Puis elle récupère une réponse JSON.

Il est également possible d’utiliser les SDK officiels.

Ils permettent notamment de simplifier :

  • l’authentification ;
  • la création des requêtes ;
  • le parsing des réponses ;
  • certains mécanismes de retries.

Conceptuellement :

Application
      ↓
SDK Anthropic
      ↓
API REST
      ↓
Claude

Le SDK ne constitue pas une API différente.

Il fournit une couche d’abstraction pratique au-dessus de la même API.


10. Requêtes synchrones

Le modèle le plus simple consiste à effectuer un appel synchrone.

Application
     ↓
requête
     ↓
Claude
     ↓
réponse complète
     ↓
Application

L’application attend que Claude ait terminé avant de traiter la réponse.

Cette approche convient notamment :

  • aux petites réponses ;
  • aux traitements backend ;
  • aux tâches où la latence perçue n’est pas critique.

11. Streaming : afficher la réponse pendant sa génération

Pour une réponse longue, attendre l’intégralité de la génération peut donner l’impression que l’application est bloquée.

Le streaming permet de recevoir progressivement les morceaux de réponse.

Le fonctionnement devient :

Claude
 ↓
fragment 1
fragment 2
fragment 3
fragment 4
 ↓
Application

L’utilisateur commence donc à voir la réponse avant qu’elle soit terminée.

Claude utilise notamment des Server-Sent Events (SSE) pour transmettre ces événements sur la connexion HTTP.

L’application doit ensuite reconstituer la réponse complète.


12. Async : gérer plusieurs appels sans bloquer l’application

Pour certaines applications, attendre chaque requête l’une après l’autre serait inefficace.

Le SDK Python propose notamment un client asynchrone :

AsyncAnthropic

Il permet d’utiliser async/await.

Cela permet à l’application d’effectuer d’autres traitements pendant qu’elle attend la réponse de Claude.

En TypeScript, le client utilise déjà les Promise, ce qui permet également d’utiliser directement :

await

L’objectif n’est pas de rendre Claude lui-même plus rapide.

L’objectif est de permettre à l’application de gérer efficacement plusieurs opérations concurrentes.


13. Message Batches API : les traitements massifs hors ligne

L’asynchronisme applicatif et le traitement batch répondent à deux besoins différents.

La Message Batches API est destinée aux traitements volumineux qui n’ont pas besoin d’une réponse immédiate.

Le fonctionnement général est le suivant :

Application
     ↓
soumission d'un ensemble de requêtes
     ↓
Batch API
     ↓
traitement
     ↓
récupération des résultats

Ce type de mécanisme convient particulièrement aux :

  • traitements offline ;
  • pipelines de données ;
  • campagnes d’evals ;
  • traitements massifs.

Il est moins adapté lorsqu’un utilisateur attend directement une réponse dans une interface interactive.


14. Les notions essentielles à retenir

Pour développer efficacement avec Claude, plusieurs principes doivent être compris dès le départ.

Les tokens sont l’unité fondamentale du système.

Ils déterminent à la fois le coût et l’utilisation de la context window.

La context window est limitée.

Une application doit gérer son contexte plutôt que conserver indéfiniment tout l’historique.

Claude est non déterministe.

Les tests doivent vérifier des propriétés et des résultats attendus plutôt qu’une formulation exacte.

Zero-shot, one-shot et multi-shot sont des leviers de fiabilité.

Les exemples améliorent souvent les résultats, mais ils ont un coût en tokens.

Le choix du modèle doit être mesuré.

Il faut rechercher le meilleur compromis entre capacités, coût, latence et qualité.

SDK et REST permettent d’accéder à la même API.

Le SDK simplifie principalement le travail du développeur.

Streaming, async et batch répondent à des problèmes différents.

Le streaming améliore l’expérience utilisateur, l’async améliore la concurrence applicative et les batchs sont adaptés aux traitements massifs hors ligne.

Conclusion

Une intégration Claude fiable ne commence pas par un agent complexe ou par une architecture élaborée.

Elle commence par une bonne compréhension des mécanismes fondamentaux du modèle.

Tokens, context window, non-déterminisme, prompting, choix du modèle, streaming et async influencent directement la qualité, le coût et la robustesse d’une application.

Ces notions constituent également la base nécessaire pour comprendre ensuite des concepts plus avancés comme le tool use, les agents, MCP, les evals ou la sécurisation des applications basées sur les LLM.

Récapitulatif : 5 points essentiels à retenir

1. Les tokens sont l’unité d’entrée, de sortie et de coût

Raisonnez et établissez vos budgets en tokens plutôt qu’en mots, car c’est l’unité utilisée par l’API pour mesurer la consommation et par la context window pour déterminer sa capacité.

À retenir : coût et contexte se raisonnent en tokens.


2. La context window est un budget fixe de tokens contenant l’ensemble de la requête

La context window doit contenir tout le contexte nécessaire à l’appel : system prompt, messages, documents, définitions des tools, tool_result et génération du modèle.

Si l’entrée dépasse déjà la limite, la requête échoue avant la génération.

Si la limite est atteinte pendant la génération, la sortie est interrompue et renvoyée avec la stop reason :

model_context_window_exceeded

La gestion de l’historique — suppression, sélection ou résumé des informations — relève donc de l’application.

À retenir : gérer le contexte est une responsabilité applicative.


3. Le sampling rend la génération non déterministe

Un même prompt peut produire des formulations différentes à chaque exécution.

Il est donc peu fiable de tester une application LLM en comparant la réponse à un texte exact.

Il faut plutôt vérifier les propriétés attendues : structure, champs obligatoires, valeurs, respect des contraintes ou qualité sémantique.

C’est précisément l’un des rôles des evals.

À retenir : ne testez pas uniquement le texte produit ; testez le comportement attendu.


4. Le choix du modèle et le mode de raisonnement sont deux leviers distincts et combinables

Choisir un modèle et déterminer la quantité de raisonnement nécessaire sont deux décisions différentes.

L’objectif est d’utiliser le modèle le plus petit et le niveau de raisonnement et de prompting les plus simples qui satisfont vos evals.

N’ajoutez davantage de capacité, de raisonnement ou d’exemples que lorsque les résultats des evals montrent que cela est nécessaire.

À retenir :

Model + Reasoning + Prompting → Eval → Ajustement

La qualité doit être mesurée plutôt que supposée.


5. Un développeur accède à Claude via une API REST, généralement au moyen d’un SDK

Le SDK constitue une couche pratique au-dessus de l’API REST.

Le pattern d’appel doit ensuite être choisi selon les besoins de l’application :

  • Synchronous : attendre la réponse complète.
  • Streaming : afficher progressivement la réponse lorsqu’un utilisateur attend.
  • Async/await : gérer efficacement plusieurs opérations concurrentes sans bloquer l’application.
  • Batch : traiter de gros volumes hors ligne lorsqu’aucun utilisateur n’attend immédiatement le résultat.

À retenir : le choix dépend principalement de deux questions : un utilisateur attend-il la réponse ? et le traitement doit-il être réalisé en temps réel ou peut-il être effectué offline ?

Conclusion

Une intégration Claude fiable ne commence pas par un agent complexe ou par une architecture élaborée.

Elle commence par une bonne compréhension des mécanismes fondamentaux du modèle.

Tokens, context window, non-déterminisme, prompting, choix du modèle, streaming et async influencent directement la qualité, le coût et la robustesse d’une application.

Ces notions constituent également la base nécessaire pour comprendre ensuite des concepts plus avancés comme le tool use, les agents, MCP, les evals ou la sécurisation des applications basées sur les LLM.

Le phare info – Média indépendant & critique
Sélectionne, organise, contextualise et partage des contenus pertinents autour d’un thème ou d’une problématique, dans une logique de veille, de transmission et de mise en sens.
Pour cet article, l’intelligence artificielle a été utilisée comme un outil d’aide à l’exploration, à la structuration et à la rédaction. Elle permet de confronter plusieurs angles, de repérer certains biais humains possibles et de faire émerger des points de vigilance. Le curateur humain observe aussi les biais possibles de l’IA, vérifie les éléments essentiels, nuance l’analyse, corrige les formulations fragiles et assume la publication.

Articles liés

Fiche de révision certification — Accelerators & IP Contribution

Cette fiche résume les notions essentielles du module Accelerators & IP Contribution. Le fil conducteur est simple : Un build Claude n’est pas terminé lorsqu’il fonctionne....

Étude de cas : corriger un accelerator Claude mal packagé, mal versionné et mal sécurisé

Un système Claude peut fonctionner parfaitement en démonstration et pourtant être impropre à la production. Le cas cumulatif du module illustre précisément cette situation. L’application : s’exécute...

Applications Claude multi-composants : trust boundaries, least privilege et sécurité

Une application Claude moderne n’est souvent pas constituée d’un seul appel API. Elle peut combiner : une API applicative ; Claude ; un agent ; Claude Code ; un MCP...

Comparer les plateformes Claude : latency, compliance, data residency et total cost

Lorsque plusieurs plateformes permettent d’exécuter Claude, comment choisir ? Une comparaison superficielle pourrait se limiter à : la plateforme la moins chère ; celle que l’équipe connaît...

Model versioning avec Claude : pin what ships, eval gates et rollback

Changer de modèle dans une application Claude peut sembler être une modification minime : model = "new-model" Pourtant, en production, ce changement peut modifier : la qualité...

Le sentier du savoir

De la curiosité à la transmission, explorez les étapes qui permettent de transformer l’information en compréhension durable.

Étape 1 — Construire une culture générale solide

Construire une base solide de connaissances pour comprendre le monde. Relier les faits, les disciplines et les repères essentiels.

Étape 2 — Maîtriser la pensée critique et l’analyse : apprendre à penser contre ses propres certitudes

Apprendre à analyser l’information, repérer les biais et questionner les évidences. Penser par soi-même dans un monde saturé de récits.

Étape 3 – Apprendre à argumenter et à convaincre

Structurer sa pensée pour convaincre sans manipuler. Savoir débattre, nuancer et formuler des idées claires.

Étape 4 – Approfondir un ou plusieurs domaines d’expertise

Explorer un ou plusieurs domaines en profondeur. Passer de la curiosité à la compréhension experte.

Etapes 5 : Devenir polyglotte : élargir sa pensée par les langues

Élargir ses horizons par le langage et les cultures. Penser autrement en changeant de langue.

Étape 6 — Comprendre la méthode scientifique et expérimenter

Comprendre la méthode scientifique et l’expérimentation. Distinguer savoirs établis, hypothèses et croyances.

Étape 7 – Écrire, transTransmission : écrire, transmettre, enseigner

Écrire, expliquer, partager ce que l’on a compris. Transformer le savoir en outil collectif.

Étape 8 — Cultiver l’équilibre corps-esprit pour soutenir l’érudition

Cultiver le corps et l’esprit pour soutenir l’érudition dans le temps. Le savoir durable repose aussi sur l’attention et l’équilibre personnel.