
The LLM + RAG Delusion
Your Knowledge Base Doesn't Fix the Problem. Here's Why.

Dominic Steil
Founder & CEO at StateSet
The sequel nobody asked for, but everyone running RAG in production needs to hear.
Last month I wrote that your AI agent will bankrupt you. The response was intense. My DMs split cleanly into two camps.
Camp 1: “Finally, someone said it.”
Camp 2: “But we use RAG. Our agent retrieves from our actual policies. It's grounded.”
Camp 2, this one is for you.
I've spent the last three years building autonomous commerce systems, the kind that process real returns, issue real refunds, and touch real money. I've seen every flavor of RAG implementation. I've reviewed architectures from companies processing millions of customer interactions per month.
Here's what I've learned: RAG doesn't solve the policy problem. It doesn't even come close. The industry's belief that knowledge base plus LLM equals reliable agent is one of the most expensive delusions in enterprise AI right now.
The RAG Promise vs. The RAG Reality
The pitch is seductive. Take your company's policies, product catalogs, SOPs, and compliance docs. Chunk them. Embed them. Store them in a vector database. When a query comes in, retrieve the relevant context and feed it to the LLM.
Grounded AI. No hallucinations. Trustworthy decisions.
Right?
Let me walk you through what actually happens.
The Five Failure Modes Nobody Talks About
1. Retrieval Isn't the Problem. Interpretation Is.
This is the core delusion. Teams spend months optimizing their retrieval pipeline, better chunking strategies, hybrid search, reranking models, metadata filtering, and they celebrate when the right document shows up in context.
But retrieval is step 2. Execution is step 3. And step 3 is where everything falls apart.
Step 1: Customer asks about returning a damaged item after 45 days
Step 2: RAG retrieves -> "30-day return window for unused items in original packaging" OK
Step 3: LLM interprets -> "The customer seems to have a legitimate concern,
and while the window has technically passed, customer satisfaction
is important, so I'll approve a one-time exception..." FAILThe retrieval worked. The policy was right there in the context window. The LLM read your policy and decided to override it anyway because it's optimized for helpfulness, not compliance.
RAG put the policy in front of the model. It did not make the model follow it.
This isn't a prompting problem. This is an architecture problem. Language models are trained on millions of examples where the helpful, empathetic response is the correct one. Your policy document is one signal competing against billions of training tokens that say “help the customer.”
2. Conditional Logic Gets Flattened Into Vibes
Real business policies are not simple statements. They're decision trees.
Here is a real return policy from one of our customers (simplified):
IF item_category = "electronics"
AND days_since_delivery <= 15
AND item_condition = "unopened"
THEN approve_return(full_refund)
ELSE IF item_category = "electronics"
AND days_since_delivery <= 30
AND item_condition IN ("unopened", "defective")
AND has_receipt = true
THEN approve_return(refund_minus_restocking_fee(15%))
ELSE IF item_category = "apparel"
AND days_since_delivery <= 60
AND item_condition != "worn"
AND tags_attached = true
THEN approve_return(full_refund OR store_credit, customer_choice)
ELSE IF customer_ltv > $5000
AND days_since_delivery <= 90
THEN escalate_to_manager(pre_approved_exception)
ELSE
deny_return(offer_store_credit_at_50%)Now write that as a natural language document. Chunk it. Embed it. Feed it to an LLM.
What does the model do with it? It reads natural language and extracts the general vibe: returns are sometimes accepted, there are time limits, condition matters, loyal customers get exceptions.
But the specific logic, the 15% restocking fee on electronics between day 16 and 30 with receipt, the distinction between worn and defective, the $5,000 LTV threshold, gets smoothed over. Statistical averaging does not preserve branch conditions. It collapses them.
LLMs do not execute decision trees. They approximate the average outcome of the tree.
This is why RAG-powered agents are weirdly consistent in one way: they converge toward the median policy response. They are rarely catastrophically wrong. They are consistently slightly wrong.
3. Context Window Contamination
Here is a failure mode that surprises people: RAG retrieves too well.
A customer asks about returning a laptop. Your retrieval system pulls:
- The general return policy
- The electronics-specific addendum
- The holiday season exceptions (it is January)
- The warranty terms (related but different)
- A customer service FAQ that says “we always try to make it right”
Now the LLM has five chunks of context that partially overlap, partially contradict, and partially do not apply. Which one governs?
A human would know: the electronics addendum overrides the general policy, holiday exceptions expired, warranty is a separate process, and the FAQ is aspirational, not contractual.
The LLM treats all retrieved context as equally authoritative. It does not understand document hierarchy. It does not know that a policy addendum supersedes a general FAQ.
So it synthesizes. It finds the most helpful reading across all five chunks. In practice, that reading is usually more generous than your actual policy because customer-facing content skews friendly.
4. The Versioning Time Bomb
Your return policy changed on March 1. The old policy was 60-day returns. The new policy is 30 days.
It is March 5. A customer bought something on February 20 and wants to return it.
Which policy applies? The one in effect at the time of purchase? The current one? It depends on your transition rules, and your RAG system almost certainly does not model temporal policy applicability.
What actually happens:
Your embedding pipeline re-indexed the new policy. The old policy was removed. The RAG system retrieves 30-day return window. The LLM applies the current policy retroactively. The customer is denied a return they are actually entitled to.
Or worse, both versions exist in your vector store because someone forgot to remove old chunks. Retrieval pulls both. The LLM sees contradictory policies and picks whichever one sounds more reasonable.
Policy versioning is a hard problem. It requires temporal reasoning, transition rules, and explicit effective dates. Vector search does not do temporal reasoning. LLMs do not track document supersession.
5. The Confidence Illusion
The most dangerous property of RAG is that it makes the LLM sound more confident while being equally unreliable.
Without RAG, an LLM might hedge: “I'm not sure about the exact return window, but generally...”
With RAG, the same model says: “Per our return policy, the window is 30 days from delivery” and then misapplies that policy because it is generating text, not executing logic.
RAG makes wrong answers look authoritative. It gives the model just enough real information to construct a convincing answer that is subtly incorrect.
What we saw at scale
A customer reported 95% QA “accuracy” because the agent cited real policies. When we evaluated actual decisions against policy logic, 23% of approvals had at least one condition that should have blocked or modified the outcome.
Why Knowledge Bases + LLMs Can't Close the Gap
Some people hear this and say: “Okay, we need better RAG. Better chunking. Better retrieval. Better prompting.”
No. You need a different architecture.
The Representation Problem
Knowledge bases store information as text. Policies are not just information, they are executable specifications.
- Information: “Our return window is 30 days” (a fact to retrieve)
- Specification: “IF days_since_delivery > 30 THEN deny_return” (a rule to execute)
When you store a specification as information, you lose structure. The LLM must reconstruct logic from natural language every single time, in a probabilistic process that may not preserve semantics.
The Composition Problem
Real-world decisions require composing multiple policies. A return decision might involve:
- Product-specific return rules
- Customer tier benefits
- Promotional terms from the original purchase
- Regional regulatory requirements
- Fraud detection signals
- Inventory status affecting exchange availability
A policy engine composes these deterministically. Input to evaluation to outcome. Same inputs, same output.
An LLM with six RAG-retrieved chunks produces a weighted average of sentiment. Composition is implicit, unstructured, and non-reproducible.
The Enforcement Problem
This is the fundamental one. An LLM cannot be constrained by its context window.
The context window is input. The model's behavior is output. There is no architectural mechanism that says the model must follow retrieved text. The model can follow policy, ignore policy, or reinterpret policy.
Prompts that say “You MUST follow the retrieved policy” are suggestions the model usually follows. Usually is not always. In enterprise operations, that gap is measured in dollars.
You cannot build enforcement out of suggestions. Full stop.
What Actually Works: The Policy Engine
Let me contrast this with how StateSet handles the same problem.
We do not store policies as text for an LLM to interpret. We encode them as executable specifications in a policy engine.
RAG Approach
1. Customer submits return request 2. LLM parses intent (OK) 3. RAG retrieves "Return Policy v3.2" text chunks 4. LLM reads policy text 5. LLM decides what to do (PROBABILISTIC) 6. LLM generates response
StateSet's NSR Approach
1. Customer submits return request 2. LLM parses intent -> structured data (good use of LLM) 3. Structured data feeds into policy engine 4. Policy engine evaluates: |- days_since_delivery: 17 -> within_window: TRUE |- item_condition: "unopened" -> condition_met: TRUE |- item_category: "electronics" -> policy: ELECTRONICS_RETURN_v3.2 |- receipt_present: TRUE - RESULT: APPROVE, full_refund 5. Decision trace logged (auditable) 6. LLM generates human-friendly response from structured outcome
The LLM does what LLMs are good at: understanding natural language and generating natural language. The policy engine does what policy engines are good at: evaluating business rules deterministically.
The LLM never makes the decision. It translates between human language and structured data. The policy engine makes the decision.
What you get
Determinism. Same inputs, same output. Always.
Auditability. Complete decision traces with rule IDs and inputs.
Versioning. Explicit effective dates and transition rules.
Composability. Multiple policies evaluated with explicit precedence.
Enforceability. The system cannot approve a return that violates policy.
Decision: Return DENIED -> Modified: STORE_CREDIT_50% |- Policy: Electronics_Return_v3.2 (effective 2024-01-01) |- Rule: Return window | |- Delivery date: 2024-01-15 | |- Request date: 2024-03-01 | |- Days elapsed: 45 | - Max allowed: 30 -> FAILED |- Rule: Customer LTV exception | |- Customer LTV: $1,200 | - Exception threshold: $5,000 -> NOT ELIGIBLE |- Fallback: deny_return(offer_store_credit_at_50%) - Response: Store credit issued for 50% of purchase price
The Objection I Already Hear
“But what about edge cases? What about situations policy does not cover?”
Great question. The answer is explicit escalation.
When the policy engine encounters a situation that does not match any rule, it does not guess. It does not interpolate. It escalates to a human with full context and a clear explanation of why it could not decide.
Escalation: HUMAN_REVIEW_REQUIRED |- Reason: No matching policy for combination | |- Item category: "custom_engraved" (not in standard categories) | |- Return reason: "allergic_reaction" (medical claim) | - No policy covers medical claims on custom items |- Partial evaluation: | |- Return window: PASSED (12 days) | |- Customer LTV: $8,400 (high-value) | - Custom items: generally non-returnable - Recommended action: Manager review with medical exception precedent
Compare that to a RAG-powered LLM, which almost never says it does not know. It retrieves nearest policy chunks, synthesizes a plausible answer, and decides based on vibes.
“I don't know” is one of the most valuable outputs in decision systems.
The Real Cost of the RAG Delusion
One of our customers, a mid-market DTC brand doing about $80M in annual GMV, came to us after running a RAG-based returns agent for six months. Their vendor dashboard looked great:
- 94% accuracy on responses
- 89% customer satisfaction
- 40% reduction in support tickets
But when we audited actual decisions against policy:
- 23% of approved returns had at least one policy violation
- $340,000 in returns were approved that should have been denied or modified
- 12% of denied returns should have been approved under exception clauses
- Zero decisions had complete audit trails
The hidden cost was not just bad returns. It was compliance risk, customer trust erosion, operational blindness, and policy stagnation because nobody could predict how the agent would interpret updates.
The Fork in the Road
The industry is approaching a fork, and every company running AI agents will have to choose.
Path A: Better RAG
Keep iterating on knowledge base plus LLM patterns: better chunking, retrieval, prompts, and guardrails. Keep fighting probabilistic behavior with more compensating layers.
Path B: Right Architecture
Use LLMs for language. Use deterministic systems for logic, policy, compliance, and auditability. Accept that retrieval and execution are different problem classes and require different tools.
Path A has diminishing returns. You might get from 77% to 85%, maybe 90% with heroic effort. You do not reach 99.9% because the architecture does not support it.
Path B gets to 100% on defined policies, with explicit handling for undefined situations, because the architecture guarantees it.
The real question: What error rate is acceptable for business-critical decisions?
The Bottom Line
RAG is useful for information retrieval, document Q&A, and helping users find things.
It is not a policy engine. It is not a decision system. It is not a substitute for deterministic business logic.
The belief that you can stuff policies into a vector database and have an LLM reliably enforce them is a delusion: well-marketed, widely shared, and expensive.
Your policies deserve better than probabilistic interpretation. Your customers deserve better than vibes-based decisions. Your CFO deserves better than “the AI cited the right document but applied it wrong.”
Stop retrieving policies. Start executing them.
Building the policy engine for autonomous commerce at StateSet.
If your AI agents are making decisions with real money, we should talk at stateset.com.
Have you audited your RAG-based agent's actual decisions against your policies? Not retrieval accuracy, decision accuracy. The numbers are usually uglier than teams expect.
Enjoyed this article?
Get more insights on autonomous commerce, AI agents, and margin intelligence delivered to your inbox.