Claude Architect · Lektion

Kopplingar mellan påståenden och källor

Behåll URL:er, dokumentnamn, citat och datum tillsammans med påståendena.

Lektion 1 av 413 steg

Kopplingar mellan påståenden och källor är en gratis lektion i Claude Architect på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Claude Architect, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Claude Architect innehåller totalt 4 lektioner.

Varför spårbarhet är viktig

I ett forskningssystem med flera agenter sammanställer koordinatorn resultat från underagenter som hämtat fakta från olika dokument. Det sammanställda svaret är bara tillförlitligt om varje påstående kan spåras tillbaka till sitt ursprung.

En mappning mellan påstående och källa kopplar varje sakuppgift till dess ursprung: URL:en, dokumentnamnet, det exakta citatet och publiceringsdatumet. Utan den kopplingen har ni ett påstående som ingen mänsklig granskare kan verifiera och ingen efterföljande agent kan granska.

För Architect-examen ingår spårbarhet i Domain 4 (Prompt Engineering & Structured Output) och återkommer i Scenario 3 (Multi-Agent Research) och Scenario 6 (Structured Data Extraction).

Källans fyra förankringar

En källmappning bör alltid innehålla fyra förankringar så att en människa eller en annan agent kan hitta och verifiera beläggen igen:

  • URL — var dokumentet finns (eller en stabil identifierare).
  • Dokumentnamn — en titel som är begriplig för människor.
  • Citat — den ordagranna text som stöder påståendet, inte en parafras.
  • Publiceringsdatum — när källan publicerades eller senast uppdaterades.

Det ordagranna citatet gör det möjligt för en granskare att bekräfta att modellen inte hallucinerade eller överdrev. Datumet gör det möjligt att lösa konflikter senare, som vi ska se.

Modellera mappningen som strukturerad output

Be inte modellen att väva in källhänvisningar i löptext där de lätt kan utelämnas. Tvinga i stället fram en strukturerad form med ett JSON Schema via ett verktyg. Att kombinera tool_use med ett schema eliminerar syntaxfel och säkerställer att obligatoriska fält finns med.

Varje påstående blir ett objekt som innehåller sina egna källförankringar. Detta är grunden för ett verifierbart spårbarhetsregister.

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"]
    }
}

Obligatoriska fält: endast sådant som alltid finns

En subtil men avgörande regel inför examen: markera ett fält som obligatoriskt endast om det alltid finns i källan. Om ni kräver ett fält som kan saknas kommer modellen att fabricera ett värde för att uppfylla schemat.

Ett blogginlägg kanske saknar ett formellt publication_date; en intern PDF kanske saknar source_url. Därför är claim, quote och document_name obligatoriska (de finns alltid), medan source_url och publication_date förblir valfria. Ett tomt datum är ärligt; ett påhittat datum är ett spårbarhetsfel.

Tvinga fram strukturerad output med tool_choice

För att garantera att ni får tillbaka spårbarhetsobjektet i stället för fri text begränsar ni modellen med tool_choice. Inställningen {"type": "tool", "name": "record_claims"} tvingar fram just det verktyget, så varje svar kommer som schemavaliderad JSON.

Att använda "any" skulle garantera att något verktyg anropas; att tvinga fram det namngivna verktyget ger den starkaste garantin när ni bara har ett extraktionsverktyg.

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>"
        ),
    }],
)

Ordagranna citat minskar hallucinationer

Att kräva ett ordagrant citat (inte en parafras) är ett verktyg för tillförlitlighet, inte bara administration. När modellen måste kopiera den exakta stödjande texten blir det mycket svårare att hävda något som källan aldrig sade.

Förstärk detta med uttryckliga kriterier i prompten och 2–4 few-shot-exempel. Few-shot-exempel är särskilt effektiva för utdataformat, kantfall och för att minska hallucinationer — modellen generaliserar mönstret i stället för att bara upprepa era exempel.

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"
)

Bevara spårbarheten mellan underagenter

I ett nav-och-ekrar-baserat forskningssystem ärver underagenter inte koordinatorns samtalshistorik. Varje underagent måste returnera sina resultat med bifogade källmappningar, eftersom koordinatorn inte har något annat sätt att veta var en uppgift kom ifrån.

Koordinatorn sammanställer sedan dessa fristående påståenden. Om en underagent returnerar en ensam mening utan citat eller dokumentnamn kan uppgiften inte verifieras så fort den lämnar underagentens kontext — behandla den som saknad spårbarhet, inte som ett giltigt resultat.

