Table of Contents

Most advice on LLM cost optimization lives in one place: the inference layer. Pick a cheaper model, quantize it, batch your calls, cache the prompt, route the easy stuff to a smaller model and save the expensive one for hard questions. None of that is wrong. It's just not the whole story.

Inference tuning optimizes what you send to the model. It doesn't touch why you're sending so much in the first place, and for most enterprise LLM deployments, that's the real question. The answer usually sits one layer down, in the pipelines, schemas, retrieval systems, and governance processes that decide what context an LLM even sees before it generates a token.

Teams that only tune inference tend to plateau fast. Teams that go fix the data layer underneath it often find that a third to more than half of their spend was never necessary. It was retrieval noise, redundant computation, or context nobody actually needed. Here's the checklist for that second layer, the one that doesn't get talked about as much.

Two stacked layers. The inference layer on top is where most LLM cost advice stops; the data layer underneath, which decides what context reaches the model, is where the waste hides.

A quick LLM cost optimization check before you read further

Ask yourself these, honestly:

  • Are you sending curated context, or dumping raw documents into the prompt and hoping the model sorts it out?
  • Is retrieved context tight, or padded with adjacent stuff "just in case"?
  • Is chunk metadata scoped to what retrieval and generation actually need, or has it accumulated fields over time that either leak into the prompt or slow down filtered search?
  • Are your prompts templated and schema-aligned, or hand-written per use case by whoever built that feature?
  • Do you have semantic caching, or only exact-match caching (which catches almost nothing in practice)?
  • Is your system prompt and tool setup stable enough to actually benefit from your provider's automatic prompt caching, or does something change on every call and quietly break it?
  • Is there a semantic layer between the LLM and your raw tables, or is it querying physical schemas directly and figuring out joins on its own?
  • Are your AI pipelines, chunking, embedding, retrieval, generation, reusable, or rebuilt from scratch every project?
  • Does someone need to file a ticket with engineering just to change what data feeds an LLM use case?
  • Do you know which team or product is actually driving your LLM bill, or is it one opaque line item?
  • Do you have data contracts on the sources feeding these systems?
  • Is duplicate or stale data getting retrieved and reprocessed without anyone noticing?
  • Do you monitor for schema drift quietly wrecking retrieval quality?
  • Is there any feedback loop from bad output back to the data and prompt layer, or does every quality issue just get blamed on the model?

If you answered no to more than two or three of those, your data layer is probably costing you more than your model choice ever will.

Why LLM spend leaks at the data layer

There's a stat that gets passed around a lot, originally traced back to older VentureBeat coverage of ML and data science projects broadly, that something like 87% of AI projects never make it to production. I'd treat the exact number carefully since it predates the current LLM wave, but the reason behind it holds up: it's rarely "the model wasn't good enough." It's data quality, context gaps, and governance debt. And the same debt that kills a project before launch keeps draining budget after launch, just in a different form: tokens spent processing bad, redundant, or unnecessarily broad context.

So here's the checklist in depth, grouped by where in the data layer the waste tends to hide.

Context and retrieval hygiene for LLMs

Every irrelevant sentence sitting in a retrieved chunk is tokens you're paying to process, and it's also a chance for the model to hallucinate off a tangent that had nothing to do with the actual question. Data products, meaning pre-cleaned, validated datasets with a clear schema and an owner, cut this off at the source instead of leaving every application team to sanitize inputs on their own, differently, forever.

A common pattern that we keep seeing: retrieval systems return whole documents, or oversized chunks, "to be safe." Tighten that up. Better chunking, better embeddings, reranking before generation, all of it directly shortens the prompt, and prompt length is probably the single biggest lever most teams aren't pulling. On top of that, structured formats (JSON, Markdown) parse more efficiently than a wall of raw prose, which shaves both token count and preprocessing time on the model's end.

The semantic layer: the step teams skip

A lot of enterprise RAG and text-to-SQL setups wire the LLM straight into physical database schemas. So now the model must reason about joins, synonyms ("Cust ID" vs. "Customer ID"), and table sprawl on every single query. That's expensive in tokens, and it's a leading cause of malformed or overly complicated generated queries.

