Bad chunking is why your RAG returns half-answers

Before anything is retrieved, your documents are split into chunks. Cut at the wrong place and a rule is severed from its exception, so the agent answers from a partial truth.

B

Balagei G Nagarajan

4 MIN READ


A document being sliced by a rigid grid that cuts straight through a sentence and a table, with the severed halves drifting apart
Sharp retrieval wants small, focused chunks, 100-256 tokens, one clear topic, tight embedding.
— from “Bad chunking is why your RAG returns half-answers”

Key facts.

  • Chunking strategy can swamp everything else: a clinical-RAG study found structure-aligned chunking hit 87% accuracy versus 13% for a fixed-size baseline on the same documents (MDPI Bioengineering, 2025).
  • The gap shows up in recall too: fixed-size scored 0.40, semantic chunking scored 0.75, the fixed-size pipeline missed the relevant material far more often (same study, 2025).
  • There's no universal right size: NVIDIA's 2024 evaluation across seven strategies and five datasets found the best size depends on query type, factoid questions around 256-512 tokens, analytical questions 1024 or more (NVIDIA, 2024).

What does bad chunking actually do?

It cuts facts in half. Documents get split into chunks before anything is retrieved. A fixed-size splitter cuts at arbitrary token boundaries, no regard for meaning. A rule lands in one chunk, its exception in the next. A table row gets split from its header. A definition gets split from the term. Retrieval returns one half, and the model answers from a partial truth, confidently. The source had the whole fact. The chunker broke it before the retriever ever saw it. That's why the agent gives a half-answer that's technically grounded in your data and still wrong.

# A fixed 256-token split lands mid-rule. Two chunks, neither complete:
--- chunk 41 ---
"Returns are accepted within 30 days of delivery,
--- chunk 42 (boundary cut here) ---
 except for final-sale items, which are non-refundable."
# Retrieve chunk 41 and the agent says "30-day returns", missing the exception.

Why one chunk size always loses

One chunk has two jobs that pull in opposite directions. Sharp retrieval wants small, focused chunks, 100-256 tokens, one clear topic, tight embedding. But the model needs context completeness, surrounding text, 1000+ tokens, so it doesn't miss a caveat. A fixed size can't satisfy both. Go small: retrieval works, the model gets fragments. Go large: chunks blur across topics, retrieval struggles. That's the structural conflict in naive chunk-embed-retrieve, and it's why no global chunk size is ever right.

A hierarchy tree from a document down to sections to paragraphs to chunks, with one branch showing a fixed-size cut slicing across a section boundary and another showing a clean structure-aligned split

How big is the gap?

Large enough to dominate everything downstream. Clinical decision-support evaluation: structure-aligned chunking hit 87% accuracy, fixed-size baseline hit 13% on the same documents. Recall matched: 0.75 vs. 0.40. NVIDIA tested seven strategies across five datasets, factoid queries did best at 256-512 tokens, analytical queries needed 1024+, page-level was a strong general default. No magic number. What the results say: chunking is a first-class design decision, and getting it wrong caps your accuracy no matter how good the model or retriever is.

How do you chunk so facts stay whole?

TechniqueWhat it does
Semantic / structure-aware chunkingSplit at topic, section, and document boundaries, not token counts
Respect tables and listsKeep a row with its header and an item with its context
Add overlapLet chunks share a window so a fact split at a boundary survives in one of them
Attach metadataTag each chunk with its source, section, and date for filtering and grounding
Parent-document retrievalMatch on small chunks, then return the larger parent for context
Late chunkingEmbed the long document first, then chunk, so each chunk keeps document context

Fixed-size chunking severs the fact from context; a better model reads the same half. (arXiv:2406.00456)

The pattern is that retrieval can only return what chunking left whole, and a fixed-size splitter routinely cuts facts in half before the model ever sees them. Split at meaning, keep structure intact, overlap the boundaries, and retrieve small but read large with parent-document or late chunking. None of that's a bigger model, which only paraphrases the fragment more fluently. it's a data layer that keeps facts intact from source to context, which is what VibeModel builds as the Pattern Intelligence Layer.

Frequently asked questions

Isn't this fixed by a bigger context window?
No. The damage happens at retrieval: if the chunk that was fetched is a fragment, a bigger window just holds a bigger fragment. You have to chunk so the whole fact is retrievable in the first place, then use the window to read it in full context.

What chunk size should I use?
It depends on the query. Factoid lookups do well around 256 to 512 tokens; analytical questions need 1024 or more. Rather than pick one, retrieve on small chunks and return the larger parent, so you get sharp matching and full context.

What's the single highest-impact change?
Stop splitting at fixed token counts. Switch to structure-aware chunking that respects sections, tables, and topic boundaries, and add overlap. That alone closes most of the gap between a 13% and an 87% pipeline.


Share this post

Join the discussion

Have a take, a war story, or a question? Sign in with GitHub to comment and react. Comments are powered by GitHub Discussions, ad-free and yours to moderate.

Continue Reading

Find where your agent breaks, before you build it

Faultmap maps where your agent will fail from the goal and your data, then hands you the first test suite it has to pass.