---
title: Hallucination Prevention in High-Stakes Domains
description: "A hallucinated flight number costs real money. Grounding, verification loops, and the \\\\\\\"I don't know\\\\\\\" capability keep AI booking honest."
canonical: https://nowah.xyz/blog/hallucination-prevention-high-stakes
lastModified: "2026-08-07T08:06:31.509Z"
---

# Hallucination Prevention in High-Stakes Domains

A hallucinated flight number costs real money. Grounding, verification loops, and the \\\"I don't know\\\" capability keep AI booking honest.

When a general-purpose AI halluccinates, the cost is usually embarrassment. It invents a fake citation. It generates a plausible-sounding fact that does not exist. Someone fact-checks it, points out the error, and life goes on.

When a travel booking AI hallucinates, the cost is money. Real money. A hallucinated flight number could lead a user to attempt to check in for a flight that does not exist. A wrong price could set expectations that lead to budget overruns. A fake hotel name could waste hours of planning.

Booking errors cost hundreds or thousands of dollars. Hallucination prevention in travel AI is not a nice-to-have quality initiative. It is a financial necessity.

I want to describe the specific types of hallucination we encounter in travel AI, the layered prevention system we have built, and the philosophical position that makes it all work: an agent that knows when to say "I don't know."

## The hallucination taxonomy for travel

