Claude Architect · Leçon

Correspondances entre affirmations et sources

Conservez les URL, noms de documents, citations et dates avec les affirmations.

Leçon 1 sur 413 étapes

Correspondances entre affirmations et sources est une leçon Claude Architect gratuite sur CoddyKit. Ceci est la leçon 1 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 Claude Architect, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Claude Architect comprend 4 leçons au total.

Pourquoi la traçabilité est importante

Dans un système de recherche multi-agent, le coordinateur agrège les résultats de sous-agents qui ont chacun extrait des faits de documents différents. La réponse agrégée n'est fiable que si chaque affirmation peut être retracée jusqu'à son origine.

Une correspondance entre affirmation et source associe chaque énoncé factuel à son origine : l'URL, le nom du document, la citation exacte et la date de publication. Sans cette association, vous avez une affirmation qu'aucun réviseur humain ne peut vérifier et qu'aucun agent en aval ne peut auditer.

Pour l'examen d'Architecte, la traçabilité relève du domaine 4 (ingénierie des prompts et sortie structurée) et réapparaît dans le scénario 3 (recherche multi-agent) ainsi que dans le scénario 6 (extraction de données structurées).

Les quatre points d'ancrage d'une source

Une correspondance de source doit toujours comporter quatre points d'ancrage afin qu'un humain ou un autre agent puisse retrouver et vérifier à nouveau les éléments probants :

  • URL — l'emplacement du document (ou un identifiant stable).
  • Nom du document — un titre compréhensible par un humain.
  • Citation — le texte exact qui étaye l'affirmation, et non une paraphrase.
  • Date de publication — la date à laquelle la source a été publiée ou mise à jour pour la dernière fois.

La citation exacte permet au réviseur de confirmer que le modèle n'a rien inventé ni exagéré. La date permet de résoudre les conflits ultérieurement, comme nous le verrons.

Modéliser la correspondance comme une sortie structurée

Ne demandez pas au modèle d'intégrer les citations dans un texte suivi où elles peuvent facilement être omises. Forcez plutôt une structure au moyen d'un schéma JSON via un outil. L'association de tool_use à un schéma élimine les erreurs de syntaxe et garantit la présence des champs obligatoires.

Chaque affirmation devient un objet qui contient ses propres points d'ancrage de source. C'est le fondement d'un relevé de traçabilité vérifiable.

extract_claims = {
    "name": "record_claims",
    "description": "Record each factual claim with its full source provenance.",
    "input_schema": {
        "type": "object",
        "properties": {
            "claims": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "claim": {"type": "string"},
                        "source_url": {"type": "string"},
                        "document_name": {"type": "string"},
                        "quote": {"type": "string"},
                        "publication_date": {"type": "string"}
                    },
                    "required": ["claim", "quote", "document_name"]
                }
            }
        },
        "required": ["claims"]
    }
}

Champs obligatoires : uniquement ceux qui sont toujours présents

Une règle subtile mais essentielle pour l'examen : marquez un champ comme obligatoire uniquement s'il est toujours présent dans la source. Si vous rendez obligatoire un champ qui peut être absent, le modèle fabriquera une valeur pour satisfaire le schéma.

Un billet de blog peut ne comporter aucune publication_date formelle ; un PDF interne peut ne comporter aucune source_url. Ainsi, claim, quote et document_name sont obligatoires (vous les avez toujours), tandis que source_url et publication_date restent facultatifs. Une date vide est honnête ; une date inventée constitue un échec de traçabilité.

Forcer la sortie structurée avec tool_choice

Pour garantir que vous récupérez l'objet de traçabilité plutôt qu'un texte libre, contraignez le modèle avec tool_choice. La définition de {"type": "tool", "name": "record_claims"} force l'utilisation de cet outil précis, de sorte que chaque réponse arrive sous forme de JSON validé par le schéma.

Utiliser "any" garantirait qu'un outil quelconque est appelé ; forcer l'outil nommé constitue la garantie la plus stricte lorsque vous ne disposez que d'un seul outil d'extraction.

resp = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=2048,
    tools=[extract_claims],
    tool_choice={"type": "tool", "name": "record_claims"},
    messages=[{
        "role": "user",
        "content": (
            "Extract every factual claim from the document below. "
            "For each, attach the verbatim quote, document name, "
            "and the source URL and publication date if present.\n\n"
            f"<document>{source_text}</document>"
        ),
    }],
)

