Modstridende data og datoer
Annotér konflikter; datoer løser tilsyneladende modsigelser
Modstridende data og datoer er en gratis Claude Architect-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Claude Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Claude Architect-kurset indeholder 4 lektioner i alt.
Når kilder er uenige
I et forskningssystem med flere agenter kan to underagenter returnere kendsgerninger, der er direkte modstridende. Én kilde siger, at en virksomhed har 8.000 ansatte; en anden siger 12.000. Den naive løsning er at vælge én i stilhed og rapportere den som sandheden.
Det er et anti-mønster. Svaret på arkitekturniveau er at annotere konflikten og bevare begge udsagn med deres sporbarhed, så et menneske (eller en efterfølgende model) kan afgøre sagen. Denne lektion lærer, hvordan modstridende data synliggøres, og hvordan datoer ofte løser tilsyneladende modsigelser, der først ser uløselige ud.
Sporbarhed er fundamentet
Du kan ikke annotere en konflikt, du ikke kan spore. Proveniens betyder, at du bevarer en påstand → kilde-tilknytning for hvert faktum: URL-adressen eller dokumentnavnet, det nøjagtige citat og, vigtigst af alt, udgivelsesdatoen.
Uden denne tilknytning er en modsigelse bare støj. Med den kan du præcist vise brugeren, hvor hvert tal kommer fra, og hvornår det blev offentliggjort — det råmateriale, der skal til for at løse uenigheden.
claim = {
"statement": "Headcount is 12,000",
"source_name": "Q4 2025 Annual Report",
"url": "https://example.com/ar-2025.pdf",
"quote": "As of Dec 31, 2025, we employed 12,000 people.",
"published": "2026-02-15",
}Annoter, afgør ikke
Grundreglen er: annoter modstridende statistikker i stedet for at vælge én vilkårligt. Når kilder er uenige, må systemet IKKE reducere dem til en enkelt "vinder" ved lodtrækning, overdreven vægtning af aktualitet eller ved at vælge det svar, som den senest svarende underagent gav.
Vis i stedet begge påstande side om side, hver med kilde og dato, og markér tydeligt, at de er i konflikt. Modellens opgave er at synliggøre uenigheden med tilstrækkelig kontekst til, at et menneske kan træffe afgørelsen — ikke at skjule den.
Datoer løser tilsyneladende modsigelser
Her er denne lektions vigtigste pointe: Mange "modsigelser" er slet ikke modsigelser — de er to korrekte øjebliksbilleder fra forskellige tidspunkter.
"Omsætningen er 4,2 mia. dollar" (regnskabsåret 2023) og "Omsætningen er 5,1 mia. dollar" (regnskabsåret 2025) er ikke i konflikt. Begge udsagn er sande på deres respektive datoer. Når du knytter udgivelsesdato og skæringsdato til hver påstand, opløses den tilsyneladende modsigelse til en tidslinje. Derfor er udgivelsesdatoen et centralt felt i proveniensen.
Struktureret output til konfliktregistreringer
For at gøre konfliktannotering pålidelig skal du tvinge modellen til at bruge et JSON Schema via tool_use. Det eliminerer syntaksfejl og håndhæver obligatoriske felter. En konfliktregistrering bør indeholde hver påstand med dens værdi, kilde og dato — samt en løsningsnote.
Indstil tool_choice: "any", når du skal garantere struktureret output (modellen skal kalde et eller andet værktøj i stedet for at svare med fri tekst).
tools = [{
"name": "record_conflict",
"description": "Record two or more conflicting claims with provenance and a date-based resolution.",
"input_schema": {
"type": "object",
"properties": {
"metric": {"type": "string"},
"claims": {"type": "array", "items": {"type": "object"}},
"resolution": {"type": "string"},
},
"required": ["metric", "claims"],
},
}]
# Force structured output
resp = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
tools=tools,
tool_choice={"type": "any"},
messages=messages,
)Gør aldrig et muligvis manglende felt obligatorisk
En subtil, men eksamensvigtig regel for skemaer er: Markér kun et felt som obligatorisk, hvis det altid er til stede. Hvis en kilde reelt mangler en udgivelsesdato, må du IKKE gøre published obligatorisk — et obligatorisk, men manglende felt får modellen til at opfinde en dato, hvilket ubemærket ødelægger din datobaserede løsning.
I konfliktens skema ovenfor er metric og claims obligatoriske; resolution og udgivelsesdatoen published for hver påstand er valgfrie. En ærlig null-værdi er bedre end en hallucineret dato.
"properties": {
"value": {"type": "string"},
"source_name": {"type": "string"},
"published": {"type": "string", "description": "ISO date if stated; omit if absent"},
},
"required": ["value", "source_name"] # published intentionally NOT requiredEksplicitte kriterier slår vage instruktioner
Det betyder noget, hvordan du instruerer modellen. "Vær forsigtig med modstridende data" er vagt og inkonsekvent. Et eksplicit kriterium er langt stærkere:
- "Markér kun to værdier som modstridende, når de beskriver den samme måling for den samme entitet."
- "Sammenlign deres skæringsdatoer, før du markerer dem; hvis datoerne er forskellige, skal du behandle dem som en tidsserie og ikke som en modsigelse."
Eksplicitte, testbare kriterier giver gentagelig registrering af konflikter. Vage tillægsord gør ikke.
Brug få-skuds-eksempler til at skelne mellem datoer
Konflikt kontra tidslinje er netop den slags tvetydighed, hvor 2–4 målrettede få-skuds-eksempler gør stor forskel. Modellen generaliserer ud fra dem — den husker ikke bare de konkrete tal.
Giv ét eksempel på en reel konflikt (samme dato, forskellige værdier → markér den) og ét eksempel på en datoløst ikke-konflikt (forskellige datoer → rapportér den som en tidslinje). Modellen lærer beslutningsgrænsen og anvender den på ukendte målinger.
examples = [
{"a": "Rev $4.2B (FY2023)", "b": "Rev $5.1B (FY2025)",
"verdict": "NOT a conflict — different fiscal years; report as timeline"},
{"a": "Headcount 8,000 (as of 2026-01)", "b": "Headcount 12,000 (as of 2026-01)",
"verdict": "CONFLICT — same date, same metric; annotate both with sources"},
]Bevar datoer ordret i sagsfakta
Lange researchkørsler bliver opsummeret, så de passer i kontekstvinduet — og progressiv opsummering gør tal, procenter og datoer vage. "Udgivet i begyndelsen af 2026" er ubrugeligt, når hele løsningen afhænger af første kvartal kontra tredje kvartal.
Løsningen er at hente transaktionelle fakta — nøjagtige værdier, kilder og datoer — ind i en separat blok med "sagsfakta", der bevares ordret uden for opsummeringen. Opsummér brødteksten, men opsummér aldrig de datoer, du skal bruge til at løse konflikter.
case_facts = (
"VERBATIM — DO NOT SUMMARIZE:\n"
"- Headcount 8,000 | src: 10-K | published 2025-03-01\n"
"- Headcount 12,000 | src: Press release | published 2026-02-15\n"
)
# Keep separate from the rolling conversation summarySelvkorrektion opdager uoverensstemmelser
For at opdage konflikter mekanisk skal du få modellen til at udtrække konkurrerende værdier eksplicit i stedet for at udsende ét sammenblandet tal. Ved udtrækning er dette mønstret calculated_total over for stated_total; i research er det værdi fra kilde A over for værdi fra kilde B.
Når begge værdier er synliggjort som særskilte felter, kan en validator i Pydantic-stil sammenligne dem, opdage uoverensstemmelsen og udløse vejen til konfliktannotering — uden lydløs middelberegning.
from pydantic import BaseModel
class MetricClaim(BaseModel):
source: str
value: float
published: str | None = None
def detect_conflict(a: MetricClaim, b: MetricClaim) -> bool:
if a.published and b.published and a.published != b.published:
return False # date resolves it: timeline, not conflict
return a.value != b.valueGengiv efter indholdstype
Når konflikter er annoteret, og datoerne er afstemt, skal du præsentere resultatet, så et menneske hurtigt kan træffe afgørelsen. Tilpas gengivelsen til indholdstypen:
- Tabeller til økonomiske tal og konkurrerende numeriske påstande — én række pr. kilde og kolonner for værdi, kilde og dato.
- Brødtekst til nyheder og fortællende kontekst.
- Lister til tekniske fund.
En tabel med oplysningerne side om side gør en konflikt på samme dato tydelig, og en datoordnet tabel afslører straks en tidslinje — så rå proveniens bliver til en oversigt, der er klar til menneskeligt tilsyn.
Hurtigt tjek: To tal, to datoer
En researchunderagent returnerer: Kilde X siger, at ARR er 40 mio. dollar (udgivet marts 2024); Kilde Y siger, at ARR er 58 mio. dollar (udgivet februar 2026). Din aggregator skal rapportere dette til brugeren. Hvad er den korrekte arkitekturadfærd?
Opsamling: Konflikter og datoer
Vigtigste pointer om modstridende data og proveniens:
- Annoter, afgør ikke — synliggør modstridende påstande med kilder; vælg aldrig én i stilhed.
- Datoer løser tilsyneladende modsigelser — forskellige skæringsdatoer betyder en tidslinje, ikke en konflikt.
- Proveniens er obligatorisk — bevar tilknytninger mellem påstand og kilde med URL, citat og udgivelsesdato.
- Bevar datoer ordret i en separat blok med sagsfakta; opsummering gør datoer vage.
- Gør ikke manglende felter obligatoriske — en valgfri null-dato er bedre end en opdigtet dato.
- Gengiv efter type — brug tabeller til tal, så konflikter og tidslinjer er tydelige for den menneskelige kontrollant.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 26
- Lektioner
- 104
Ofte stillede spørgsmål
Er lektionen “Modstridende data og datoer” gratis?
Ja — alle 3 lektioner i læringssporet Claude Architect, inklusive “Modstridende data og datoer”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Claude Architect-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Modstridende data og datoer”?
Annotér konflikter; datoer løser tilsyneladende modsigelser Du øver dig i Claude Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Claude Architect?
Der kræves ingen tidligere erfaring. Claude Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Modstridende data og datoer”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Claude Architect-lektion?
Ja. Alle Claude Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Koblinger mellem påstande og kilder
- Modstridende data og datoer
- Aggregerede nøgletal skjuler fejl
- Stratificeret sampling og kalibrering