Retrieval quality is destiny, and retrieval quality is decided by unglamorous choices: where you cut a document, what metadata you keep, and what your system does when the top match is stale. Three activities, then the interview check, the readings, and the Quiz 3 scope.
Below is a one-page policy from Lakeside Supply Co. (fictional). You are indexing it for a support-agent RAG system. (1) Mark your chunk boundaries on a copy — decide how many chunks and where each one starts and ends. (2) For every chunk, list the metadata you would store alongside the text. (3) Write one realistic customer question that each chunk should win — that is, be the top hit for. (4) Find the one place in this document where a naive fixed-size split would produce an answer that is confidently wrong.
Produce: your chunk list with metadata, one winning query per chunk, and the one sentence describing the dangerous split.
How many chunks? Structure beats arithmetic here: this document has clean section headings, so chunk on them. A reasonable answer is seven to nine chunks — one per numbered section, with 3.0 either kept whole or split into 3.1–3.4 as four short chunks, each carrying the parent heading "3.0 Return windows" so it still makes sense alone. Anything much smaller fragments a rule; anything much larger means a question about clearance items retrieves four rules the customer did not ask about.
Metadata every chunk should carry: doc_id (returns_policy_v7), version (7), effective_date (2026-07-01), supersedes (v6), status (current), section (3.2), title, region (GA / other / all), product_category (electronics / general / clearance), classification (public), owner, and last_reviewed. The region and category fields are what let you filter before ranking; status and effective_date are what keep version 6 out of tomorrow's answers.
Queries each chunk should win: 1.0 → "does this replace the old policy?"; 2.0 → "what counts as unopened?"; 3.1 → "how long do I have to return a jacket?"; 3.2 → "how long do I have to return a laptop in Georgia?"; 3.3 → "return window for a monitor in Florida"; 3.4 → "can I return a clearance item?"; 4.0 → "when will my refund appear?"; 5.0 → "my order arrived broken"; 6.0 → "can you make an exception for me?" If two chunks would tie on a query, they probably want to be one chunk.
The dangerous split: cutting between 3.4 and 5.0. Section 3.4 says clearance items are "not returnable, except where section 5.0 applies." Retrieved alone, that chunk answers "can I return this damaged clearance lamp?" with a flat no — which is wrong, and confidently so, because the exception lives in a different chunk that the query never pulled. Fixes, in order: keep the cross-reference text inside the chunk, add a small overlap so the exception clause travels with the rule, and store a see_also: 5.0 field so the retriever can pull the referenced section too. The general lesson: a chunk must be true when read alone, because that is exactly how it will be read. Section 2.0's definitions have the same property — "unopened" is defined once and used three times.
Lakeside's support bot has been live for a month. A Georgia customer asks about returning a sealed laptop on day 25. The bot answers: "Your return window has expired — Georgia electronics must be returned within 14 days." That is version 6 of the policy. Version 7 (30 days) was published on July 1 and is also in the index. The customer complains; a supervisor issues the refund.
Work backwards through the pipeline from page 02 and decide, as a team, where the primary fix belongs — and what the other two layers should do as backstops. Then answer the question below before revealing.
Produce: a one-page autopsy — the failing stage, the primary fix, two backstops, and the single log line that would have caught this in testing.
When v7 is indexed, delete or archive every chunk of v6 so a superseded document is not in the searchable corpus at all.
Keep both versions, but filter on status = current before ranking — and, when two chunks describe the same rule, prefer the later effective_date.
Tell the model in the prompt: "If two sources conflict, use the one with the most recent effective date, and state that date in your answer."
status = current metadata filter applied before ranking makes the failure structurally impossible rather than statistically unlikely, and it survives the next document, the next region, and the next model.[R6-3.2] score 0.71 status=superseded in a passing test is a red flag even when the answer happens to look fine. Add a standing evaluation case for every superseded document: ask the question it used to answer, and assert that no superseded chunk appears in the retrieval set. Retrieval is testable separately from generation, and it should be — that is next week's topic.Peachtree Health Group (fictional) — 4,000 employees, an HR team drowning in open-enrollment questions — deploys a RAG assistant over the benefits SharePoint. It answers instantly, cites its sources, and is popular. In February, three employees learn that the plan document it cited was replaced in November.
Asked "what is my deductible for the PPO plan?", it retrieved PPO Summary of Benefits — Plan Year 2025, which is still in the SharePoint folder alongside the 2026 version, and answered with the 2025 figure. It cited the document by name. Three employees planned their spending on that number; one deferred a procedure.
The citation made the answer more convincing, not less — it looked checked. The employees who followed the link saw a document that did say what the bot said. Nothing in the answer, and nothing in the file name, signalled that a newer plan year existed. HR only learned about the problem in February, from a complaint.
effective_from / effective_to pair and a plan_year field on every benefits chunk, populated at ingestion — if the source folder cannot supply it, the document does not get indexed; (b) a default retrieval filter of "in effect today," with historical plan years reachable only when the user explicitly asks about a past year; (c) an owner and a review date per document, so an un-reviewed document past its date is flagged rather than silently served; (d) re-indexing wired to the actual publication process — the moment HR posts the 2026 summary, the index changes, rather than waiting on a quarterly job nobody owns. Note what is not on this list: a better model, a bigger context window, or a smarter prompt. This is a data-governance problem that happens to be wearing an AI costume, and the fix is metadata plus a pipeline someone owns. The deeper organizational lesson: RAG makes your document hygiene load-bearing. A shared drive where old and new versions sit side by side was survivable when only humans read it — humans notice "2025" in a header. An index does not, unless you tell it to.Five questions a data or AI-engineering interview would actually probe this week. Try answering out loud before revealing.
IBM Think — What is retrieval-augmented generation? ↗
Karpukhin et al. (2020) — Dense Passage Retrieval ↗ — where the "embed the question, embed the passages, take the nearest" design comes from
Microsoft — AI Agents for Beginners (MIT) ↗ — the agentic-RAG and agent-memory lessons
LangChain Academy ↗ — the memory modules of the LangGraph course, if you are extending your Week 4 agent
Hugging Face Agents Course ↗
Five multiple-choice questions, closed-book, in class next week. Scope: everything assigned since Quiz 2 — the Week 6 readings (both MCP/A2A LinkedIn Learning courses), the Week 7 readings above (DeepLearning.AI RAG course · Hugging Face memory / agentic-RAG units), and the Week 8 readings (Google/Kaggle Agents Companion whitepaper · the pass^k / τ-bench reading) — plus the core ideas of Weeks 6–8. The LinkedIn Learning courses are free with your GSU login through the GSU portal ↗. Try the samples below before revealing; the real quiz is the same style and difficulty.
Same style and difficulty as the real thing.