# 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"])

Annotera konflikter — välj inte godtyckligt

När två källor inte är överens om en statistikuppgift är det fel att tyst välja den ena. Rätt tillvägagångssätt är att annotera konflikten och visa båda påståendena tillsammans med deras källor.

Ofta löser publiceringsdatumet den skenbara motsägelsen: en siffra från 2021 och en från 2024 motsäger inte varandra — de utgör en tidsserie. Det är precis därför datumförankringen hör hemma i varje mappning. Bevara båda, märk dem och låt en människa (eller en datummedveten regel) avgöra.

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.",
}

Identifiera saknade källor genom självkorrigering

Självkorrigering fungerar genom att två värden extraheras och jämförs. För spårbarhet låter ni modellen ange varje påstående tillsammans med en flagga som visar om ett stödjande citat faktiskt hittades, och validerar sedan programmatiskt att varje påstående innehåller ett sådant.

Detta fångar det tysta felet där en självsäker mening skickas utan belägg. Valideringen är strukturell — perfekt för en loop med nya försök.

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

Försök igen med återkoppling — men känn till begränsningarna

Om valideringen hittar en strukturell lucka (saknat citat, felaktigt formaterat datum) använder ni retry-with-feedback: skicka originaldokumentet, modellens felaktiga utdata och det exakta valideringsfelet till modellen. Detta rättar till format- och strukturfel på ett tillförlitligt sätt.

En viktig gräns: nya försök hjälper inte när informationen helt enkelt saknas i källan. Om dokumentet faktiskt inte har något publiceringsdatum kan inga nya försök trolla fram ett — och ni får inte låta dem göra det. Markera fältet som tomt och gå vidare i stället för att loopa för evigt.

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."},
        ],
    )

Presentera spårbarhet efter innehållstyp

När påståendena har mappats presenterar ni dem i det format som passar innehållet. Presentera ekonomiska uppgifter som tabeller, nyheter som löptext och tekniska resultat som listor — alltid med synliga källförankringar.

För mänsklig tillsyn gör en fotnot eller en avslutande kolumn med dokumentnamn, datum och en länk att verifieringen går snabbt i stället för att kräva en utredning. Spårbarhet som inte syns är spårbarhet som ingen kommer att kontrollera.

| 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. -->

Snabbkontroll: motstridiga statistikuppgifter

Ett forskningssystem med flera agenter sammanställer en uppgift om marknadsstorlek som två underagenter rapporterade olika: en primärkälla anger "$4.2B (rapport daterad 2021)" och en annan anger "$7.1B (rapport daterad 2024)". Koordinatorn måste ta fram ett verifierbart svar för en mänsklig granskare.

Sammanfattning: mappningar mellan påstående och källa

Viktiga slutsatser för examen och produktionssystem:

  • Koppla varje påstående till fyra förankringar: URL, dokumentnamn, ordagrant citat och publiceringsdatum.
  • Säkerställ formen med tool_use + JSON Schema och tvinga fram den via tool_choice.
  • Markera ett fält som obligatoriskt endast om det alltid finns — kräv aldrig ett fält som kan saknas, eftersom modellen då fabricerar det.
  • Underagenter ärver inte historiken, så varje underagent måste returnera fristående, spårbara påståenden.
  • Annotera konflikter; låt datum lösa skenbara motsägelser i stället för att välja godtyckligt.
  • Använd retry-with-feedback för strukturella luckor — men acceptera att nya försök inte kan tillhandahålla information som saknas i källan.
  • Presentera efter innehållstyp (tabeller/löptext/listor) med synliga källor för mänsklig tillsyn.
Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
26
Lektioner
104

Vanliga frågor

Är lektionen ”Kopplingar mellan påståenden och källor” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Claude Architect, inklusive ”Kopplingar mellan påståenden och källor”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Claude Architect innehåller totalt 4 lektioner.

Vad lär jag mig i ”Kopplingar mellan påståenden och källor”?

Behåll URL:er, dokumentnamn, citat och datum tillsammans med påståendena. Ni övar på Claude Architect med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Claude Architect?

Du behöver inga förkunskaper. Utbildningen i Claude Architect på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Kopplingar mellan påståenden och källor”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Claude Architect-lektionen?

Ja. Varje Claude Architect-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Kopplingar mellan påståenden och källor
  2. Motstridiga data och datum
  3. Aggregerade mätvärden döljer fel
  4. Stratifierat urval och kalibrering
← Tillbaka till Claude Architect