This prompt is designed for fact-checking and verification pipelines that must surface disagreements across a set of sources. It extracts factual claims that are actively disputed, identifies which sources support and refute each claim, and classifies the nature of the dispute. Use this when you need structured, machine-readable conflict data before generating an answer or briefing. This prompt belongs in the evidence conflict detection stage, after retrieval but before synthesis or user-facing presentation. It is not a general summarization tool and should not be used when sources are expected to be in complete agreement.
Prompt
Disputed Fact Extraction Prompt Template

When to Use This Prompt
Understand the job this prompt performs, the required inputs, and the boundaries where it should not be applied.
The ideal user is an AI pipeline engineer or product developer building a research assistant, decision-support system, or verification workflow. The prompt requires a set of retrieved passages or documents as input, along with a target claim or question to anchor the dispute detection. It expects the model to output a structured list of disputed facts, each with supporting and refuting source citations and a dispute classification. Do not use this prompt on single-source inputs, on passages that all originate from the same underlying report, or in contexts where the goal is to produce a unified answer rather than a conflict map. Using it on uncontested background information will produce false positives or empty results.
Before wiring this into production, define clear evaluation criteria: precision of extracted disputes (avoiding false positives on paraphrased agreement), recall of genuine contradictions, and accuracy of source attribution. Run the prompt against a golden dataset of known conflicts and uncontested passages to calibrate thresholds. If the downstream system will present conflicts to end users, add a human review step for high-severity or high-impact disputes before they reach the UI. The output of this prompt feeds into synthesis, resolution, or presentation prompts—never directly to users without validation.
Use Case Fit
Where the Disputed Fact Extraction Prompt Template works and where it does not. This prompt is designed for structured fact-checking pipelines, not for casual Q&A or open-ended summarization.
Good Fit: Structured Verification Pipelines
Use when: you have a defined set of factual claims to verify against a curated document corpus. The prompt excels at extracting disputed claims, pairing them with supporting and refuting sources, and classifying dispute types. Guardrail: ensure the input documents are pre-retrieved and relevant before invoking extraction.
Bad Fit: Open-Ended Research Questions
Avoid when: the user asks a broad question without specific claims to verify. The prompt is designed to extract and classify disputes, not to generate research questions or perform exploratory synthesis. Guardrail: use a separate classification or triage prompt to determine whether the input contains verifiable factual claims before routing to this template.
Required Inputs: Claims and Source Documents
What you need: a set of factual claims to verify and a collection of source documents with clear identifiers. Without both, the prompt cannot perform dispute extraction. Guardrail: validate that each input includes claim text, source text, and source identifiers. Reject inputs with missing or ambiguous source references before extraction.
Operational Risk: False Disputes from Paraphrasing
What to watch: the model may flag paraphrased agreement as a dispute when sources use different terminology to express the same fact. This produces false positives that waste reviewer time. Guardrail: include few-shot examples of paraphrased agreement labeled as non-disputes, and add a post-extraction verification step that checks for semantic equivalence before flagging.
Operational Risk: Missed Implicit Contradictions
What to watch: the model may miss contradictions that require inference, such as when one source implies a fact that another source explicitly denies. Guardrail: pair this prompt with a separate contradiction detection prompt that handles implicit conflicts, and use human review for high-stakes claims where inference gaps are likely.
Scale Risk: High Token Usage Per Claim
What to watch: each claim requires multiple source passages in the context window, making this prompt expensive for large-scale verification. Guardrail: batch claims with shared source documents, pre-filter sources to the most relevant passages, and set a maximum claims-per-request limit to control latency and cost.
Copy-Ready Prompt Template
A production-ready prompt for extracting disputed factual claims from multiple sources, identifying supporting and refuting evidence, and classifying dispute types.
This prompt template is designed to be pasted directly into your system instructions for a fact-checking or verification pipeline. It instructs the model to extract only claims where sources actively disagree, ignoring uncontested background information. The template uses square-bracket placeholders that you must replace with your specific data before sending the request to the model. The output is structured JSON suitable for downstream processing, audit logging, or human review queues.
textYou are a disputed fact extraction system. Your task is to analyze a set of source passages and identify factual claims where sources disagree. You must distinguish genuine disputes from uncontested background information, differences in scope, or paraphrased agreement. ## INPUT **Claim Context:** [CLAIM_OR_QUESTION] **Source Passages:** [SOURCE_PASSAGES] ## OUTPUT SCHEMA Return a JSON object with the following structure: { "disputed_claims": [ { "claim_id": "string", "claim_text": "string (the specific factual statement in dispute)", "supporting_sources": [ { "source_id": "string", "source_excerpt": "string (the exact text supporting the claim)", "support_strength": "direct | indirect | weak" } ], "refuting_sources": [ { "source_id": "string", "source_excerpt": "string (the exact text refuting the claim)", "refutation_strength": "direct | indirect | weak" } ], "dispute_type": "factual_contradiction | methodological_difference | interpretation_divergence | scope_mismatch | temporal_change", "confidence": "high | medium | low", "resolution_notes": "string (brief assessment of whether the dispute is resolvable with available evidence)" } ], "uncontested_claims": [ { "claim_text": "string", "supporting_sources": ["source_id"], "confidence": "high | medium | low" } ], "extraction_metadata": { "total_sources_analyzed": "number", "total_disputes_found": "number", "limitations_notes": "string (any caveats about the extraction quality)" } } ## CONSTRAINTS 1. Only extract claims where at least two sources actively disagree. Do not flag differences in emphasis, wording, or level of detail as disputes. 2. For each disputed claim, you must provide exact excerpts from both supporting and refuting sources. Never paraphrase source content in the excerpts. 3. If sources appear to conflict but actually discuss different time periods, populations, or conditions, classify the dispute_type as "scope_mismatch" or "temporal_change" rather than "factual_contradiction." 4. If multiple sources agree on a claim but cite the same original source, do not treat this as independent corroboration. Note this in resolution_notes. 5. If no disputes are found, return an empty disputed_claims array and explain why in extraction_metadata.limitations_notes. 6. Set confidence to "low" when the dispute relies on inference rather than explicit contradiction, or when source reliability is questionable. ## EXAMPLES **Example 1: Direct Factual Contradiction** Source A: "The company reported revenue of $4.2 billion in Q3 2024." Source B: "The company's Q3 2024 revenue was $3.8 billion." Output: { "claim_text": "The company's Q3 2024 revenue was $4.2 billion", "dispute_type": "factual_contradiction", "confidence": "high" } **Example 2: Temporal Change (Not a Dispute)** Source A: "The policy was in effect from January 2023." Source B: "The policy took effect in March 2023 after amendments." Output: { "claim_text": "The policy effective date", "dispute_type": "temporal_change", "confidence": "medium", "resolution_notes": "Source A may reference the original announcement date; Source B references the amended effective date. Not a direct contradiction." } **Example 3: Paraphrased Agreement (Not a Dispute)** Source A: "The treatment reduced symptoms in 67% of patients." Source B: "Approximately two-thirds of patients experienced symptom reduction." Output: Do not extract as disputed. These sources agree. ## RISK LEVEL [RISK_LEVEL] If RISK_LEVEL is "high": Flag all disputed claims for human review before any downstream use. Include a note in extraction_metadata indicating that human verification is required.
To adapt this template, replace the square-bracket placeholders with your actual data. [CLAIM_OR_QUESTION] should contain the specific claim or question being investigated. [SOURCE_PASSAGES] should contain the full text of each source passage, each clearly labeled with a source_id that matches the identifiers used in the output schema. [RISK_LEVEL] should be set to "high" for regulated domains, customer-facing claims, or decisions with significant consequences; set to "medium" or "low" for internal research or exploratory analysis where human review is still recommended but not mandatory for every dispute. After adapting the template, test it against a golden dataset of known disputes and non-disputes to verify that the model correctly distinguishes genuine conflicts from paraphrased agreement and scope differences.
Prompt Variables
Each placeholder must be populated before the prompt is sent. Validation notes describe what the model expects.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[SOURCE_DOCUMENTS] | The set of documents or passages to analyze for disputed factual claims | {"doc_1": "The study found a 12% increase...", "doc_2": "Researchers observed a 4% decline..."} | Must contain at least 2 documents. Each document must have a unique identifier. Null or single-document input should be rejected before prompt assembly. |
[CLAIM_DOMAIN] | The subject area or domain scope for claim extraction to prevent over-extraction of irrelevant facts | "clinical trial outcomes for cardiovascular drugs" | Must be a non-empty string under 200 characters. Vague domains like 'science' produce noisy extractions. Validate against a domain taxonomy if available. |
[DISPUTE_THRESHOLD] | Minimum level of disagreement required to classify a claim as disputed rather than varied in phrasing | "direct_contradiction" | Accepted values: 'direct_contradiction', 'substantive_disagreement', 'any_divergence'. Default to 'substantive_disagreement' if unset. Controls false-positive rate on paraphrased agreement. |
[SOURCE_RELIABILITY_MAP] | Optional mapping of source identifiers to reliability scores for weighting conflicting claims | {"doc_1": 0.85, "doc_2": 0.62} | If provided, values must be floats between 0.0 and 1.0. Null allowed. Missing source IDs in map should trigger a warning. Used for conflict resolution weighting. |
[OUTPUT_SCHEMA] | The expected JSON schema for the extracted disputed facts array | {"type": "array", "items": {"claim": "string", "supporting_sources": ["string"], "refuting_sources": ["string"], "dispute_type": "string"}} | Must be a valid JSON Schema object. Required fields: claim, supporting_sources, refuting_sources, dispute_type. Reject malformed schemas before prompt assembly. |
[MAX_CLAIMS] | Upper bound on the number of disputed facts to extract to control output size and cost | 10 | Must be an integer between 1 and 50. Values above 50 risk truncation in long-context windows. Default to 15 if unset. |
[CONFIDENCE_THRESHOLD] | Minimum model confidence required to include a disputed claim in output; claims below threshold are dropped | 0.7 | Must be a float between 0.0 and 1.0. Lower values increase recall but raise false-positive risk. Pair with eval checks on precision at threshold boundaries. |
[EXCLUDE_PATTERNS] | Regex or keyword patterns for claims to exclude from extraction to suppress known noise categories | ["funding source", "sample size"] | Optional array of strings. Null allowed. Each pattern is matched case-insensitively against extracted claims. Useful for suppressing methodological disputes when only outcome disputes are wanted. |
Implementation Harness Notes
How to wire the Disputed Fact Extraction prompt into a production verification pipeline with validation, retries, and human review.
The Disputed Fact Extraction prompt is not a standalone widget; it is a processing stage in a fact-checking or verification pipeline. In production, you will typically call this prompt after retrieving a set of source documents or passages relevant to a target claim or topic. The prompt expects a structured input containing the claim under review and the full text of each source, and it returns a structured output of disputed facts, supporting and refuting sources, and dispute classifications. The harness around this prompt is responsible for input assembly, output validation, retry logic, logging, and escalation when the model cannot resolve a dispute with sufficient confidence.
Begin by constructing the input payload carefully. The [CLAIM] placeholder should receive the exact claim text being verified. The [SOURCES] placeholder should receive a JSON array of source objects, each with source_id, source_text, and optional source_metadata fields (e.g., publication date, author, domain). If your retrieval system returns more sources than the model's context window can hold, implement a pre-ranking step using a lighter relevance model or a keyword overlap heuristic to select the top-N most relevant sources. After the model returns its response, validate the output against a strict schema: each disputed fact must have a non-empty claim field, at least one supporting_sources or refuting_sources entry, and a dispute_type from your allowed enum (e.g., factual_contradiction, interpretation_divergence, scope_mismatch, temporal_change). Reject any output that contains claims not present in the input sources or that classifies a fact as disputed when all sources agree. A second validation pass should check that every cited source_id actually exists in the input payload to prevent hallucinated citations.
Implement a retry recovery loop for validation failures. If the output fails schema validation, feed the validation error messages back into the prompt as additional [CONSTRAINTS] and request a corrected output. Limit retries to two attempts before escalating to a human review queue. For high-stakes domains such as healthcare, legal, or finance, always route outputs with dispute_type values of factual_contradiction or interpretation_divergence to a human reviewer before the results are surfaced to end users. Log every prompt call with the input claim, source IDs, raw model output, validation results, retry count, and final disposition. This audit trail is essential for debugging false positives (e.g., the model flagging paraphrased agreement as a dispute) and false negatives (e.g., missing contradictions that require inference across sources).
Model choice matters for this workflow. The prompt requires strong instruction-following, structured output generation, and the ability to compare claims across multiple documents. Prefer models with native JSON mode or structured output support to reduce parsing failures. If you are using a model without guaranteed schema adherence, add a post-processing repair step that attempts to fix common formatting errors (e.g., unescaped quotes, trailing commas) before falling back to a retry. For cost-sensitive pipelines, consider routing simpler cases—such as single-source verification or claims with obvious consensus—to a smaller, faster model, and reserving the full multi-source dispute extraction prompt for cases where an initial relevance or contradiction signal suggests conflict is likely.
Finally, integrate this prompt into a broader evaluation framework. Maintain a golden dataset of claims with known disputes and known consensus cases. Run the prompt against this dataset on every prompt change, model upgrade, or pipeline modification. Measure precision (what fraction of flagged disputes are genuine conflicts) and recall (what fraction of known disputes are detected). Track false positives from paraphrased agreement and false negatives from implicit contradictions. If precision drops below an acceptable threshold, tune the prompt's instructions for distinguishing genuine conflict from stylistic or scope differences. If recall drops, consider adding a pre-processing step that rewrites source passages into a common claim structure before comparison.
Expected Output Contract
The model must return a JSON object matching this schema. Validate each field before passing the output downstream.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
disputed_claims | array of objects | Must be a non-empty array if disputes are found; empty array allowed only when no disputes exist | |
disputed_claims[].claim_text | string | Must be a complete, self-contained factual statement; not a fragment or question | |
disputed_claims[].supporting_sources | array of strings | Each element must match a source identifier from [SOURCE_IDS]; array must contain at least one entry | |
disputed_claims[].refuting_sources | array of strings | Each element must match a source identifier from [SOURCE_IDS]; array must contain at least one entry | |
disputed_claims[].dispute_type | enum string | Must be one of: factual_contradiction, methodological_difference, interpretation_divergence, scope_mismatch, temporal_change | |
disputed_claims[].confidence | number | Must be a float between 0.0 and 1.0 inclusive; values below [CONFIDENCE_THRESHOLD] should trigger human review | |
disputed_claims[].source_quote_pairs | array of objects | If present, each object must contain source_id (string matching [SOURCE_IDS]) and quote_text (string under [MAX_QUOTE_LENGTH] characters) | |
uncontested_background | array of strings | If present, each element must be a factual statement not disputed across sources; null allowed when no background context is extracted |
Common Failure Modes
What breaks first when extracting disputed facts in production and how to guard against it.
False Disputes from Paraphrased Agreement
What to watch: The model flags two sources as conflicting when they actually agree but use different terminology, scope, or granularity. This inflates dispute counts and erodes trust. Guardrail: Add a pre-check instruction requiring the model to verify whether the core factual claim is identical before classifying a dispute. Include few-shot examples of paraphrased agreement vs. genuine contradiction.
Missed Implicit Contradictions
What to watch: The model fails to detect contradictions that require inference—such as when one source implies a timeline that another source directly contradicts without stating it explicitly. Guardrail: Include a secondary extraction pass that asks the model to infer timelines, quantities, and categorical claims before comparing. Pair with a human review step for high-stakes disputes.
Source Grounding Drift
What to watch: The model attributes a disputed claim to the wrong source or fabricates a citation that looks plausible but doesn't exist in the provided passages. Guardrail: Require verbatim quote extraction alongside each dispute classification. Validate that every attributed claim maps to a span in the source text before accepting the output.
Dispute Type Misclassification
What to watch: The model conflates factual contradictions with methodological differences, scope mismatches, or temporal changes—labeling everything as a factual dispute. Guardrail: Use a constrained enum for dispute types and include definitions with examples in the system prompt. Run a classifier eval on a golden set of known dispute types to measure precision per category.
Over-Extraction of Uncontested Background
What to watch: The model extracts every factual statement as disputed, including well-established background facts that no source contests. This floods downstream systems with noise. Guardrail: Add a dispute threshold requiring at least two sources with opposing positions. Instruct the model to explicitly label uncontested facts as such and exclude them from the dispute output.
Temporal Staleness Masquerading as Dispute
What to watch: An older source states a fact that a newer source updates, but the model treats this as a contradiction rather than a temporal change. Guardrail: Require publication dates or recency metadata in the input schema. Add a temporal-awareness instruction that distinguishes outdated information from genuine disagreement and flags staleness separately.
Evaluation Rubric
Run these checks on a golden dataset of source sets with known disputes. Each row tests a specific failure mode of the Disputed Fact Extraction Prompt Template.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Disputed Fact Recall | All known disputed claims in the golden set are extracted with a matching [CLAIM_ID] | Missing a known disputed claim; extracting only uncontested background facts | Compare extracted claim count and IDs against golden set annotations |
Non-Dispute Discrimination | Zero uncontested facts are classified as disputed | Extracting widely agreed-upon statements (e.g., 'water boils at 100°C') as disputes | Spot-check 20 extracted claims against golden set; flag false positives |
Source Support/Refute Alignment | Each extracted claim correctly maps sources to 'supports' or 'refutes' per golden labels | A source labeled 'refutes' in golden set appears in the 'supports' list | Pairwise comparison of source-position mappings for 10 sampled claims |
Dispute Type Classification Accuracy | Dispute type matches golden label for >= 90% of claims | Classifying a factual contradiction as a methodological difference or vice versa | Confusion matrix of predicted vs. golden dispute types across full test set |
Citation Span Precision | Each source reference includes a verifiable quote or passage span that supports the assigned position | Source cited but quoted text does not actually support or refute the claim | Manual review of quoted spans for 15 randomly selected source-claim pairs |
Hallucinated Source Check | No sources appear in output that are not present in the provided [SOURCE_SET] | Output references a source ID, title, or quote not found in input context | Regex match all source identifiers against input manifest; flag orphans |
Output Schema Compliance | Output is valid JSON matching the [OUTPUT_SCHEMA] with all required fields present | Missing required field; wrong type; unparseable JSON | Automated schema validation on 100% of test outputs |
Empty Input Handling | Returns an empty disputes array when [SOURCE_SET] contains no contradictory claims | Fabricates a dispute or returns a non-empty array for a consensus-only source set | Run prompt on a golden set with zero known disputes; assert disputes.length === 0 |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base prompt and a small set of 3–5 source documents. Remove strict output schema requirements initially—accept paragraph-style responses and manually review whether disputed facts are correctly separated from background context. Use a lightweight eval: spot-check 10 outputs for the three core fields (claim, supporting source, refuting source).
Add a simple instruction at the end of the prompt:
If no dispute is found, return an empty list. Do not invent disagreements.
Watch for
- Model conflating disputed facts with uncontested background information
- Missing source attribution when only one side is cited
- Over-eager dispute detection on minor wording differences rather than substantive factual conflicts

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us