Put a semantic layer between the LLM and the raw data instead: standardized business definitions, synonyms already resolved, a simplified logical model the LLM queries instead of the physical tables underneath. Fewer tokens spent disambiguating, simpler generated queries, fewer retries when something fails. This is also where schema-aligned, templated prompts earn their keep. Standardize the prompt structure to match your data product schemas and responses become cacheable and consistent instead of one-off per request.

Without a semantic layer, the LLM untangles joins and mismatched column names across raw tables on every query. With one, it queries business terms like Customer, Order, Revenue and Region, and the physical tables stay underneath.

Caching: the most underused lever to reduce LLM costs

Most teams that say they "already do caching" mean exact-match caching, identical prompt in, cached response out. In practice that catches almost nothing, because real users rarely phrase the same question the same way twice. There are two different kinds of caching worth knowing apart here and mixing them up is probably the single most common misunderstanding in this part of the stack.

Semantic caching, cutting cost by meaning, not exact match

Semantic caching, caching by meaning through embedding similarity rather than exact string match, is where a lot of the savings live on the retrieval side. Vendor benchmarks on this pattern report cost reductions in the 40 to 80% range, with cached response times measured in tens of milliseconds instead of seconds, depending on cache hit rate (commonly 40 to 70% for support and conversational use cases). If semantic cache hit rate isn't something your team tracks as a KPI, that's worth fixing before you touch model selection at all.

Prompt caching, the inference-layer payoff your data layer sets up

This is a provider-side mechanism, not something you build yourself, and it's easy to miss because it sits one layer away from everything else on this list. Claude, ChatGPT, and Gemini all now cache the repeated, unchanging part of a request, your system prompt, tool definitions, conversation history, so the model doesn't reprocess those same tokens on every single call. It's a different animal from semantic caching. Semantic caching catches two differently worded questions that mean the same thing. Prompt caching catches the exact same prefix showing up repeatedly, which happens constantly in any agent or chat application, since the system prompt and tool list rarely change between calls.

The numbers here are bigger than most teams expect. Anthropic's own documentation calls prompt caching "the largest single cost lever measured" and recommends applying it before any other optimization, with cache reads running at roughly a tenth of normal input cost (as low as a twentieth or fortieth on some models) and real deployments reporting 2.7x to 5.3x total cost reduction. OpenAI runs the same idea automatically by default on supported models, a 90% discount on cached tokens. Gemini calls its version context caching, also a 90% discount, automatic on newer models or set up manually with your own cache lifetime. All three work the same way underneath: cache the stable prefix, charge full price only for what's new in the request.

Worth saying plainly: this isn't something every AI product exposes to its own users. Perplexity, for instance, runs on a mix of its own and third-party models and almost certainly benefits from caching somewhere in its stack, but there's no setting a Perplexity user can flip themselves. The "how do I enable this" question really only applies at the API level, to teams building directly on Claude, OpenAI, or Gemini.

And here's where this connects back to everything above. Prompt caching only works if the prefix is stable. Every provider's documentation says some version of the same thing: change the system prompt, add a timestamp near the top of the request, reorder your tools, and you break the cache and pay full price again. Which means the schema-aligned, templated prompts described earlier in this piece aren't just good practice for their own sake, they're the precondition for prompt caching to do anything at all. Put the dynamic, per-request stuff (the actual user question, anything time-sensitive) at the end of the prompt and keep the system instructions and tool definitions fixed at the start, and you get the inference-layer discount almost for free. Get the data layer wrong, inconsistent prompts assembled differently per call, variable content mixed in near the top, and you'll never see that discount, no matter which model you're running.

Two prompts compared. When the start of a prompt never changes, most of it bills at a discount; a timestamp at the start breaks the cache and the whole request is full price.

Reuse over rebuild: shared AI pipelines

Chunking, embedding, retrieval, generation, when that logic gets rebuilt per project instead of shared, you're multiplying both engineering cost and the number of places an expensive pattern can quietly creep in. Package it once as a shared data product or pipeline template and the cost profile stays consistent across every team using it.

And give teams self-service access to that data. When only engineering can touch what feeds an LLM use case, every iteration means a ticket, a deploy, a delay, and delay tends to produce "just include everything" requests so nobody has to wait for a second-round trip. Governed self-service lets teams narrow scope themselves, right away.

