Apply to my task
arXiv:2603.10047 ★ 86 Mar 8, 2026

Epistemic Stability Framework: 5 Techniques Against LLM Hallucinations — No Fine-Tuning, No Complex Infrastructure

Key result

10 reasoning steps at 90% accuracy each — overall accuracy is just 35%. This isn't theory. It's the math of compounding error, observed in real production systems at Trane Technologies. An error in the first step drags all the following ones with it — and the answer looks plausible but rests on guesswork, not facts. The study produced five prompt techniques against this effect — no fine-tuning, no code, no complex infrastructure. The most effective one (100 wins out of 100): stop feeding the model raw data — add context to every parameter: what it is, what's normal, what's a fault. The model doesn't need to guess. It just reads and applies.

01

TL;DR

When an LLM gets raw data without context, it fills the gaps by analogy, not by fact. The result: a diagnosis that looks plausible but rests on the statistics of "similar cases" rather than the actual data of the task. A study from Trane Technologies tested five prompting techniques that reduce this effect without changing the model, without a database and without code.

The main finding is mathematical, but practical: if every element of a 10-step answer is correct with 90% probability, the answer as a whole will be correct only 35% of the time. The longer and more complex the output, the higher the chance that at least one element is a hallucination. And an error in the first step drags all the following steps down with it. This isn't a hypothesis — these are observed failures in a real production system.

The five techniques attack the problem from different angles: M4 (Enriched Data Registry) won 100 out of 100 trials — simply by no longer feeding the model raw data and adding to every record "what it means, what's normal, what's broken, what happens next". M3 (Chain of Specialized Agents) — 80%, by splitting one huge multi-task prompt into four sequential single-task ones. M5 (Glossary Injection) — 77%, by removing term ambiguity before the work starts. M1 (Iterative Convergence) — 75%, by comparing several answers to the same question and stopping when they agree. M2 (Decomposition) — flopped at 34%, but after rework it recovered to 80%.

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

All five are separate prompt strategies. You can use them independently or combine them.

M4: Enriched Data Registry (the most effective)
  Step 1: Add 6 metadata fields to every data record
          → what it is, normal range, fault threshold, dependencies, implications, units
  Step 2: Give the enriched data + the question in one prompt
          → An answer grounded in clear context, not guesswork

M3: Chain of Specialized Agents
  Agent 1: Root cause analysis only → output
  Agent 2: Severity assessment only (receives A1 output) → output
  Agent 3: Remediation plan only (receives A1+A2) → output
  Agent 4: Final report only (receives everything) → final document
  [Each agent = a separate LLM request]

M5: Glossary Injection
  Step 1: At the start of the prompt, define every term and abbreviation
          → strict, unambiguous interpretation
  Step 2: Give the task
          → An answer without ambiguous readings of terms

M1: Iterative Convergence
  Step 1: Generate a first answer
  Step 2: Generate a second answer to the same prompt
  Step 3: Compare — are they similar enough?
          → If yes: return the latest answer
          → If no: repeat (up to 5 iterations)

M2: Decomposition (extraction → synthesis)
  Step 1: Extract only the facts from the complex request → a structured list
  Step 2: Synthesize an answer only from the extracted facts → final answer
  ⚠️ The naive version is worse than a direct request. It only works with the right extraction format.
03

Example

Task: You're the founder of a small mobile game studio. There's an incident — after an app update, your App Store rating dropped from 4.7 to 3.9 in three days. Complaints about crashes, lost progress, freezes. You need to figure out what happened, how critical it is, what to do and how to explain it to the team.

We apply M3 — a chain of four specialized agents.

**Request 1 — Root cause agent:**

You are a mobile app incident analysis specialist. 
Your only task: find the root cause of the incident.

Incident: After update v2.4.1 at 2:00 PM Friday, the app "PixelQuest" 
received within 72 hours: 847 one- and two-star reviews (vs ~30/week before), the rating dropped 
from 4.7 to 3.9, crash rate rose from 0.3% to 4.1%, crashes on the loading 
screen are mentioned in 60% of negative reviews, lost progress in 25%.

Perform ONLY the root cause analysis. No recommendations.
Format: 
- Most likely root cause
- Confidence level (high/medium/low) and justification
- What needs to be verified

---

