Rubric
Contents — domains, guide and mocks

Provenance in multi-source synthesis

CCAR-F 5.612 min read · checked 21 September 2026

Task statementPreserve information provenance and handle uncertainty in multi-source synthesis

Provenance travels with the claim

  1. Search subagentclaim + URL + quote + date
  2. Analysis subagentadds method, keeps source fields
  3. Synthesismerges, marks conflicts and gaps
  4. Reportevery claim cited; contested ones flagged
Every hop passes structured claim records, not prose. The source, location and date are attached at the first hop and never re-typed from memory.

Where provenance gets lost

Each time information passes between agents it is usually condensed. A search subagent reads twenty pages and returns a summary; an analysis agent summarises the summaries; a synthesis agent writes prose. If attribution is not carried as data, it is the first thing to go: “according to the 2025 regulator report, p. 14” becomes “reports suggest”, and by the final draft nobody can say which claim came from where. Anthropic’s multi-agent research write-up describes the same risk as a game of telephone, and lets subagents write outputs to external storage and pass lightweight references rather than routing everything through the lead agent’s retelling.

Passing findings between agents

Flattened into prose

  • “Studies show adoption rose sharply”
  • Which studies? Which year?
  • Two sources merged into one claim
  • Report cannot be checked

Structured claim records

  • Claim, source, location, quote
  • Publication and data dates
  • Each source kept separate
  • Every sentence traceable
A claim record that survives every hopjson
{
  "claim": "Adoption among mid-size firms reached 41%",
  "source": "https://example.org/survey-2025.pdf",
  "location": "page 14, table 3",
  "quote": "41% of firms with 50–249 employees…",
  "published": "2025-11-03",
  "data_period": "Q2 2025",
  "method": "survey, n=1,200",
  "found_by": "search-subagent-2"
}

Instruct every subagent to return findings in this shape, and instruct the synthesis agent to preserve the source fields for every claim it keeps. Anthropic’s long-context guidance points the same way from the input side: wrap each document in its own tagged block with its source as metadata, so the model always knows which text came from where.

Let the API carry the citations

When Claude is answering from documents you supply, the Citations feature removes most of the guesswork. Set citations: {"enabled": true} on document blocks and the response comes back with each supported sentence tied to a location: character ranges for plain text, page numbers for PDFs, block indices for custom content, each with the cited_text. The documentation reports that these citations are more reliable than asking for quotes in the prompt, because the API parses them into guaranteed-valid pointers, and cited_text does not count toward output tokens.

