TL;DR
CAMS is a technique that splits summarization into two fundamentally different steps: first, atomic claims with verbatim quotes are extracted from each source; then the final text is written from those claims, with every sentence pointing to a specific fact. It's not a retelling, it's assembly from verified building blocks.
When you ask an LLM to "briefly summarize these three articles," the model produces smooth text that blends facts from different sources, quietly smooths over contradictions, and adds details that "seem logical." The upshot: the summary sounds convincing, but you can't tell where the source ends and the hallucination begins, and you have neither the time nor a way to check.
The fix: lock in the facts first, then write. Step 1: extract atomic claims from the document, each with a verbatim supporting quote and a source tag. Step 2: write the summary only from those claims, with every sentence citing a specific fact ID. If a fact isn't on the list, it isn't in the summary.
Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.
Method Blueprint
STEP 1: Fact extraction (a separate request for EACH document)
→ Atomic claim + verbatim quote from the text + source ID
STEP 2: Summary synthesis (one request)
→ Every sentence = a reference to a claim ID from step 1
→ Conflicts between sources are flagged explicitly, not swept under the rug
Both steps run in a regular chat. Step 1 can be run in parallel, one request per document.
Example in Practice
The task: You're preparing an analytical memo for an investor on the US online grocery market. You have three sources: an interview with the CEO of QuickBasket in Bloomberg, a Chase Data report on online grocery spending, and a TechCrunch article about funding rounds. You need a summary where every point can be checked.
Prompt — Step 1 (run it three times, once per document):
You are an analyst. Read the text below and extract atomic claims from it.
Rules:
— One claim = one specific fact
— No pronouns: instead of "he stated" write "QuickBasket CEO Mark Davis stated"
— Spell out dates, amounts, names — everything needed for the claim to make sense without context
— Attach a verbatim quote from the text to each claim
Output format:
<claim id="s1_1">
Claim: [self-contained fact]
Quote: [verbatim excerpt from the text]
Source: {source_name}
</claim>
Text:
{paste the full text of the document}
Prompt — Step 2 (after you've collected all the claims from all sources):
Here is a list of verified claims from three sources:
{paste all <claim> blocks from step 1}
Write an analytical summary for an investor — 5–7 paragraphs.
Rules:
— Use only the claims from the list above
— End every sentence with a reference: [s1_1], or [s2_3, s3_1] if there are several sources
— If the sources contradict each other, say so explicitly: "According to Bloomberg... whereas Chase Data..."
— Don't add anything of your own
Result: The model produces structured text where every sentence links to a claim ID. A separate block lists the contradictions between sources, with attribution for each. You can check any point in 2 minutes by finding the claim and opening its original quote.
Why It Works
An LLM generates the next token based on the entire context at once. When summarizing several documents, the model has no "brakes": it freely mixes facts, averages out contradictions, and sometimes fills in logic where the sources have gaps. You can't verify this, because the final text has no anchor to a specific place.
The LLM's strength is precisely following structured instructions. Ask the model to work by strict rules ("claim + verbatim quote + ID") and it will stick to them. Not because it "understands why," but because the XML structure removes ambiguity: the model follows the pattern instead of interpreting.
The method plays the strength against the weakness: the prompt structure physically forbids synthesis without attribution. Step 1 locks in facts separately from the text. Step 2 writes text only from what's locked in. Hallucination isn't eliminated, it becomes verifiable.
Control knobs: - Claim granularity → ask for "no more than 15 words per claim" for short summaries, drop the limit for analytical reports - Conflicts → add to step 2: "list all contradictions in a separate block" to get explicit discrepancies between sources - Citation strictness → add "if a sentence has no claim ID, leave it out of the summary" for maximum verifiability - Number of sources → the method works from two documents up and scales: 10 articles = 10 requests for step 1
Prompt Template
Step 1 — extraction (for each document separately):
You are an analyst. Extract atomic claims from the text below.
Rules:
— One claim = one specific, verifiable fact
— Resolve pronouns: instead of "he said" — "name, title, said"
— Restore context: dates, amounts, names — everything inside the claim
— Attach a verbatim quote from the text that supports the claim
Format:
<claim id="{source_sequence_number}">
Claim: [self-contained fact with no references to "the text above"]
Quote: [verbatim excerpt]
Source: {source_name}
</claim>
Text:
{full text of the document}
Step 2 — synthesis:
Here are claims from {number} sources:
{all <claim> blocks from step 1}
Write {output_format} on {task}.
Rules:
— Use only the claims above
— After each sentence add a reference [id], or [id1, id2] if there are several sources
— If the sources contradict each other, say so explicitly with attribution for each
— Information without a claim ID doesn't go into the text
Placeholders:
- {source_sequence_number} → for example bloomberg_1, chase_3 — any readable identifier
- {source_name} → "Bloomberg, interview from May 12, 2025" or just "Source A"
- {output_format} → "an analytical memo," "a meeting brief," "a comparative review"
- {task} → "the US online grocery market," "competitor strategy," "key project risks"
🚀 Quick start — paste into the chat:
Here is the CAMS template for summarizing multiple sources with verifiable references.
Adapt it to my task: {your task}.
Ask me questions to fill in the fields.
[paste the template above]
The LLM will ask how many sources you have and what format the final text should take, because step 1 has to run separately for each source, and step 2 depends on what you want as output.
Limitations
⚠️ Input size: A single document longer than 20–30 pages has to be split into parts, or the model loses citation accuracy. Run step 1 part by part.
⚠️ Not for surface-level tasks: If you just need "what is this article about," a two-step process is overkill. The method pays off where accuracy matters: legal documents, analytics, research, medicine.
⚠️ A quote ≠ a guarantee of truth: The model can quote text verbatim but misinterpret it in the claim. Step 1 reduces this risk but doesn't eliminate it: check claims against their verbatim quotes.
⚠️ Conflicts need an explicit instruction: By default an LLM aims for consistent text and may hush up a contradiction. Add to step 2: "list all contradictions between sources," or they'll vanish.
⚠️ No NLI-model verification: The full system uses specialized models to automatically check entailment. Done manually, verification is your job: look at the claim → read the quote → decide for yourself.
Resources
Attribution by Construction: Claim-Anchored Evidence for Faithfulness-Oriented Multi-Document Summarization Author: Shuo Guan (UBS AG, New York) Datasets: MultiNews, DiverseSumm, WCEP Baseline methods: Extract–Select–Rewrite (Guan & Padmakumar, 2023), ALCE (Gao et al., 2023), Attribute First (Slobodkin et al., 2024)