**Request 2 — Severity assessment agent:**
[paste Agent 1's output]

You are a risk management specialist. Your only task: 
assess the severity of the incident.

Based on the analysis above, assess ONLY severity and urgency.
Format:
- Criticality level (critical/high/medium/low)
- Business risks over the next 7 days if nothing is done
- What will happen to the rating if nothing is done

---

**Request 3 — Remediation plan agent:**
[paste the outputs of Agents 1 and 2]

You are the CTO. Your only task: write a remediation plan.

Based on the analysis above, write ONLY an action plan.
Format:
- Actions in the next 2 hours
- Actions within the day
- Actions within the week
- Success metrics for each stage

---

**Request 4 — Final report agent:**
[paste the outputs of Agents 1, 2 and 3]

You are the head of communications. Your only task: 
write an internal post-mortem report.

Based on all the analyses above, write only the final document for the team.
Format: cause → consequences → plan → lessons for the future.
Tone: honest, no panic, action-oriented.

Result: Four separate answers — each focused and specific. Agent 4 gets structured input from the first three instead of trying to be a detective, a risk manager and a CTO all at once. An error in the first step won't drag down the whole document. The final post-mortem will rest on explicitly recorded conclusions, not guesswork.

04

Why It Works

An LLM is optimized for the "statistically plausible next token", not for "the right answer for this specific case"**. That's a fundamental difference. When you give it a complex multi-part question, the model tries to satisfy every requirement at once — and quietly "drops" some of them without warning. Structurally the answer looks complete. In reality it isn't.

An LLM's strength is working with explicitly structured context. If instead of a raw {"id": "CHW-V-01", "state": 100} you give {"id": "CHW-V-01", "state": 100, "normal_range": "20–80%", "fault_implication": "not enough cooling in the system"}, the model doesn't need to "guess" what the value 100 means. The context already holds the answer. The model's job shrinks from "guess what this means" to "read and apply".

The methods use this strength in different ways: - M4 eliminates information starvation at the input — the model doesn't invent context - M3 eliminates multitasking — no agent can "forget" its task, because it only has one - M5 eliminates term ambiguity — a word always means one specific thing - M1 uses instability as a signal — if two answers differ, the model doesn't know; we look for the moment it "makes up its mind"

Control levers: - Number of agents in M3 — you can add a "Reconciler" agent that reads all the outputs and resolves contradictions - Metadata fields in M4 — add only the ones that actually change the interpretation; the authors tried 20 fields and kept the 6 most influential - Glossary in M5 — make it dynamic: inject only the terms relevant to the specific request - Similarity threshold in M1 — the higher it is (85%), the stricter the stability criterion; lower it to 70% for creative tasks

05

Prompt Template

M4 — Enriched Data Registry (universal template)

Before answering, study the enriched data below. 
Each record contains not only a value but also the context needed to interpret it.

=== DATA ===
[
  {
    "parameter": "{parameter_name_1}",
    "value": "{current_value_1}",
    "normal": "{normal_range_1}",
    "alarm_threshold": "{when_it_is_a_problem_1}",
    "depends_on": ["{related_parameter_1}"],
    "if_deviation": "{what_it_means_for_the_task_1}",
    "unit": "{unit_of_measure_1}"
  },
  {
    "parameter": "{parameter_name_2}",
    "value": "{current_value_2}",
    "normal": "{normal_range_2}",
    "alarm_threshold": "{when_it_is_a_problem_2}",
    "depends_on": ["{related_parameter_2}"],
    "if_deviation": "{what_it_means_for_the_task_2}",
    "unit": "{unit_of_measure_2}"
  }
]
=== END OF DATA ===

Task: {question_or_task}

Base your answer only on the data above. 
If the data is insufficient, state explicitly what information is missing.

What to fill in: - {parameter_name} — a metric, indicator or table field - {current_value} — the actual number or status right now - {normal} — what counts as normal for this metric in your context - {alarm_threshold} — at what value it becomes a problem - {depends_on} — what affects this metric or what it drives - {if_deviation} — what a deviation from normal means in your task - {question_or_task} — what you need to find out or do


M3 — Agent chain (template for 4-step tasks)

=== AGENT {number}: {specialization} ===

You are a {specialist_role}. 
Your ONLY task: {one_specific_task}.

{if_not_the_first_agent: Context from previous agents:
[paste the outputs of the previous agents]}

Input data: {situation_description}

Perform ONLY {one_specific_task}. 
Do not {what_this_agent_should_NOT_do}.

Output format:
- {field_1}: ...
- {field_2}: ...
- {field_3}: ...

What to fill in: - {specialization} — root cause analysis / risk assessment / action plan / final report - {specialist_role} — detective, risk manager, CTO, editor - {one_specific_task} — strictly one, no "and also" - {what_NOT_to_do} — explicitly forbid what the other agents do


M5 — Glossary Injection

=== GLOSSARY: use these definitions throughout your answer ===
{term_1} — {clear_definition_in_your_context}
{term_2} — {clear_definition_in_your_context}
{abbreviation_1} — {expansion_and_context}
=== END OF GLOSSARY ===

{main_request}

🚀 Quick start — paste into the chat:

Here's the M4 template (Enriched Data Registry). 
Adapt it to my task: {describe the task}. 
Ask me questions to fill in all the fields.

[paste the template above]

The LLM will ask about your data: what each parameter means, what counts as normal, what counts as a failure — because without that the "normal" and "if_deviation" fields will be empty, and that's where all the power of the method lives.

06

Limitations

⚠️ M3 needs several requests in a row: Four agents means four separate chat messages. You have to copy each output into the next one. For long chains it's tedious, but doable by hand.

⚠️ M4 requires prep work: You have to know what "normal" and "alarm threshold" mean for your data. The LLM won't guess — that knowledge comes from the domain. If you don't know the norms yourself, the method won't help.

⚠️ M1 multiplies token usage: Each iteration is a new request. With 5 iterations you spend 5 times as much. On free accounts you may hit the limits.

⚠️ M2 in its naive version is worse than a direct request: The authors got 34% on the first try. "Just split it into parts" doesn't work. You need to strictly control the fact-extraction format before synthesis.

⚠️ No technique guarantees correctness: All the methods improve stability and consistency, not truth. If the data has an error, the model will faithfully reproduce the error.

⚠️ Results were also judged by an LLM: The researchers used the same model as the judge. That creates a risk of "circular evaluation" — the model approves its own patterns. The authors openly admit this.

07

How They Studied It

Engineers at Trane Technologies (a maker of climate control systems) ran into real problems in production systems: HVAC diagnostics gave different answers to the same question, abbreviations were interpreted differently across sessions, complex prompts lost requirements. They took five techniques, each attacking one specific cause of hallucinations, and ran each one 100 times on a fixed prompt at temperature 0.7 (deliberately high, to preserve stochasticity and honestly measure variability).

The judge was the same model (Azure OpenAI, presumably GPT-4o or newer). That's a limitation, but the authors acknowledge it openly. Here's what's interesting: M2 flopped at 34% in its first version — worse than a plain direct request. It's a rare case of a study honestly showing "the idea didn't work as intended" and digging into why. It turned out that just splitting a complex prompt into "fact extraction → synthesis" isn't enough — you need to strictly format the facts and explicitly link the steps. After the rework, M2 v2 rose from 34% to 80% — the biggest jump of any method.

The most unexpected result is M4 scoring 100/100. That's a total win, rarely seen in studies like this. The explanation is simple: the model wasn't guessing what state: 100 means for a valve — it was reading "normal: 20-80%, value 100 = valve fully open = not enough cooling". The information was in the prompt; there was nothing left to hallucinate.

08

Original from the Paper

M4 — Enhanced Data Registry (verbatim from the paper):

Example row (raw): {"id": "CHW-V-01", "state": 100}

Example row (enriched): {
  "id": "CHW-V-01", 
  "state": 100, 
  "component_type": "chilled water supply valve", 
  "normal_range": "20–80%", 
  "fault_threshold": ">95% for >5 min", 
  "depends_on": ["CHW-PUMP-01"], 
  "fault_implication": "chiller plant starved; warm air downstream", 
  "units": "%"
}

Context: The researchers were testing HVAC system diagnostics. A raw record is just an ID and a number. An enriched record tells the whole story: what it physically is, when it's normal, when to raise the alarm, what happens next.


M3 — Single-Task Agent Chain (algorithm structure):

Input: Incident scenario I
Output: Post-mortem report R_pm

1: c ← RootCauseAgent(I)
2: s ← SeverityAgent(I, c)
3: r ← RemediationAgent(I, c, s)
4: R_pm ← PostMortemAgent(I, c, s, r)
5: return R_pm

Context: It was tested on an ERP incident with six simultaneous symptoms: connection pool exhaustion (500/500), App Server 2 memory at 97% with a forced kill, cascading timeouts across six microservices, three failed overnight jobs, 100% CPU for 18 minutes, and a 40x traffic spike on one node.

09

Adaptations and Extrapolations

1. M4 for analyzing financial statements

You send the model a P&L — it sees rows of numbers. Without context, "$230K revenue against a $300K plan" is just a fact. With context, it's an alarm signal.

💡 Adaptation for financial analysis:

=== REPORT DATA (enriched) ===
[
  {
    "parameter": "Revenue, November",
    "value": "$230,000",
    "normal": "$280,000 – $320,000 (planned range)",
    "alarm_threshold": "below $250,000 — threatens operating liquidity",
    "depends_on": ["Number of new customers", "Average order value", "Churn"],
    "if_deviation": "Not enough to cover payroll without tapping working capital",
    "unit": "USD"
  },
  {
    "parameter": "Customer churn",
    "value": "8.2%",
    "normal": "Up to 4% per month",
    "alarm_threshold": "above 7% — a systemic problem with the product or service",
    "depends_on": ["Last quarter's NPS", "Support complaints"],
    "if_deviation": "ARR loss is accelerating; critical mass within 2 months",
    "unit": "%"
  }
]
=== END OF DATA ===

Task: What's happening with the business? What are the three biggest risks over the next 60 days?

2. M5 + M3 together: a glossary for the first agent

🔧 Technique: glossary → agent chain

Insert the M5 glossary before the first agent. Each subsequent agent inherits the definitions through the context. That way a word means one thing across the whole chain — interpretation errors don't pile up from agent to agent.

=== PROJECT GLOSSARY (for all agents) ===
"deadline" — the date the feature must be in production, not in staging
"critical bug" — a bug that blocks payment or sign-up
"stakeholder" — only Alex Miller and Maria Lopez, not the whole team
=== END OF GLOSSARY ===

=== AGENT 1: Root cause analysis ===
[then the standard M3 template]

3. M1 as a cheap check on an important decision

💡 Adaptation for checking important conclusions:

Instead of an automated loop — a manual version of M1. Ask the same question twice in different wordings. If the answers differ a lot, the model "doesn't know" and can't be trusted. If they match, it's a stable signal.

Question 1: What are the three biggest risks of entering the Brazilian market?

[in a new request]

Question 2: If we're planning to expand into Brazil, what could go wrong? 
Name three failure scenarios.

Compare the lists by hand. If they overlap — trust it. If they're completely different — dig deeper or give it more specific context.

10

Resources

Main paper: Toward Epistemic Stability: Engineering Consistent Procedures for Industrial LLM Hallucination Reduction — Brian Freeman, Adam Kicklighter, Matt Erdman, Zach Gordon. Trane Technologies, Davidson NC, USA. March 2026. [email protected]

Key works cited: - Wang et al. (2023) — Self-Consistency: majority voting across multiple reasoning paths - Wei et al. (2023) — Chain-of-Thought prompting - Madaan et al. (2023) — Self-Refine: iterative improvement of a draft - Lewis et al. (2021) — RAG (Retrieval-Augmented Generation) - Wu et al. (2023) — AutoGen: multi-agent frameworks

Research digest

Key result

10 reasoning steps at 90% accuracy each — overall accuracy is just 35%. This isn't theory. It's the math of compounding error, observed in real production systems at Trane Technologies. An error in the first step drags all the following ones with it — and the answer looks plausible but rests on guesswork, not facts. The study produced five prompt techniques against this effect — no fine-tuning, no code, no complex infrastructure. The most effective one (100 wins out of 100): stop feeding the model raw data — add context to every parameter: what it is, what's normal, what's a fault. The model doesn't need to guess. It just reads and applies.

Principle

An LLM doesn't lie — it guesses. Give it a raw number without context and it fills the gap with a "statistically similar answer", not the right one for the specific situation. Give it a huge request with ten requirements and it quietly drops some of them without warning. Structurally the answer looks complete. In reality it isn't. All five methods hit the same target: remove information starvation or isolate tasks so errors don't accumulate. M4 removes the starvation — it adds "what's normal" and "what's a fault" to every number. M3 isolates errors — four agents, each with one task, so the first one's mistake doesn't drag down the third. M5 removes ambiguity — a term always means one specific thing. M1 uses instability as a signal — if two answers differ, the model itself doesn't know; we look for the moment it "makes up its mind".

Why it works

Give it a raw number `100` and the model guesses what it means. Give it the same number with the fields "normal: 20–80%" and "deviation: not enough cooling in the system" and the task shrinks from "guess" to "read and apply". An LLM's strength is working with explicitly structured context. Its weakness is filling in what isn't there on its own. The kicker is that the error is predictable, not random: the first wrong step drags all the following ones with it. Isolate the steps and you isolate the errors. That's exactly why the M3 agent chain scored 80%, while naive M2 decomposition flopped to 34% on the first try — "just split it into parts" without format control doesn't work.

When to apply

Technical analysis with numeric data — equipment diagnostics, financial metrics, medical parameters — especially when there's a lot of data and each value needs interpretation, not just listing. Complex multi-step tasks — incident investigations, audits, post-mortems — where one early error breaks the whole conclusion. Tasks with industry jargon — where the same word means different things in different contexts. NOT a substitute for expertise: if you don't know what "normal" is for your data, M4 won't help. The methods improve the consistency of answers, not their truth. If the data contains an error, the model will faithfully reproduce it.

Mini recipe

Start with M4 — it's the simplest and works best: 1. Take your data: What do you usually feed the model? A table, JSON, a description of the situation — doesn't matter. 2. Add 4–6 fields to every parameter: name (what it is), value (the current fact), normal (what counts as normal in your specific context), alarm threshold (when it becomes a problem), if deviation (what it means in your task), depends on (what's connected). 3. Give the enriched data plus one specific question: One question, not three. Add at the end: "Base your answer only on the data above. If data is missing, say explicitly what's missing." If the task has several parts (diagnosis → assessment → plan → report): 4. Split it into agents with M3: The first agent does only the root cause, no recommendations. The second does only the severity assessment and receives the first one's output. The third does only the action plan and receives both outputs. Each agent is a separate chat message. Explicitly forbid each one from doing the others' work. 5. If there are industry terms, add a glossary with M5: The first lines of the prompt are a list of terms with definitions in your context. One term, one meaning, no "sometimes it means".

Examples

[BAD]: `{"sensor_id": "CHW-V-01", "value": 100, "state": "active"}. Diagnose the problem and give recommendations.` [GOOD]: `Study the data below before answering: { "parameter": "CHW-V-01 — chilled water supply valve", "value": "100%", "normal": "20–80% open", "alarm_threshold": "above 90% — the system can't keep up with the load", "if_deviation": "insufficient cooling supply, risk of loop overheating", "depends_on": ["pump CHW-P-01", "return line temperature setpoint"], "unit": "% open" } Task: determine the most likely root cause of the deviation. What should be checked first? Base your answer only on the data above. If data is missing, say explicitly what's missing.`

In plain words

By nature, models aren't encyclopedias — they're plausibility generators. When you ask an LLM to analyze a problem, it doesn't dig through some mental archive for facts; it just picks the words that statistically tend to appear together. If there isn't enough data, the model doesn't apologize — it starts filling the gaps with hallucinations, leaning on a one-size-fits-all average. You end up with an answer that looks professional but is essentially a pretty shell with nothing to do with your reality.

It's like calling a plumber who, instead of inspecting the pipes, starts lecturing you on fluid dynamics. The words sound smart, but the water in the basement keeps rising. The model behaves like a cocky intern: afraid to admit it doesn't know something, it starts making up details on the fly just so the report looks solid. You expect a deep diagnosis, and it hands you an averaged-out scenario from the internet that only vaguely resembles your case.

To make AI behave, researchers at Trane Technologies identified specific techniques that straighten the model out without retraining or code. The key is structural enforcement and tight guardrails. Instead of asking "what happened?", use multi-stage prompting and a clear split of roles. When you make the model first write down the bare facts, then match them to the symptoms, and only at the end draw a conclusion, you take away its chance to cut corners and spout nonsense.

The approach was tested on gritty industrial data, but the principle is universal. It cures hallucinations equally well whether a factory chiller breaks down or your app's App Store rating craters. If you don't give the model a clear analysis structure, it will "drop" important details of the request, because it's simply easier for it to churn out statistical noise than to actually think about your crashes and players' lost progress. The method works anywhere the cost of a mistake is higher than just "chatting".

Bottom line: stop relying on the model's "intelligence" — it's just computing probabilities. To get results instead of fantasy, take an engineering approach to prompts and make the AI go step by step. Either you tightly control the reasoning process, or you get a report that sounds true but leads your business into a dead end. Epistemic stability isn't about fancy words — it's about making the machine stop lying.

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 Epistemic Stability Framework: 5 Techniques Against LLM Hallucinations — No Fine-Tuning, No Complex Infrastructure arXiv:2603.10047

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