Explainer

How to catch AI hallucinations: ask a model that wasn’t trained by the same lab

How to catch AI hallucinations: ask a model that wasn’t trained by the same lab

Every developer now has the scar: the AI's answer was fluent, specific, confident — and wrong. A method that doesn't exist, an API option that silently does nothing, a security claim that doesn't hold. You only found out after acting on it. The usual reaction is to distrust models in general, which throws away most of their value. The better diagnosis is narrower: the hallucination survived because you asked one model, and one model has no way to check itself.

There's a boring, reliable statistical fix, and it's the same one used everywhere from sensor fusion to code review: independent sampling. Ask the identical question to models trained by different labs. If Claude, GPT, and DeepSeek independently converge on the same answer, your confidence is earned — three independently trained systems rarely share one specific delusion. If they split, that's not a failure of the method. The split is the signal — it points at exactly the claim you need to verify by hand, before it costs you anything.

Why re-rolling the same model can't fix it

The instinctive check — "let me ask it again" or "let me rephrase" — helps less than it feels like it does. Re-sampling one model does catch variance: the places where the model is genuinely uncertain and its answers wobble between runs. That's worth something; measured on a coding benchmark, two runs of the same model plus a judge beat a single run 65.5% to 58.8%.

But the dangerous hallucinations aren't wobbly — they're stable. A model that internalized a plausible-but-wrong pattern from its training data will produce the same wrong answer on every re-roll, with the same confidence, under every rephrasing. Same weights, same training corpus, same alignment choices — same blind spot. Asking one model five times gives you five correlated samples, and correlated samples don't cancel correlated errors. You can even ask the model to double-check itself, and it will often "verify" its own hallucination using the same wrong belief that produced it.

Models from different labs break the correlation. Different training mixes, different data cutoffs, different RLHF choices, different failure tastes. They still overlap (more on that honest limit below), but a specific fabricated detail — an invented parameter, a misremembered version — is far less likely to be fabricated identically twice by independently trained systems. On the same benchmark family, a two-model panel judged into one answer beat the best solo model 69.0% to 65.3%.

Same model ×3 run 1 · wrong at the same spot run 2 · wrong at the same spot run 3 · wrong at the same spot correlated error → survives every re-roll Three vendors vendor A · errs here vendor B · errs there vendor C · errs elsewhere errors don't align → overlap = confidence, split = the signal to verify
Re-rolling one model resamples the same blind spot; models from different labs put their errors in different places, so agreement means something and disagreement points at the claim to check.

Disagreement is the product, not the failure

Most people run a cross-check hoping for agreement. The more valuable outcome is often the split. A disagreement between independently trained models is a free, automatic flag that says: this specific claim is contested — verify it before you build on it. No single model, however good, can hand you that flag, because it doesn't know which of its beliefs are the fabricated ones. Read a split not as "the AIs are useless" but as a precision-guided pointer to the risky part of the answer — the one paragraph out of twelve where your attention actually matters.

A worked example: the confident timeout that doesn't exist

A real shape of failure. You ask your assistant: "How do I set a 5-second timeout on fetch in Node?" One model answers instantly:

// Model A — fluent, specific, wrong
const res = await fetch(url, { timeout: 5000 })  // ← no such option

It looks right. It type-checks in loose setups, it runs, it throws no error — and it silently does nothing, because fetch has no timeout option. The pattern exists in older HTTP libraries, which is exactly why a model can absorb and reproduce it with full confidence. Ship it, and you find out during an incident that your "5-second timeout" waits forever.

Now the same question to a panel of three vendors:

That's a 2–1 split, and the split did the work: two independently trained models converged on the real API, one reproduced a training-data ghost, and C even explained where the ghost came from. A chairman model given all three answers returns something like:

AGREEMENT: split
CONFIDENCE: high

fetch has no `timeout` option (Expert A's suggestion silently no-ops).
Use AbortSignal.timeout(5000) passed as `signal`; catch the resulting
TimeoutError/AbortError. Expert A's pattern is valid for axios, not fetch.

Thirty seconds, a few cents of tokens, and a silent production bug became a labeled disagreement. Had you asked Model A three times instead, you'd have gotten the ghost option three times — with three times the confidence.

The practical protocol

Manually, the protocol is simple enough to start using today:

The manual version has the usual tax: copy-pasting context, and you playing judge across long answers. Backgrind automates the loop as Fusion Council: one hard question fans out in parallel to your own installed CLIs — Claude Code and Codex CLI, headless and enforced read-only in your repo, so their answers are grounded in your actual code — plus, via your own OpenRouter key, any catalog model as an API seat (GPT, Gemini, DeepSeek, Llama) to buy vendor diversity for cents. API calls go straight from your machine to openrouter.ai and the key stays local; API seats see only the question, never your repo. A chairman judges the anonymized answers against a rubric and returns one verdict whose first two lines are the whole point here: AGREEMENT: consensus|split and CONFIDENCE: high|low. Consensus lands as a quiet toast; a split pings you — the disagreement signal, delivered instead of hunted. The mechanics of the pattern are covered in asking multiple models one question, the OpenRouter-key setup in the model-council guide, and the judging step — why it needs a rubric, and how judges themselves are biased — in LLM as judge. If your specific worry is "Claude Code wrote this — is it right?", start with getting a real second opinion.

The honest limits: consensus is confidence, not proof

Cross-model checking reduces correlated error; it does not eliminate it. Frontier models are trained on heavily overlapping data — the same documentation, the same Stack Overflow answers, the same popular blog posts. If the training data itself is wrong or stale (an API that changed after every model's cutoff, a widely-copied insecure pattern), independently trained models can all inherit the same wrong belief and converge on it sincerely. Unanimous councils have been wrong before and will be again.

So calibrate what consensus buys you: it's a confidence signal that scales your verification effort, not a substitute for it. Consensus on a low-stakes answer → act. Consensus on a high-stakes answer → act, but keep the cheap verification (run the test, skim the doc page). Split → always verify the contested claim against a primary source. That policy gets you most of the value of verification at a fraction of the cost — and it fails gracefully, because the cases where it fails are the cases where every available AI would have told you the same wrong thing anyway.

Frequently asked questions

How do I reduce AI hallucinations when coding?
For answers you are about to act on, cross-check across vendors: ask the identical question to two or three models trained by different labs (Claude, GPT, Gemini, DeepSeek) and compare the core claims. Models from the same lab share training data and blind spots, so re-asking one model mostly reproduces the same error. Independent convergence across vendors is meaningful evidence; a split tells you exactly where to verify by hand.
Why does asking the same model again not catch hallucinations?
Because hallucinations are not random noise — many are systematic. A model that learned a plausible-but-wrong API pattern from its training data will confidently repeat it across re-rolls and rephrasings. Re-sampling one model catches variance (worthwhile), but correlated errors survive it. Breaking the correlation requires a model with different training, which means a different vendor.
Can I trust AI-generated code if multiple models agree on it?
Agreement raises confidence; it is not proof. Frontier models overlap heavily in training data (the same docs, the same Stack Overflow), so they can share a wrong belief and converge on it. Treat cross-model consensus as a strong prior that scales how much verification the answer needs — quick skim for a consensus, careful reading and a test for a split — not as a substitute for running the code.
What is the fastest way to cross-check an AI answer across models?
Manually: paste the identical question into two or three chat tabs from different vendors and line up the core claims. Automated: a council tool like Backgrind Fusion fans one question out to your own CLIs (read-only in the repo) plus any OpenRouter catalog models via your own key, and a chairman returns one verdict labeled AGREEMENT: consensus|split and CONFIDENCE: high|low — so a split finds you instead of you hunting for it.