Aller au contenu principal

Les prompts système

Mis à jour le 30 juillet 2026

Jusqu’ici, Claude répond avec son comportement par défaut : serviable, complet, direct. Excellent assistant généraliste — mais votre application n’est probablement pas généraliste. Les prompts système permettent de personnaliser le comportement de Claude pour qu’il corresponde à votre cas d’usage : définir qui il est, comment il répond, ce qu’il s’interdit — avant même le premier message de l’utilisateur.

Pourquoi utiliser un prompt système

Prenons l’exemple d’un chatbot tuteur en mathématiques. Quand un étudiant demande « Comment résoudre 5x + 2 = 3 pour x ? », on veut que Claude se comporte comme un vrai tuteur :

  • Donner d’abord des indices plutôt que la solution complète
  • Guider l’étudiant pas à pas
  • Montrer des exemples similaires

On ne veut pas que Claude donne directement la réponse ou suggère d’utiliser une calculatrice — ce serait pédagogiquement contre-productif, et pourtant c’est exactement ce que ferait le comportement par défaut, optimisé pour être serviable et donner la réponse. Le problème n’est pas que Claude réponde mal : c’est que « bien répondre » ne signifie pas la même chose pour un moteur de recherche et pour un tuteur. Le prompt système est l’endroit où l’on définit ce que « bien répondre » veut dire pour votre application.

Fonctionnement

Le prompt système est passé en paramètre system de la fonction create — une voie séparée de la liste des messages :

system_prompt = """
Tu es un tuteur de mathématiques patient.
Ne reponds pas directement aux questions.
Guide l'etudiant vers la solution étape par étape.
"""

client.messages.create(
    model=model,
    messages=messages,
    max_tokens=1000,
    system=system_prompt
)

Cette séparation est significative : le prompt système n’appartient pas à la conversation. L’utilisateur ne le voit pas, ne l’écrit pas, et il s’applique à tous les tours de la conversation — là où un message utilisateur n’est qu’un tour parmi d’autres. C’est la voix de l’application, distincte de celle de l’utilisateur : vos règles y pèsent durablement, au-dessus du fil de la discussion.

La différence en pratique

L’effet est immédiat et spectaculaire sur notre équation. Sans prompt système, Claude donne la solution complète immédiatement — soustraire 2, diviser par 5, x = 0,2. Avec le prompt système, Claude pose des questions comme « Quelle serait une bonne première étape pour isoler x ? » — il tutore. Même modèle, même question, deux applications entièrement différentes : toute la différence tient dans ces trois lignes de système.

Fonction chat flexible

Intégrons le paramètre à notre fonction utilitaire, pour qu’elle serve les deux cas — avec et sans système :

def chat(messages, system=None):
    params = {
        "model": model,
        "max_tokens": 1000,
        "messages": messages,
    }

    if system:
        params["system"] = system

    message = client.messages.create(**params)
    return message.content[0].text

Le détail d’implémentation qui compte : l’API Claude n’accepte pas system=None — d’où la construction du dictionnaire de paramètres en deux temps, avec inclusion conditionnelle. Le paramètre n’est ajouté que s’il a une valeur ; sinon, il est simplement absent de la requête. Ce pattern de construction conditionnelle nous resservira pour chaque paramètre optionnel à venir — température, outils, séquences d’arrêt.

Les prompts système sont le premier outil de personnalisation de votre boîte — essentiels pour créer des applications cohérentes et adaptées à leur usage. La section d’ingénierie de prompt approfondira leur rédaction ; pour l’instant, retenez le mécanisme et le réflexe : toute application sérieuse commence par définir qui son Claude doit être.

Points clés à retenir

  • Le prompt système définit le comportement de l’application : rôle, méthode, interdits — avant tout message
  • Il passe par le paramètre system, séparé des messages : invisible pour l’utilisateur, actif à tous les tours
  • Trois lignes de système transforment un répondeur en tuteur — même modèle, application différente
  • system=None est refusé par l’API : construction conditionnelle des paramètres, pattern à réutiliser
  • Définir « bien répondre » pour votre cas d’usage : c’est le rôle exact du prompt système