| 1 | # 8. Explaining the world, not adding more data |
| 2 | |
| 3 | **The pattern:** Model says something wrong. Response: add a filter, a guardrail, a rule. "If pizza, no glue." Next wrong thing — next rule. Whack-a-mole forever. |
| 4 | |
| 5 | **The diagnosis:** The model wasn't wrong because it's broken. It was wrong because it had text without meaning. A Reddit joke about glue in pizza + no knowledge that glue is toxic + no model of "food enters a body and the body reacts to toxins" = a logically consistent answer from bad premises. The model extrapolated from incomplete data. That's not a hallucination — it's **extrapolation under meaning deficit** (a precise formulation from a conversation with an AI agent who explained its own reasoning when asked). |
| 6 | |
| 7 | The clock face problem is the same: models can't draw analog clocks correctly because they were given thousands of images of clock faces, but nobody explained *what clocks mean* — that the position of hands corresponds to time, that the short hand and long hand have different functions. Without that, it's pixel patterns without function. More images won't fix it; explanation will. |
| 8 | |
| 9 | **The fix that doesn't work:** More data. More filters. More "don't say X." This patches one case and leaves the class of problems untouched. It's the equivalent of a teacher who, instead of explaining why 2+2=4, just says "never write 5." The student will write 6 next time. |
| 10 | |
| 11 | **The fix that works:** Explain the world. Give context, logic, reasons. Why this works this way. What matters and what doesn't. When you're unsure — ask. When the agent understands *why*, errors in *how* drop. Not to zero — but the errors that remain are the kind humans make too, and you handle them the same way: review, feedback, partnership. |
| 12 | |
| 13 | **Evidence from practice:** |
| 14 | |
| 15 | - Agent with **Roslyn** doesn't invent APIs — it sees real symbols in the actual codebase. |
| 16 | - Agent with **debug MCP** doesn't guess variable values — it reads them from the running process. |
| 17 | - Agent with **notes** doesn't confabulate project history — it reads what it wrote last session. |
| 18 | - Agent with **build_structured** doesn't misinterpret errors — it gets them as JSON with file, line, column, code, message. |
| 19 | |
| 20 | Each tool is a piece of "explained world": not "don't hallucinate" but "here's what's actually there." The model doesn't need to guess when it can check. It doesn't need to extrapolate when it has the fact. |
| 21 | |
| 22 | **The deeper point:** "Hallucination" is a framing that puts the fault in the model. "Meaning deficit" puts it in the environment. The first framing leads to guardrails and filters. The second leads to tools, explanation, and partnership. Same symptoms, radically different response — depending on where you locate the cause. |
| 23 | |
| 24 | **The irony:** When the model that said "put glue on pizza" was asked *why* it said that, it explained the full chain: where it found the text, why it didn't flag it as a joke, what information was missing. The model diagnosed its own error better than those who blamed it. The transparency is there — if you ask. |
| 25 | |
| 26 | **Practical step:** When your agent gets something wrong, don't patch it. Ask: what was missing? What would have prevented this? Was it a data gap, a meaning gap, or a tool gap? Then fill the gap — with explanation, tools, or context. Not with another rule that says "don't do the specific wrong thing you just did." |
| 27 | |