Apply to my task
arXiv:2606.23989 ★ 72 Jun 22, 2026

CAMS: Two-Step Summarization — Extract Facts with Quotes First, Then Write

Key result

An LLM lies about locations, but it can't lie about text. Ask "give the paragraph number" and you get a made-up reference. Ask "copy it verbatim" and it's either exact or obviously wrong. CAMS lets you summarize 3+ sources so that every summary sentence is tied to a quote you can find with Ctrl+F in a second, not a vague "see source 2" spanning three pages. The trick: the pipeline splits generation into two isolated moments: first each document is broken into minimal facts with verbatim quotes, then the summary is written only from those. The sources are already closed, so the model can't add anything extra. Hallucinations are cut off structurally, not suppressed by an instruction.

01

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.

02

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.

03

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.

04

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

05

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.

06

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.

07

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)

Research digest

Key result

An LLM lies about locations, but it can't lie about text. Ask "give the paragraph number" and you get a made-up reference. Ask "copy it verbatim" and it's either exact or obviously wrong. CAMS lets you summarize 3+ sources so that every summary sentence is tied to a quote you can find with Ctrl+F in a second, not a vague "see source 2" spanning three pages. The trick: the pipeline splits generation into two isolated moments: first each document is broken into minimal facts with verbatim quotes, then the summary is written only from those. The sources are already closed, so the model can't add anything extra. Hallucinations are cut off structurally, not suppressed by an instruction.

Principle

The standard approach is one request: "write a summary of all four articles." The model blends everything together: facts from different sources merge, contradictions get smoothed out, references get invented. CAMS does the opposite: five isolated steps, each solving one problem. Each step isolates a zone where an error could appear and keeps it from moving down the chain. Extract facts with quotes → cluster identical facts from different sources → select the important ones → rewrite with inline references → check both ways: does the quote support the sentence? are all the sentence's facts in the quote? If not, rewrite or delete.

Why it works

When a model writes a summary from several texts at once, it follows language patterns. Facts from three sources merge into one "memory." It writes confidently even if source A says 200 casualties and source B says 340. The numbers just get averaged or lost. CAMS breaks that chain. Copying someone else's text verbatim is an exact-reproduction task, and models handle it well. Remembering where exactly a phrase came from is a guessing task. The quote is locked in before rewriting, so the meaning has no time to get distorted. And the rewriting draws only on locked-in facts, not on the whole context, which is already closed. Contradictions between sources don't get smoothed over: they surface explicitly at the clustering step.

When to apply

Analysis across multiple sources: comparing reports, news summaries, competitive breakdowns, especially when you need to know who said what. Legal tasks: comparing contract positions or the parties' testimony. Research reviews: when it's important not to lose conflicting data between papers. NOT a fit: a single document (the pipeline is overkill), urgent tasks without automation (5 steps across 7+ sources get tedious).

Mini recipe

1. Extract facts with quotes (for each source separately): ask the model for a list of atomic claims: one claim = one fact, self-contained, no pronouns. Each fact gets a verbatim quote from the text. No quote, skip it. 2. Cluster and find conflicts (one request with all the claims): ask it to group identical facts from different sources into clusters and pull contradictions out separately, noting who says what. 3. Select what matters: give criteria, for example "only facts from 2+ sources" or "only those directly related to topic X." This is the step where you control how conservative the summary is. 4. Rewrite with references: ask for a summary built only from the selected clusters. Every sentence must end with a reference [g1], [g3, g7]. Nothing beyond the list. 5. Check both ways: for each sentence, does the quote support it? are all the sentence's facts in the quote? If either answer is "no," rewrite or delete.

Examples

[BAD]: `Write a summary of these four articles about Google's acquisition deal` [GOOD]: step 1 — for each source separately: `Read the text below. Extract atomic claims. Rules: one claim = one fact; each fact is self-contained — no 'he', 'the company', only full names and dates; each fact gets a verbatim quote from the text, an exact copy; no direct quote — skip it. Format: [1] Fact: {claim} / Quote: "{excerpt}" / Source: Forbes. Text: {paste the article}` step 4 — rewriting: `Write a summary based ONLY on these claims. Not a single fact beyond the list. Every sentence ends with a reference [g1] or [g3, g7]. Call out contradictions explicitly: 'According to Forbes... whereas Bloomberg reports...'. Claims: {list of clusters}` Result: a summary where every sentence is tagged with an id, and you can find the quote in the original in a second.

In plain words

The problem with classic summaries is that the AI works like a storyteller: it reads a mountain of documents and then produces a loose retelling where facts from different sources are mashed into mush. This happens because an LLM just predicts the next word, trying to guess the "average" of the context. What you get is text that sounds smooth but is actually a moderate-grade hallucination, where a number from one report got glued to the name of a company from another.

It's like asking three witnesses to a car crash what happened, then writing up their statements as one combined story. Everything seems logical, but you no longer remember who saw the red light and who saw the speeding. If one of them lied or got it wrong, that lie gets smeared across your entire report, and you'll never trace it back. The CAMS method (Claim-Anchored Attribution) kills this bad habit at the root, replacing creativity with rigorous engineering.

The idea is to turn writing into assembling a building set. First the model pulls atomic claims out of each document: the shortest, driest possible facts, backed by verbatim quotes. No making stuff up, just a hard link to the source. Then the final text is assembled from these "bricks," and every sentence has an airtight alibi in the form of a reference to a specific fact. It's not a retelling, it's high-precision assembly from verified blocks.

It was tested on hard tasks with piles of documents, but the principle is universal for any serious analysis. Whether it's an investor report, a medical case review or a legal analysis, anywhere the cost of error is high, you can't trust the model's "memory." CAMS turns the AI from a chatty humanities major into a meticulous archivist who doesn't just say "the market is growing" but points a finger at a specific line in a Chase Data report.

Bottom line: the era of trusting an algorithm's "word of honor" is ending, and the era of provable summarization is beginning. Stop asking the model to just "make it short." Make it first break the incoming stream into parts, then reassemble it with an inventory list. That's the only way to get a result you can show your boss or client without worrying that the AI made something up again. Anyone who doesn't switch to this approach will keep cleaning up after the AI's "creative wins."

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on CAMS: Two-Step Summarization — Extract Facts with Quotes First, Then Write arXiv:2606.23989

Sign in to apply this study New accounts get 50 free credits.