AI cost governance: knowing where the money goes

If LLM spend shows up as a single line on the cloud bill, nobody can say which team, product, or query pattern is driving it, which means nobody's on the hook to fix it either. Attribute cost by team and use case and it stops being a platform team problem and becomes something every team actually owns.

Same idea with data contracts and SLAs on your sources. An upstream schema or quality change nobody flagged silently degrades retrieval accuracy, and downstream that shows up as more retries, more fallback calls to a bigger model, more tokens burned recovering from bad context. And check for duplicates. Retrieval systems built on years of accumulated, unmanaged documents return near-duplicate versions of the same content more often than you'd think, and every duplicate returned is a duplicate you're paying for.

The feedback loop almost nobody closes

Output quality problems, hallucinations, wrong answers, low relevance, almost always trace back to something in the context, schema, or prompt template. Not the model. A feedback loop that routes production quality signals back into the data and prompt layer, instead of straight to "let's just try a different model," is what turns this from a one-time cleanup into something that actually stays fixed.

LLM cost optimization built into the data layer

Platforms built around the data product model, DataOS being one of them, bundle a lot of this by default rather than making a team assemble it piece by piece: a semantic layer between the LLM and physical schemas, output ports that deliver pre-validated, schema-aligned context instead of raw tables, governance dashboards that attribute usage by consumer. None of it requires a platform, to be clear. Every item on this list can be built in-house. The difference is whether the data layer gets treated as real infrastructure or as a script someone wrote last quarter that's already starting to rot.

LLM cost optimization: a few questions people ask

What is the "data layer" in this context?

Everything between raw storage and the model call: retrieval, context assembly, semantic modeling, caching, governance. It's distinct from the inference layer (model choice, quantization, batching), which is where most cost content stops.

How much can this realistically save?

Depends on the architecture, but the pieces with published numbers are worth noting. Semantic caching alone is commonly reported to cut LLM API costs 40 to 80% at decent cache hit rates. Prompt caching, where it applies, is reported even higher by the providers themselves, in the range of a 90% discount on cached tokens, with some real deployments seeing total cost drop by more than half. Add tighter retrieval and less padded context on top of that and a meaningful chunk of total spend usually turns out to have been avoidable.

What's the difference between prompt caching and semantic caching?

Prompt caching is provider-side and exact-match. It caches the literal repeated prefix of a request (system prompt, tools, conversation history) so the model skips reprocessing it. Semantic caching is applied at the application layer and matches by meaning, so it catches two different users asking the same thing in different words. Most production systems benefit from both, and they're solving different problems, not competing for the same one.

Isn't this just RAG optimization with a new name?

Overlaps, but it's broader. RAG optimization is usually about retrieval and chunking specifically. This checklist includes that plus semantic layers, governance, data contracts, and reuse across teams, the organizational and architectural layer that decides whether your RAG fixes actually stick or get redone every quarter.

Do we need new tooling to do any of this?

No. Everything here can be built on infrastructure you already have. Purpose-built data product platforms bundle several of these patterns out of the box, which buys you speed, not a requirement.

‍

‍

‍

‍

Curious how to make AI more reliable in your organization?
Cover of The Modern Data Report 2026 titled The Data Activation Gap with abstract blue and red gradient background.
Get the Report
Find out what your peers are saying.

Continue reading

What Makes a Good Metric? Three Tests Most Dashboards Fail
Data Quality

What Makes a Good Metric? Three Tests Most Dashboards Fail

Evan Kramer
Oct 13, 2026
Building Business Alignment for Data Teams: Start With Four Questions
AI-Ready Data

Building Business Alignment for Data Teams: Start With Four Questions

Evan Kramer
Oct 1, 2026
Why Bad Data Costs You More in LLM API Fees & How to Avoid Unexpected AI Bills
AI-Ready Data

Why Bad Data Costs You More in LLM API Fees & How to Avoid Unexpected AI Bills

The Modern Data Company
Sep 25, 2026
Ontology, Knowledge Graph, Semantic Layer: What’s the Difference?
AI-Ready Data

Ontology, Knowledge Graph, Semantic Layer: What’s the Difference?

Samadrita Ghosh
Sep 23, 2026
See how DataOS can put data to work for you
Get started →