Les citations exactes réduisent les hallucinations

Exiger une citation exacte (et non une paraphrase) est un levier de fiabilité, pas une simple formalité. Lorsque le modèle doit recopier le texte justificatif exact, il lui est beaucoup plus difficile d'affirmer quelque chose que la source n'a jamais dit.

Renforcez cette consigne avec des critères explicites dans le prompt et 2 à 4 exemples en apprentissage par exemples. Ces exemples sont particulièrement efficaces pour le format de sortie, les cas limites et la réduction des hallucinations — le modèle généralise le schéma au lieu de simplement répéter vos exemples.

PROMPT = (
    "Rules:\n"
    "- 'quote' MUST be copied verbatim from the document. Never paraphrase.\n"
    "- If a claim has no exact supporting sentence, DO NOT emit it.\n"
    "- Leave 'publication_date' empty if the document states no date.\n\n"
    "Example:\n"
    "claim: 'Revenue grew 12% in Q3.'\n"
    "quote: 'Third-quarter revenue rose 12% year over year.'\n"
    "document_name: 'FY24 Q3 Earnings Release'\n"
)

Transmettre la traçabilité entre les sous-agents

Dans un système de recherche en étoile, les sous-agents n'héritent pas de l'historique de conversation du coordinateur. Chaque sous-agent doit renvoyer ses résultats avec les correspondances de sources associées, car le coordinateur n'a aucun autre moyen de savoir d'où provient un fait.

Le coordinateur agrège ensuite ces objets d'affirmation autonomes. Si un sous-agent renvoie une simple phrase sans citation ni nom de document, ce fait devient invérifiable dès qu'il quitte le contexte du sous-agent — considérez-le comme dépourvu de traçabilité, et non comme un résultat valide.

# Each subagent returns claim objects, not loose prose.
subagent_result = {
    "agent": "market-research",
    "claims": [
        {
            "claim": "EV sales reached 14M units in 2023.",
            "quote": "Global EV sales hit 14 million units in 2023.",
            "document_name": "IEA Global EV Outlook 2024",
            "source_url": "https://iea.org/evo-2024",
            "publication_date": "2024-04-23",
        }
    ],
}
# Coordinator aggregates self-contained, traceable claims.
aggregated.extend(subagent_result["claims"])

Signaler les conflits — ne pas choisir arbitrairement

Lorsque deux sources ne concordent pas sur une statistique, choisir silencieusement l'une d'elles est la mauvaise approche. La bonne approche consiste à signaler le conflit et à présenter les deux affirmations avec leurs sources.

Souvent, la date de publication résout la contradiction apparente : un chiffre de 2021 et un chiffre de 2024 ne sont pas contradictoires — ils constituent une série chronologique. C'est précisément pourquoi la date mérite sa place dans chaque correspondance. Conservez les deux chiffres, étiquetez-les et laissez un humain (ou une règle tenant compte des dates) trancher.

conflict = {
    "metric": "global_ev_sales_units",
    "values": [
        {"value": "6.6M", "document_name": "IEA EV Outlook 2022",
         "publication_date": "2022-05-23"},
        {"value": "14M", "document_name": "IEA EV Outlook 2024",
         "publication_date": "2024-04-23"},
    ],
    "note": "Not contradictory: different reporting years. Dates resolve it.",
}

Détecter les sources manquantes par autocorrection

L'autocorrection consiste à extraire deux valeurs que vous pouvez comparer. Pour la traçabilité, demandez au modèle d'émettre chaque affirmation avec un indicateur précisant si une citation justificative a effectivement été trouvée, puis validez par programmation que chaque affirmation en comporte une.

Cela détecte l'échec silencieux d'une phrase assurée envoyée sans aucun élément probant. Ici, la validation est structurelle — ce qui convient parfaitement à une boucle de nouvelle tentative.

def validate_provenance(claims):
    problems = []
    for c in claims:
        if not c.get("quote", "").strip():
            problems.append(f"No quote: {c['claim']!r}")
        if not c.get("document_name"):
            problems.append(f"No document_name: {c['claim']!r}")
    return problems  # empty list == provenance complete

Réessayer avec un retour d'information — mais connaître ses limites