![Illustration for this section](https://pics.nowah.xyz/website-media/ai-research-034-img-1.webp)

Not all hallucinations are equal. We classify them by type and severity.

**Fake entities.** The agent invents something that does not exist. A flight number that no airline operates. A hotel that does not exist at the stated location. An airline route that is not served. This is the most dangerous type because the user has no way to verify it without external research.

**Wrong attributes.** The entity exists but the details are wrong. The flight exists but the price is wrong. The hotel exists but the star rating or location is incorrect. The airline operates the route but not at the stated time.

**Invented policies.** The agent states a cancellation policy, baggage rule, or visa requirement that does not match reality. "This fare is fully refundable" when it is not. "You don't need a visa for this country" when you do.

**Confident nonsense.** The agent makes a definitive statement about something it cannot know. "The [best time to book](/blog/best-time-to-book-flights) this route is 6 weeks in advance." This might be statistically plausible but is stated as fact without any data backing.

Each type has a different severity profile. Fake entities are caught quickly (the user cannot find the flight). Wrong attributes can slip through and cost money. Invented policies can lead to costly decisions. Confident nonsense shapes expectations in ways that are hard to trace.

## Grounding as prevention

The primary defense against hallucination is grounding: every factual claim must be backed by real-time data from a tool call.

The principle is simple. The agent never states a flight price from memory. It queries the flight search API and presents the result. The agent never claims hotel availability from general knowledge. It queries the hotel API. The agent never states a visa requirement from training data. It queries the visa information tool.

This eliminates the most common hallucination vector: the model generating plausible-sounding facts from its parametric memory. Training data about flight prices is always stale. The model might have seen that SFO-NRT flights average $500, so it states a price near $500. The actual current price might be $380 or $650. Grounding replaces the guess with a fact.

Function calling accuracy exceeds 95% for well-defined schemas. At 95%, 1 in 20 tool calls might have an error. That 5% needs additional protection layers.

## Verification loops

![Supporting diagram](https://pics.nowah.xyz/website-media/ai-research-034-img-2.webp)

Grounding prevents the agent from inventing facts. Verification prevents the agent from misrepresenting facts that it actually retrieved.

Here is the scenario: the agent queries the flight API and gets back 10 results. It is supposed to present the top 3. In narrating the results, it might mis-attribute a price from one flight to another. Or round a departure time incorrectly. Or state "direct flight" when the result actually has a stop.

Verification loops catch this. After the agent generates its response, a verification step extracts factual claims from the response and checks them against the raw tool call results.

Claim: "Option A is a direct flight at $520." Verification: Check the tool result for Option A. Flight has 0 stops. Price is $520. Claim verified.

Claim: "Option B arrives at 3 PM." Verification: Check the tool result for Option B. Arrival time is 3:15 PM. Claim incorrect. Correct to 3:15 PM.

This verification adds a small amount of latency but catches a meaningful category of errors. We run it on all factual claims related to prices, times, and key attributes.

## The "I don't know" capability

Here is an opinion that I feel strongly about: the single most important safety feature of an AI agent is the ability to say "I don't know."

Language models are trained to be helpful. They generate responses. They have no built-in mechanism for silence or uncertainty. When asked a question they cannot answer, they generate a plausible-sounding answer anyway. This is the root cause of hallucination.

We train our agent to recognize the boundary of its knowledge and express uncertainty explicitly.

"I am not sure about the current [visa requirements](/blog/ai-agents-visa-requirements-documents) for this country. Let me check." Then it queries the visa tool rather than guessing.

"I cannot tell whether this hotel has been recently renovated. The reviews are from last year." Rather than assuming, it communicates the limitation.

"I don't have real-time delay information for that flight right now. I can check back in a few minutes." Rather than inventing a status update.

The "I don't know" capability requires specific [prompt engineering](/blog/prompt-engineering-travel-agents). The model instructions explicitly instructs the agent to express uncertainty rather than generate confident answers when data is missing. Few-shot examples demonstrate the behavior.

Users respond well to honest uncertainty. Trust in AI jumps when it explains its reasoning, and that includes explaining when its reasoning has gaps. An agent that says "I'm not sure, let me check" is more trustworthy than one that confidently states something that might be wrong.

## Measuring hallucination in production

We track hallucination through several mechanisms.

**Automated verification.** The verification loop described above runs on every response. We track the rate at which claims fail verification. This gives us a per-response hallucination rate for factual claims.

**Human review.** A sample of conversations is reviewed by human evaluators who flag factual errors, misleading statements, and invented information. This catches hallucinations that automated verification misses (opinion-based claims, subtle misrepresentations).

**User reports.** Users who encounter incorrect information can flag it. These reports go into our regression test suite.

**Cross-reference checks.** For bookings, we verify that the booking confirmation matches what was presented to the user. Price, flight number, dates, passenger names. Any mismatch is a hallucination that made it through prevention and must be investigated.

## Defense in depth

No single prevention mechanism is sufficient. We use layered defense:

**Layer 1: Grounding.** All factual claims use real-time tool data, not training data. This prevents the most common hallucination type.

**Layer 2: Schema design.** Well-designed tool schemas constrain the agent's output space. If the flight search returns structured data with specific fields, the agent can only present what the data contains.

**Layer 3: Verification loops.** Agent-generated claims are checked against source data before presentation.

**Layer 4: Uncertainty expression.** The agent recognizes when it lacks data and communicates uncertainty.

**Layer 5: User confirmation.** Before any irreversible action (booking, payment), the user sees full details and confirms. This is the final safety net.

**Layer 6: Post-action verification.** Booking confirmations are checked against what was presented. Mismatches trigger alerts.

Each layer catches hallucinations that earlier layers missed. The system is designed so that a hallucination would have to penetrate all six layers to cause real harm. The probability of that is very low.

## The culture of honesty

Hallucination prevention is not just a technical challenge. It is a cultural one.

The natural instinct when building AI products is to make the agent seem smart. Smart agents have answers. Smart agents are confident. Smart agents do not say "I don't know."

This instinct is wrong for high-stakes domains. In travel booking, a confidently wrong agent is worse than an honestly uncertain one. A user who gets incorrect visa advice and shows up at the airport without the right documentation has a far worse experience than a user who was told "I'm not certain about the visa requirements, let me check" and had to wait an extra 30 seconds.

We deliberately cultivate a culture of honesty in our agent design. The model instructions rewards uncertainty expression. The evaluation framework penalizes confident errors more heavily than uncertain non-answers. The product design makes "checking" feel like a feature, not a failure.

When the agent says "Let me verify that" and queries a live API before answering, it communicates due diligence. The user sees an agent that checks its facts rather than guessing. This builds trust even when it adds a few seconds of latency.

## The arms race against hallucination

Hallucination is not a bug that gets fixed once. It is an ongoing challenge that requires continuous attention.

Model updates can introduce new hallucination patterns. A model that was reliable about hotel information might start hallucinating after an update that changed its behavior for hospitality-related queries. We catch these through our regression test suite, which runs against every model change.

New capabilities can introduce new hallucination surfaces. When we added [itinerary generation](/blog/launching-itinerary-generation-ai-plans-trip), the agent gained the ability to hallucinate about activities, opening hours, and neighborhood descriptions that are not grounded in API data. We had to extend our grounding infrastructure to cover these new information types.

User creativity finds hallucination vectors that testing misses. A user who asks "what's the best time to see the northern lights from this hotel's rooftop?" combines a factual question (northern lights visibility) with an assumption (the hotel has a rooftop). The agent might confidently describe a rooftop aurora viewing experience at a hotel that has no rooftop access.

We treat hallucination prevention as an ongoing process, not a solved problem. The test suite grows. The verification layers improve. The prompt gets more specific about when to express uncertainty. But we never declare victory, because the next edge case is always one creative user query away.

## The prompt engineering of honesty

Getting an agent to say "I don't know" is harder than it sounds because you are fighting the model's training. Language models are optimized to produce helpful, confident outputs. Silence is penalized. Uncertainty is penalized. The default behavior is to fill gaps with plausible content.

We counteract this through explicit prompt engineering.

First, the model instructions includes a set of "uncertainty triggers." These are categories of information where the agent should always check a live source rather than relying on parametric memory. Visa requirements. Airline baggage policies. Airport terminal assignments. Hotel amenity lists. These categories change frequently enough that any training-data answer is likely stale.

Second, we use few-shot examples that demonstrate uncertainty expression. The model sees examples where the correct behavior is saying "Let me verify that" before answering. Without these examples, the model defaults to confident answers even when instructed otherwise. Showing it what uncertainty looks like in practice is more effective than telling it to be uncertain.

Third, we implement what we call "confidence calibration." The agent is instructed to distinguish between high-confidence claims (directly from a tool result in the current conversation), medium-confidence claims (from memory of a previous search), and low-confidence claims (general knowledge that might be outdated). Only high-confidence claims are stated as facts. Medium-confidence claims are prefaced with qualifiers. Low-confidence claims trigger a tool call to verify.

This calibration is imperfect. The model sometimes overestimates its confidence. But it catches enough hallucinations to justify the complexity.

## Case studies in travel hallucination

Let me share three real scenarios from production that illustrate different hallucination types and how our defenses handled them.

**The phantom direct flight.** A user asked about flights from Denver to Dubrovnik. The agent initially stated there was a direct flight on a major European carrier. There is no direct flight from Denver to Dubrovnik. The verification loop caught this because the flight search API returned no direct results. The agent corrected: "I don't see any direct flights on this route. The best connections go through Frankfurt or Istanbul with a total travel time of 12-14 hours."

This is the most common hallucination type. The model has seen enough flight data in training to generate plausible routes that do not actually exist. Grounding in live API data eliminates it every time.

**The wrong cancellation policy.** A user asked whether their fare was refundable. The agent stated "this fare includes [free cancellation](/blog/hidden-cost-of-free-cancellation) within 24 hours." The actual fare rules, retrieved from the booking API, showed a non-refundable ticket with a change fee. The verification step caught the discrepancy because the agent's claim about cancellation contradicted the fare rules data.

Policy hallucinations are dangerous because they sound authoritative. Users might act on them. Our defense is to always present policy information directly from the source data, never from the model's general knowledge about how airline policies typically work.

**The confident time zone error.** A user planning a trip from Los Angeles to Tokyo asked about arrival time. The agent correctly stated the flight departed at 11 AM and arrived at 3 PM the next day. But when the user asked "so I'll arrive in the afternoon?", the agent confirmed "yes, afternoon local time." The actual arrival was 3 PM Japan Standard Time, which was correct, but the agent failed to mention the date change. The user later expressed confusion about losing a day.

This is a subtle hallucination by omission. The facts were technically correct but the presentation was misleading. Our defense against this type is harder to automate. We use scenario-specific checks: any time zone crossing query triggers additional context about date changes and local time.

## The economic case for prevention

Hallucination prevention costs money. Verification loops add latency and compute. The "I don't know" capability means more tool calls instead of quick parametric answers. Human review of flagged conversations costs labor.

Is it worth it?

The calculation is straightforward. A single hallucinated flight number that a user attempts to check in for generates a support ticket, a potential refund request, and a trust violation that may cost us the customer permanently. The lifetime value of a retained travel customer far exceeds the cost of running verification on every response.

We estimate that our layered prevention system costs roughly $0.002-0.005 per interaction in additional compute. The alternative, not preventing hallucinations and dealing with the downstream costs, would be far more expensive at any reasonable scale.

The cost also decreases over time. As our regression test suite grows and our prompt engineering improves, the hallucination rate drops. Fewer hallucinations mean fewer escalations, fewer refunds, and fewer lost customers. The prevention investment compounds.

## A practical framework for other high-stakes domains

The principles we have developed for travel apply to any domain where hallucination has financial or safety consequences.

**Ground everything that can be grounded.** If there is a data source for a factual claim, use it. Never rely on parametric memory for information that changes.

**Verify before presenting.** Cross-check the agent's claims against source data. This adds latency but catches a meaningful category of errors.

**Train for uncertainty.** The agent should know the boundary of its knowledge and communicate when it is near that boundary.

**Layer your defenses.** No single prevention mechanism is sufficient. Stack multiple approaches so that failures in one layer are caught by the next.

**Monitor continuously.** Hallucination is not static. New patterns emerge with model updates, capability additions, and novel user inputs. Detection must be ongoing.

**Accept imperfection gracefully.** The goal is not zero hallucination. It is zero harmful hallucination. Some errors are benign (slightly wrong restaurant description). Others are costly (wrong visa requirement). Allocate prevention effort proportional to the harm of the error.

**Build user \[trust through transparency\]\(/blog/building\-trust\-through\-transparency\-security\)\.** When the agent verifies information, make the verification visible. "Let me check the current price" is more trust-building than silently returning a number. Users who see the agent doing due diligence trust it more than users who receive confident-seeming answers with no visible process.

## The user's role in prevention

Users are the final layer of defense, and designing the product to support their role matters.

We present booking confirmations as structured summaries with every important detail visible: flight numbers, dates, times, passenger names, prices. The user confirms by reviewing this summary, not by trusting a narrative. If the agent hallucinated a detail, the structured summary makes it visible.

We also design for easy correction. If a user spots an error ("that is not my middle name"), the correction path is one message: "My middle name is James, not John." The agent corrects immediately and re-presents the summary. Low-friction correction means users are more likely to catch and report errors rather than ignoring them.

The most helpful users are the ones who say "wait, that does not seem right." We treat every such moment as a free audit of our prevention system. If a user catches something, we investigate why the automated layers did not.

Hallucination prevention in high-stakes AI is not about building a perfect system. Perfection is not achievable with current technology. It is about building a system where the consequences of the remaining imperfections are manageable. The best travel app is the one that is honest about what it knows, honest about what it does not, and has multiple safety nets for the rare cases when honesty fails. We would rather have an agent that says "let me check" a hundred times than an agent that confidently states a wrong visa requirement once. The economics, the user trust, and the product quality all point in the same direction: honesty is the best policy, and prevention is worth every millisecond of added latency.

---

Nowah is an AI travel agent that searches and books real flights and hotels through conversation — no filters, no thirty open tabs. [Plan your next trip](https://app.nowah.xyz).
