Proposition chunking with LLM quality checks
- Source
- From the RAG & Agents Engineering course
- By
- Sourav Banerjee
- Last updated
- 9 Nov 2026
Propositions
What you'll learn
- Explain what makes a proposition atomic and self-contained, and why both matter once it is retrieved alone.
- Diagnose the three ways a generated proposition goes wrong, one per grader check.
- Compare a same-model grader with independent verification.
- Choose where propositions are worth one or two LLM calls per chunk.
Lessons 1 and 2 of T5.3 cut the source text and kept its words. Proposition chunking rewrites it: an LLM turns each chunk into short standalone facts, and those facts are what get embedded.
A chunk boundary leaves the sentence "It takes 5 to 10 business days to appear" at the top of a chunk. Retrieved alone, it says nothing about what "it" is. A question about refund timing may still match it, and the model then has to guess whether the 5 to 10 days refer to a refund, a credit or a server migration. We call this a dangling reference: a sentence whose subject stayed in another chunk.
A proposition is one fact written so it stands alone. It has to be:
- Atomic: one claim. "Annual plans can be refunded within 30 days and refunds take 5 to 10 business days" is two.
- Self-contained: no unresolved references. "It takes 5 to 10 business days" means nothing once retrieved alone; "A Larkspur Cloud refund takes 5 to 10 business days to appear" does.
The refund sentence becomes three propositions:
- Larkspur Cloud gives a full refund on an annual plan requested within 30 days of purchase.
- A full refund on a Larkspur Cloud annual plan requires the account to have used less than 100 GB of outbound traffic.
- After day 30, a Larkspur Cloud annual-plan refund is prorated to the unused whole months, minus a 15% early-termination fee.
Each proposition names its own subject and condition. The golden question can match proposition 1, and the retriever can return proposition 2 beside it, which is the condition the boundary cut in lesson 1 of T5.3 lost.
Generation and grading form one pipeline:
Figure 1: Proposition chunking with a grading pass. Only propositions that pass every check are indexed.
What the grader catches
Grade every proposition against its source chunk before indexing it. A splitter can only cut text, while an LLM can merge two facts, drop a qualifier or state something the source only implied. The mandatory notebook's grader returns three yes-or-no checks through structured output, plus a short note on the issue, and keeps only propositions that pass all three. One planted proposition per check:
| Generated proposition | Check it fails | Why |
|---|---|---|
| "Annual plans can be refunded within 30 days and refunds take 5 to 10 business days" | Atomic | Two claims in one sentence |
| "It takes 5 to 10 business days to appear" | Self-contained | "It" refers to a subject outside the proposition |
| "Annual plans can be fully refunded within 30 days of purchase" | Supported by the source | "Less than 100 GB of outbound traffic" is gone, so the proposition states more than the source allows |
Table 1: Three planted propositions, one per grader check.
The third row is a dropped qualifier: the proposition reads well and is wrong for every account over 100 GB. It is the most expensive of the three, because nothing about its wording looks broken.
The optional notebook grades differently. It scores accuracy, clarity, completeness and conciseness from 1 to 10 and drops anything under 7 on any of them.
Pitfall: the self-grading blind spot. In the notebook the grader is the same model as the generator, so it shares its blind spots and can pass a proposition it should reject. Treat it as a filter for obvious damage; independent verification needs a different model or a human.
Keep the source chunk id in each proposition's metadata. The answer can then show the original text beside the fact that matched.
Cost decides where propositions are worth it. Each source chunk takes one LLM call to generate and about one more to grade, and the index usually holds several times as many vectors. That pays off for dense, high-value text (policies, specs, medical or legal facts) where a missed qualifier is expensive, and not for a whole document lake.
In practice: propositions for the Larkspur refund policy
The refund policy is the kind of dense, high-stakes text propositions are for:
- Generate propositions from the refund section's chunks, each naming Larkspur Cloud and the plan type.
- Grade each one for support, self-containment and atomicity, and drop the failures.
- Check the qualifiers by hand on this section, or with a second model, since the same-model grader can miss a dropped "less than 100 GB".
- Store the source chunk id with every proposition, so the assistant can cite the original sentence.
- Leave the rest of the handbook to the splitters from lessons 1 and 2 of T5.3.
Next: lesson 4 of T5.3 measures which chunking setting actually retrieves best, instead of choosing by argument.
Run the notebooks
The code for this lesson is in these notebooks. Colab runs one in your browser: install the packages its first cell imports and set the API keys it reads. To run every notebook as written, clone the repository and use its uv environment.
| Notebook | GitHub | Colab |
|---|---|---|
| Proposition chunking | Open on GitHub | Open in Colab |
| Proposition chunking RAG techniques (optional) | Open on GitHub | Open in Colab |
Key Takeaways
- A proposition is one atomic, self-contained fact that names its own subject and condition, so it still makes sense when retrieved alone.
- Grade every generated proposition against its source before indexing, because an LLM can merge facts or drop a qualifier. Keep the source chunk id in metadata.
- A grader that is the same model shares its blind spots. With one or two LLM calls per chunk and several times the vectors, keep propositions for dense, high-value text.
Check yourself
1. What two properties make a proposition, and why does each matter once it is retrieved alone?
It is atomic, holding one claim, and self-contained, with no unresolved references. "It takes 5 to 10 business days" means nothing when retrieved alone, while "A Larkspur Cloud refund takes 5 to 10 business days to appear" does. Because each proposition names its own subject and condition, a question can match one and the retriever can return a related one beside it.
2. A generated proposition reads: Annual plans can be refunded within 30 days and refunds take 5 to 10 business days. Which grader check fails, and what happens to it?
The atomic check fails, because the sentence makes two claims. The mandatory notebook's grader keeps only propositions that pass all three checks (supported by the source, self-contained, atomic), so this one is dropped or regenerated.
3. Your team plans to turn its whole document lake into propositions, graded by the same model that writes them. What two concerns do you raise?
Cost: one LLM call per source chunk to generate, about one more to grade, and usually several times as many vectors, so keep propositions for dense, high-value text such as policies and specs. Grading: a grader that is the same model shares the generator's blind spots and can pass a proposition it should reject. Treat it as a filter for obvious damage, and use a different model or a human for independent verification.