Si la validation détecte une lacune structurelle (citation manquante, date mal formée), utilisez une nouvelle tentative avec retour d'information : envoyez au modèle le document original, sa propre sortie incorrecte et l'erreur exacte de validation. Cette méthode corrige de manière fiable les erreurs de format et de structure.

Limite essentielle : une nouvelle tentative n'est pas utile lorsque l'information est simplement absente de la source. Si le document ne comporte réellement aucune date de publication, aucune nouvelle tentative ne la fera apparaître — et vous ne devez pas le permettre. Laissez le champ vide et continuez plutôt que de boucler indéfiniment.

problems = validate_provenance(claims)
if problems:
    retry = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=2048,
        tools=[extract_claims],
        tool_choice={"type": "tool", "name": "record_claims"},
        messages=[
            {"role": "user", "content": f"<document>{source_text}</document>"},
            {"role": "assistant", "content": prior_output},
            {"role": "user", "content":
                "These claims lack a verbatim quote or document_name: "
                + "; ".join(problems)
                + ". Add the exact supporting quote, or DROP the claim "
                  "if no supporting text exists. Do not invent sources."},
        ],
    )

Présenter la traçabilité selon le type de contenu

Une fois les affirmations mises en correspondance, présentez-les dans le format adapté au contenu. Présentez les données financières sous forme de tableaux, les actualités sous forme de texte suivi et les résultats techniques sous forme de listes — avec leurs points d'ancrage de source visibles.

Pour la supervision humaine, une note de bas de page ou une colonne finale contenant le nom du document, la date et un lien permet une vérification immédiate plutôt qu'une enquête. Une traçabilité invisible est une traçabilité que personne ne vérifiera.

| Metric        | Value | Source                    | Date       |
|---------------|-------|---------------------------|------------|
| EV sales 2023 | 14M   | IEA Global EV Outlook 2024| 2024-04-23 |
| EV sales 2022 | 6.6M  | IEA Global EV Outlook 2022| 2022-05-23 |

<!-- Financials -> table. News -> prose. Tech findings -> list. -->

Vérification rapide : statistiques contradictoires

Un système de recherche multi-agent agrège un chiffre de taille de marché que deux sous-agents ont rapporté différemment : une source primaire indique « 4,2 milliards de dollars (rapport daté de 2021) » et une autre « 7,1 milliards de dollars (rapport daté de 2024) ». Le coordinateur doit produire une réponse vérifiable pour un réviseur humain.

Récapitulatif : correspondances entre affirmations et sources

Points essentiels pour l'examen et les systèmes en production :

  • Associez chaque affirmation à quatre points d'ancrage : URL, nom du document, citation exacte, date de publication.
  • Imposez la structure avec tool_use + schéma JSON et forcez-la via tool_choice.
  • Ne rendez un champ obligatoire que s'il est toujours présent — ne rendez jamais obligatoire un champ potentiellement absent, sinon le modèle le fabriquera.
  • Les sous-agents n'héritent pas de l'historique ; chacun doit donc renvoyer des affirmations autonomes et traçables.
  • Signalez les conflits ; laissez les dates résoudre les contradictions apparentes au lieu de choisir arbitrairement.
  • Utilisez une nouvelle tentative avec retour d'information pour les lacunes structurelles — mais acceptez qu'une nouvelle tentative ne puisse pas fournir une information absente de la source.
  • Présentez les informations selon leur type de contenu (tableaux/texte suivi/listes), avec les sources visibles pour la supervision humaine.
Gratuit pour commencer

Apprends Python 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
26
Leçons
104

Questions Fréquemment Posées

La leçon « Correspondances entre affirmations et sources » est-elle gratuite ?

Oui — le texte complet de « Correspondances entre affirmations et sources » 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 Claude Architect, passe à CoddyKit PRO. Le cours Claude Architect comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Correspondances entre affirmations et sources » ?

Conservez les URL, noms de documents, citations et dates avec les affirmations. Tu pratiques Claude Architect 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 Claude Architect ?

Aucune expérience préalable n'est requise. Claude Architect 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 1 sur 4.

Combien de temps prend la leçon « Correspondances entre affirmations et sources » ?

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 Claude Architect ?

Oui. Chaque leçon Claude Architect 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. Correspondances entre affirmations et sources
  2. Données et dates contradictoires
  3. Les indicateurs agrégés dissimulent les échecs
  4. Échantillonnage stratifié et étalonnage
← Retour à Claude Architect