For retrieval systems, search result blocks do the same for your own content. A tool can return search_result blocks, each with a source (a URL or an internal ID such as kb://article-1234), a title and text content; with citations enabled, Claude’s answer carries search_result_location citations that name the source and title you supplied.

Returning retrieved passages so Claude can cite thempython
def kb_search_result(hits):
    # One search_result block per retrieved passage; the source travels with it.
    return [{
        "type": "search_result",
        "source": h.url,                          # URL or internal ID
        "title": f"{h.title} ({h.published})",    # dates help explain conflicts
        "content": [{"type": "text", "text": h.passage}],
        "citations": {"enabled": True},
    } for h in hits]

tool_result = {
    "type": "tool_result",
    "tool_use_id": block.id,
    "content": kb_search_result(hits),            # all blocks must be search_result
}

# Later, read citations off the answer's text blocks:
for part in response.content:
    for c in getattr(part, "citations", None) or []:
        print(c.source, "→", c.cited_text[:60])

When sources disagree

Conflicting sources are normal in research, and the worst response is a silent one: picking one figure without saying so, or averaging two figures into a number nobody published. Many apparent conflicts are explained by metadata — different years, different definitions, different populations — which is why dates and methods belong in the claim record. When a conflict remains, report both values with their sources and say what might explain the difference.

Two sources give different figures

Why do the sources disagree?
  • Different dates or periods
    Report both, datedthe difference may be real change
  • Different definitions
    Report both, definedstate what each measured
  • One source clearly stronger
    Lead with itnote the other and why
  • No explanation found
    Flag as contestedboth values, both sources

A synthesis sentence, before and after

Smoothedtext

The market grew about 10%
last year.

Attributedtext

Estimates differ. Source A
reports 12% growth for 2025
(published Feb 2026, revenue
basis). Source B reports 8%
for FY2025 (Jul–Jun, unit
volume basis). The gap may
reflect the different
measures; no source
reconciles them directly.
The strong version keeps both figures, their sources and dates, and tells the reader what is and isn’t settled.

Show how sure the report is

A useful synthesis distinguishes well-established findings (several independent, strong sources agree) from contested ones (credible sources disagree) and from thin ones (a single source, or a weak one). Structure the output so that difference is visible — separate sections or explicit labels — rather than writing every claim in the same assured tone. Report coverage gaps too: if a source type could not be searched, say so (see 5.3).

Anthropic’s guide to reducing hallucinations adds three habits that fit here: allow the model to say it does not know; have it find supporting quotes before making claims and retract any claim it cannot support; and restrict it to the provided sources when general knowledge should not leak in. Their multi-agent research system ends with a dedicated citation agent that goes through the documents and the report to find a specific source location for each claim. Source quality matters as much as attribution — the same write-up notes that early agents favoured SEO-heavy content farms over authoritative sources until quality heuristics were added to the prompts.

Traps the wrong answers are built from

Tempting but wrongDo this instead
Passing findings between agents as flowing prosePass structured claim records with source, location, quote and dates.
Silently choosing one of two conflicting figuresReport both with sources and dates, and explain or flag the conflict.
Averaging conflicting values into one numberKeep each value tied to its source; nobody published the average.
Writing contested and established claims in the same toneLabel or separate findings by strength of support.
Asking the model to add citations at the end from memoryUse API citations or search result blocks, or carry sources from the first hop.

You should now be able to

  • Design claim–source records that preserve provenance across agent hops.
  • Enable Citations on documents and use search_result blocks for retrieved content.
  • Handle conflicting sources by reporting both with attribution and explaining differences.
  • Use publication and data dates to interpret apparent contradictions.
  • Structure synthesis output to separate established, contested and thinly supported findings.
  • Know that Citations cannot be combined with structured outputs, and what to do instead.

Practice questions

Original questions written for this lesson, in the exam’s style. Answer first, then open the reasoning — every option is explained, including why the wrong ones are tempting.

  1. Question 1

    A multi-agent research system’s search subagents return findings as paragraphs of prose. The synthesis agent’s reports read well, but reviewers often cannot tell which source supports a given sentence, and some sentences blend claims from two sources.

    What is the most effective fix?

    1. ATell the synthesis agent to add a references list at the end of each report.
    2. BHave subagents return claim records with source, location, quote and date for each finding.
    3. CIncrease the synthesis agent’s context so it can read the full source documents again.
    4. DAdd a final agent that guesses the most likely source for each sentence.
    Show answer and reasoning
    1. AIncorrect. A list at the end does not link individual claims to sources, and blended claims stay blended.
    2. BCorrect. Attribution is attached at the first hop and carried as data, so synthesis cannot lose it.
    3. CIncorrect. Re-reading everything is costly and still does not force per-claim attribution.
    4. DIncorrect. Guessing attribution after the fact can produce confident, wrong citations.
  2. Question 2

    Two reputable sources give different figures for the same market: one says 12% growth, the other 8%. The synthesis agent currently reports “about 10% growth”.

    How should the synthesis handle this?

    1. AKeep the average, since it balances the two reputable sources fairly.
    2. BUse the more recently published figure and drop the other one.
    3. COmit the growth figure entirely because the sources disagree.
    4. DReport both figures with their sources, dates and definitions, and flag the conflict.
    Show answer and reasoning
    1. AIncorrect. Neither source published 10%; averaging creates an unsupported figure and hides the disagreement.
    2. BIncorrect. Recency may matter, but silently dropping a credible source hides a real conflict from the reader.
    3. CIncorrect. Withholds useful information; the reader is better served by both figures with context.
    4. DCorrect. The reader sees both values, what explains the gap if known, and that the point is contested.
  3. Question 3

    A legal research tool passes contract PDFs to Claude and needs every statement in the answer to point to the exact page it came from. The team also wants the answer returned as strict JSON matching a schema.

    Which design meets both needs?

    1. AEnable Citations on the PDFs and structured outputs on the same request.
    2. BPut page, quote and document fields in the JSON schema, then verify each quote.
    3. CReturn free text and ask a second model to convert it to JSON with page numbers.
    4. DDrop the page requirement, since the document name alone is enough provenance.
    Show answer and reasoning
    1. AIncorrect. The documentation says this combination returns a 400 error.
    2. BCorrect. Keeps strict JSON while carrying provenance as data, with a check that quotes exist.
    3. CIncorrect. The second model has to infer the pages, which reintroduces unverifiable attribution.
    4. DIncorrect. Tempting for simplicity, but reviewers need the exact location to check a claim quickly.

Sources

Drafted with AI assistance and checked against the sources above; expert review is in progress. Spotted an error? Tell us and it gets fixed, dated and listed on how this is written.