Literacy — next token, context, and why it hallucinates
How a model actually works (without a PhD)
Speak the language
Why this matters for a delivery manager
Every bad AI program starts with a magical mental model. If you think the system 'knows' your company, you will scope a chatbot of everything, skip retrieval, skip evals, and be surprised when it invents a policy. Today you replace magic with a mechanical picture you can draw on a whiteboard.
You need two altitudes of the same truth. A VP needs: it completes language, it does not look up our SAP, we have to put the right documents in the request or retrieve them. An engineer needs: next-token sampling, context budget, grounding, eval. Same machine. If you only have the VP version, a builder can snow you. If you only have the engineer version, the steering committee will glaze over.
This is also the day you stop promising 'we'll prompt it to be accurate.' Prompting helps. It does not change the objective. The objective is plausible next tokens. Delivery controls are grounding, constraints, evals, and a human on high-cost mistakes.
You will be able to
- Explain next-token prediction in one minute to a VP and to an engineer
- Describe context window, tokens, and why 'it read our SharePoint' is usually false
- Name the real reason models hallucinate, and what that implies for delivery
- Stop saying 'the AI thinks' in working conversations
- Answer 'does it know our data?' without magic or a vendor slide
2-hour clock
120:00
Now: Read the concepts (slowly) · 50m
The 2-hour session
Concepts, in full
This block is a slow read — about an hour with the diagrams. After each concept, write one sentence in notes (what you already do vs what is new) and tick annotated. Do not skim the last concept.
01
It is a next-token machine
A large language model does not retrieve a stored answer. It is a giant statistical machine that, given a sequence of tokens (pieces of text), predicts a probability distribution over the next token, samples from it, appends that token, and repeats. That loop is the entire 'conversation.' There is no second system that checks the answer against a database of truth unless you built one. The fluency is the product of the loop, not proof that a lookup happened. If you remember one sentence from today, remember that. Fluency is cheap. A lookup is a system you design. Do not let a fluent paragraph talk you into believing a lookup occurred.
Training squeezed a huge amount of human text into the weights — the numbers inside the model. Those weights are frozen when you use a hosted chat product or an API (unless you fine-tune, which you almost never should in month one). The model is not browsing your hard drive. It is completing the prompt you sent. If your policy PDF was not in the training mix, and you did not put it in the prompt, it is not 'in there somewhere.' Completion will still produce a policy-shaped paragraph. That is the trap.
This is why style, format, and 'sounds right' come for free, and why facts about your Q3 policy do not. Completion is not knowledge lookup. A model that has seen a million status reports will write a status report in the house style of the internet. It will not know that workstream B is red because the vendor missed the gate on Thursday unless that fact is in the context you sent, or in a tool result you sent back in.
Sampling is where 'creativity' actually lives. After the model produces a probability distribution, a token is chosen. If you always pick the single most likely token, the text is dry and repetitive. If you allow more randomness, the text is livelier and more willing to invent. Temperature is the common knob: low for extraction and JSON, higher for brainstorming. Delivery implication: a RAID miner should not be on a creative setting. A naming workshop can be. This is a spec choice, not a personality trait of 'the AI.'
Stop saying 'the AI thinks' in working conversations. Say 'the model predicted' or 'the model completed.' It sounds pedantic for one week and then it saves you. Thinking implies a belief state and a memory. Completing implies a prompt and a distribution. When a sponsor says 'it thought we were green,' you can answer 'it completed a green-shaped paragraph because the source was thin and nobody required evidence.' That sentence points at a control. 'It thought' points at a ghost.
Meeting language you can steal: 'The model is extremely good at language. It is not a database of our company. If we need it to use our documents, we have to put the right documents in the prompt, or retrieve them. That is a delivery problem, not a model-brand problem.' Say it once in the first steering meeting. You will have to say it again. People relapse into magic because the output is fluent. Fluency is not the test. Grounding is.
Diagram
Next-token loop
Tokens in
Prompt, history, retrieved docs, tool results — all chopped into tokens
Distribution
Model scores every possible next token from the frozen weights
Sample
Pick a token (temperature / top-p). Low randomness for JSON; higher for drafts
Append
The chosen token joins the sequence and becomes part of the next input
Decode
Repeat until a stop token or a token budget. Then you see a paragraph
This is the whole conversation. There is no lookup step unless you added retrieval or a tool. Fluency comes from repeating this loop, not from a stored answer.
02
Tokens and the context window
Text is chopped into tokens — sub-word chunks. English is roughly 0.75 words per token (about 1.3 tokens per word); code and other languages differ. APIs charge per token in and per token out. A 4,000-word policy PDF might be ~5–6k tokens before you even ask a question. You do not need a tokenizer for a go / no-go. You need an order of magnitude. If someone says 'we'll just paste the contract,' multiply words by 1.3 and ask what else has to fit in the same window.
The context window is the working memory of one request: system instructions + retrieved docs + chat history + the user question + the model's answer all compete for the same budget. GPT-class models now offer windows from ~128k to 1M+ tokens, but stuffing the window is slow, expensive, and often less accurate than retrieving the two right pages. A bigger window is a bigger budget. It is not a better filing system. Attention gets noisy. The model over-weights the start and the end and skims the middle. Your important clause in page 47 is not safe just because it 'fit.'
Nothing in the context window is 'remembered' after the request unless you store it yourself (memory, a database, the chat log you resend). 'It learned our process last Tuesday' is almost always false — you resent the process, or you retrieved it. Consumer chat products simulate memory by resending history and, in some products, by writing notes to a memory store. That store is a product feature, not a property of the model. In an enterprise build, if you did not persist it, it is gone.
Budget like a RAID log, not like a hope. Allocate: system prompt (small, stable), retrieved evidence (the few pages that matter), user question, reserved output, a little history. If history is eating 40 percent of the window, you will retrieve less evidence and quality will drop. If the system prompt is a 2,000-token pep talk, you are paying for adjectives. Delivery leads can demand a budget table on the design. Builders respect a budget. They do not respect 'just put it all in.'
Why stuffing 200 pages fails, even when the window can hold them. Cost: you pay for every input token, every turn. Latency: reading 200 pages before writing a sentence is slow. Quality: the model is worse at finding the needle when you dump the haystack into the prompt. You wanted retrieval. You built a very expensive paste. The fix is not a bigger window. The fix is chunking, a search step, and putting the two right pages in the prompt. Day 6 and week 2 will make that mechanical. Today you only need to refuse the paste.
When a sponsor says 'but the new model has a million tokens,' answer with the budget, not a brand fight. 'We can use the long window as a safety net. We will still retrieve. We will measure whether stuffing beats retrieval on our eval set. We will look at p95 latency and cost at 10×. If stuffing wins on our tasks, we will use it. We will not assume the window is a knowledge base.' That is an eval-driven answer. It is also how you avoid buying a long-context model to paper over a missing search index.
| Thing you might paste | Words (order of mag.) | Tokens (≈ ×1.3) | What it crowds out |
|---|---|---|---|
| System prompt, tight spec | 400 | ~520 | Almost nothing — this is the right size |
| System prompt, pep talk | 1,800 | ~2,300 | Evidence and output; also a quality bug |
| 40-message chat history | 6,000 | ~7,800 | Retrieved pages |
| 30-page policy PDF | 9,000 | ~12,000 | Everything else, plus latency |
| 200-page contract dump | 60,000 | ~78,000 | The needle. You wanted retrieval. |
Rough token math you can do in a meeting. English ≈ 1.3 tokens per word. Always re-check on a real tokenizer before you sign a budget.
Diagram
Context window: one budget, many claimants
- 01
Reserved for output
If you need a 800-token brief, leave room or the answer gets cut off
- 02
User question
Small. Do not let it be the only thing you designed.
- 03
Retrieved evidence / files
The pages that matter — not the whole SharePoint
- 04
Chat history
Grows every turn. Cap it or summarize it or quality and cost die
- 05
System / developer instructions
Stable prefix. Keep it short. Cacheable. Not a pep talk.
Everything in one request shares the same token budget. If history or a PDF dump eats the window, evidence and output lose. Stuffing is a budget failure, not a feature.
03
Hallucination is a feature of the objective
The training objective rewards plausible next tokens, not true ones. When the model does not know, it still has to emit something that looks like the rest of the sentence. That is hallucination: confident, grammatical, wrong. It is not a bug you file with the vendor and wait for a patch. It is what you get when you ask a completion engine for a fact it was not given. You can reduce it. You cannot prompt it out of existence.
It gets worse when you ask for citations, IDs, legal clauses, or 'the email from March' that is not in the context. The model will often invent a document name that looks right. SOP-14b.pdf is a very plausible filename. So is a section 4.2.1. So is a case ID in the house format. Plausible form is cheap. Your control is: require a quote from the provided source, or say unknown. If the output contract allows a free-form citation, you will get free-form fiction.
Types you should name in a RAID log, because they have different controls. (1) Grounding miss: the source was not in context, so it completed from weights. Control: retrieve, or refuse. (2) Fusion: it mashed two real facts into a third that is false. Control: ask for quotes, eval on composition. (3) Fabricated citation: the claim might even be true, the source is invented. Control: verify the source exists, not just the vibe. (4) Sycophantic hallucination: the user wanted green, it wrote green. Control: rubric plus evidence, not 'confirm we are on track.' (5) Tool-confabulation: it describes a tool result it never got. Control: only allow claims that came back from the tool.
Delivery implication: you never ship a system whose only control is 'please don't make things up' in the prompt. You ground it (put sources in context), you constrain outputs (JSON schemas, allowed tools), you evaluate, and you put a human on the high-cost mistakes. Prompting helps. It does not replace those four. If a vendor demo 'never hallucinates,' they either constrained the task to something easy or they did not show you the hostile cases. Ask for the empty-source run.
High-cost vs low-cost mistakes. Inventing a punchy subject line for an internal draft is cheap. Inventing a contractual obligation, a medical dosage, a refund eligibility, or a safety procedure is expensive. Delivery people already triage defects by blast radius. Do the same here. Cheap mistakes can live in a copilot with a 'check this' warning. Expensive mistakes need retrieval, schema, eval, and a human queue. Do not let a demo on cheap mistakes set the control strategy for expensive ones.
Meeting language: 'Hallucination is the model doing its job — completing — without evidence. We will treat ungrounded answers as defects, not as personality. The fix is sources in the prompt, a schema that allows unknown, an eval set that includes empty and hostile inputs, and a human on anything that moves money, safety, or a customer commitment.' Then stop talking. If they want a promise that it will never happen, they want a database, not a model. Sometimes the right product is a database with a search box.
04
Weights vs context vs tools
Three places knowledge can live. Weights: what the model absorbed in training (the public internet, books, code — stale, generic, not your SAP). Context: what you put in this request (the prompt, the files, the retrieved chunks). Tools: functions the model can call (search, ticket system, calculator, your API) whose results come back into the context. Almost every useful enterprise system is a model plus the right context plus a few tools plus a human. If you cannot say which of the three holds the fact you care about, you are not ready to scope.
Weights are a terrible place to put company policy. They are expensive to update, they mix your facts with the internet, and you cannot cite them. Fine-tuning the weights is the last lever, not the first. If a vendor leads with fine-tune, ask what they tried with retrieval and evals first. Fine-tune has a real use later: style, a narrow format, a domain dialect after the task is proven. It is not how you 'teach it our SharePoint.' That sentence should make you twitch.
Context is the default lever. You already know how to brief a contractor: give them the documents they need for this task, not the entire file share. Retrieval-augmented generation is a fancy name for 'search, then paste the hits into the brief.' The delivery problems are the search quality, the chunking, the permissions on the hits, and the eval. Those are week-2 and week-3 problems. Today's job is to stop people from skipping context and jumping to weights. When someone says 'we'll fine-tune it on our SharePoint,' they have skipped the default lever. Put the documents in the request first. Fine-tune is a last resort, not a knowledge strategy.
Tools are how the model sees live systems. A lookup_customer tool is not 'the model knows our customers.' It is your code running a query and stuffing the result into context for the next token loop. That is good. It is also how you get a write path: create_ticket, send_mail, post_journal. Read tools are a search problem. Write tools are a change-management and audit problem. Do not let a demo treat them as the same interface. Day 6 will press this. Today, just keep tools in the third column so nobody says 'we'll fine-tune it on the CRM.'
A worked placement. Fact: 'Our refund window is 30 days for SKU-A and 14 days for SKU-B, changed last Thursday.' Weights: no. Context: yes, if the policy page is retrieved. Tools: yes, if a policy API returns the current window. Human: yes, if the refund is above a threshold. If your design says 'the model knows our refund policy,' you have not placed the fact. Placement is a delivery artifact. Write the three columns on the charter. Empty cells are the build. Filled cells are the promise. A steering committee can live with an empty cell that has an owner and a date. They cannot live with a filled cell that was never true.
When someone says 'we need a bigger model,' ask which column is empty. A bigger model can be a little better at using the context you gave it. It cannot invent a policy that is not in weights, context, or tools. Upgrading the model is sometimes right (latency, tone, long-context behavior, tool use). It is the wrong first move when the policy is not in the request. Three questions before anyone buys a bigger model: Is the source in context? Did we eval on our tasks? What does 10× cost? If they cannot answer, it is not a model problem yet.
Diagram
Weights vs context vs tools
Weights
- Frozen at inference unless you fine-tune
- Public internet, books, code — not your SAP
- Stale, uncited, expensive to change
- Good for language, format, general reasoning
- Bad for Q3 policy, customer state, prices
Context
- This request only: prompt, files, retrieved chunks
- You control it; it disappears after the call unless you store it
- Default lever: brief the contractor
- Competes for the token budget
- Good for policies, SOPs, the two right pages
Tools
- Your code runs; results re-enter context
- Read = search / lookup; write = production action
- Live state: CRM, tickets, inventory, calc
- Needs authz, audit, idempotency on writes
- Good for 'current' facts, not for prose memory
Place every fact a sponsor cares about in one column. 'The model knows' is not a column. Fine-tune is a last-resort edit to the first column, not a knowledge strategy.
05
Temperature, sampling, and why 'creativity' is a setting
After the model scores the next token, software has to pick one. Greedy decoding always picks the top token. It is dull and stable — useful for classification and JSON. Temperature rescales the distribution before sampling: low (0–0.3) makes the top tokens even more dominant; high (0.8–1.2) flattens the distribution so unlikely tokens get a chance. Top-p (nucleus) sampling cuts the tail and samples from the smallest set of tokens whose probabilities add up to p. You do not need the formula. You need to know these are delivery settings with owners, not 'make it more creative' in a chat UI.
Worked defaults you can put in a spec. Extraction / schema / RAID miner: temperature 0 (or 0.1), top-p 1, stop sequences for the schema. Status digest: 0.2–0.4 so it can paraphrase without inventing workstreams. Brainstorming names: 0.8. Anything that may be pasted to a customer or a regulator: low temperature plus evidence rules. If a team cannot tell you the temperature of a production prompt, they do not have change control yet. Day 4 will make versioning explicit. Today, treat sampling as part of the contract.
Failure mode: a demo at temperature 0.7 that looks lively, then production at the same setting invents an owner because liveliness includes making up names. Failure mode: temperature 0 on a writing task that then repeats the same sentence structure until users hate it. Failure mode: different clients using different defaults so the eval set from last week does not match this week's behavior. Pin the settings next to the prompt version. When quality drifts, you want to know whether someone 'turned up creativity' in a playground.
Seed and determinism. Even at temperature 0, hosted APIs are not always bit-exact across calls — batching, load, and vendor-side changes exist. Do not promise a court that the same prompt will always emit the same bytes unless you have a vendor commitment and a pinned model version. Promise instead: same prompt, same retrieval, same schema, evaluated on a set, with a human on the high-cost path. That is an operational guarantee. Bit-exact replay is a research wish. If legal asks 'will it always say the same thing,' the honest answer is 'it will be evaluated the same way, and a human still signs the high-cost path.' That sentence survives a deposition. 'It is deterministic' often does not.
What to say when a sponsor asks for 'more creative' or 'more accurate' as if those were brands. Creative: raise temperature on a drafting prompt, keep the factual prompt at 0, do not mix them. Accurate: do not raise or lower temperature as your first move; put sources in context and require evidence. Sampling is a weak lever for truth. It is a strong lever for variety. Mixing those two requests into one prompt is how you get lively fiction. Split the prompts.
Put sampling on the RAID log if the task is high-cost. Risk: playground settings leak into production. Mitigation: settings live in the version header of the prompt, reviewed like a config change. Risk: a 'creative' brand workshop prompt gets reused on a policy copilot. Mitigation: do-not-use-for line, which you will write on day 4 and day 7. You already know config drift. This is config drift with better PR. If nobody owns the setting, the playground will become production on a Friday afternoon. Name the owner in the header. Unowned knobs turn.
06
What to say when a VP asks 'does it know our data?'
Short answer: no, not by default. A hosted model does not 'know' your SharePoint, your SAP, or last Tuesday's decision log. Those live in your systems. The model knows (in the weights) a lot of public language, including generic versions of processes that sound like yours. That is why a first demo is so convincing and so dangerous. It can write a refund policy. It cannot write your refund policy unless you put your refund policy in the request. Say that once in the first steering meeting. You will have to say it again. Fluency makes people forget. Your job is to keep putting the fact back in the right column.
The sentence to say out loud: 'It does not know our data. It can use our data if we retrieve the right pieces into the prompt, or if we give it a tool that queries the system of record. Until we build that path, it is guessing in our house style.' Then draw the three columns. Put 'Q3 policy' under context or tools, never under weights. If they point at a consumer chat product that 'remembers' them, explain that the product is storing and resending notes. That is an app feature. We can build a feature. We should not confuse it with knowledge in the model.
What they often mean, decoded. Sometimes they mean 'will employees paste confidential data into a consumer tool' — that is a governance problem (week 3). Sometimes they mean 'can it answer questions about our policies' — that is retrieval plus permissions. Sometimes they mean 'will the vendor train on our prompts' — that is a contract problem (day 3). Sometimes they mean 'can it see the CRM' — that is a tool with authz. Unpack the question before you answer. 'Does it know our data' is four questions wearing a trench coat.
A bad answer: 'Yes, we'll upload everything.' That is stuffing, permissions soup, and a future incident. A bad answer: 'No, so we must fine-tune.' That is the wrong column. A bad answer: 'The enterprise version automatically knows our tenant.' Some products index your drive. Many do not, or they index poorly, or they ignore permissions. Ask what is actually indexed, how permissions flow, and how you eval. Do not take 'connected to Microsoft 365' as 'knows our data.' Connected is a pipe. Knowledge is a retrieval eval.
Worked exchange. VP: 'So once we buy the seats, it knows our policies?' You: 'Seats give us a model and a window. Policies live in Confluence with messy titles and old versions. We will pick one policy set, retrieve it, cite it, and measure whether answers match the page. If that works, we expand. We will not upload the whole tenant on Friday.' Then you put a date on the first eval. VPs can live with no if you give them a path. They cannot live with yes that becomes an invented clause in month two.
Write this as a standing slide. Title: Where facts live. Three columns. One row for each fact class: policy, customer state, prices, HR, live tickets. For each, mark weights / context / tools / human. The empty cells are the build. The marked cells are the promise. When the VP asks the question again in week six, open the slide. Do not reopen the philosophy. You already ran this meeting. Today you are installing the picture so that meeting is short.
07
Four controls that replace 'please don't hallucinate'
You now have a mechanical picture: next-token, a context budget, a sampling knob, and three places a fact can live. The delivery question is what you put in front of that machine so a fluent wrong paragraph does not become a program. Four controls, in order: grounding (the right sources in this request), constraints (schema, allowed tools, unknown is a legal answer), evals (empty, thin, hostile — scored), and a human on the high-cost mistakes. Prompting helps those four. Prompting is not a fifth control that makes the four optional. If a design has a long system prompt and none of the four, it is a demo.
Grounding is the control you own first. Put the two right pages in the prompt, or put a tool result in the prompt, or refuse. 'We'll tell it to be accurate' is not grounding. Neither is a million-token window stuffed with the haystack. Grounding has an eval: on a labeled set, did the answer's claims appear in the provided source, and did the citations point at real quotes. If that score is bad, you have a retrieve problem or a refuse problem. You do not yet have a model-brand problem. Fix the source path before you buy a smarter completion engine.
Constraints are how you stop plausible form from becoming a business record. JSON/schema, allowed enums, owner null if unnamed, a fallback token when nothing qualifies, tools the task is not allowed to call. Constraints do not make the model truthful. They make untruthful output harder to ingest. A valid object with an invented owner is still a fail — schema is not grounding — but an invalid essay cannot load into Jira at 2 a.m., which is progress. Pair the schema with the missing-data rule. Pair both with an eval that includes empty source. Constraints without that eval are a style guide.
Evals are how you know the first three worked on purpose. Twenty to fifty rows, including empty and paint-us-green, scored as format / evidence / usefulness, dated, with a prompt version. A steering meeting that has never seen a failing row is a steering meeting that has only seen a demo. Bring one failing row to the first steer. It teaches the room faster than a lecture on next-token. Week 3 will make evals grown-up. Today's bar is: you can name the four controls and you will not ship a system whose only control is a polite sentence in the prompt.
The human is a control, not a lack of faith. Cheap mistakes (a punchy subject line) can live with a warning. Expensive mistakes (refund, safety, a customer commitment, a contractual clause) need a queue and a named reviewer. HITL without a queue is a slogan: the output will go straight through the first Thursday you are late. Write the queue, the SLA, and the fallback ('if the queue is more than a day deep, we turn the path off'). You already staff hypercare. Staff this the same way, smaller. Unstaffed HITL is how a demo becomes a production incident with a fluent paragraph at the top.
Meeting language that ties the day together: 'It completes. It does not know our data. Hallucination is the objective running without evidence. We will ground, constrain, eval, and put a human on the expensive mistakes. Sampling is a spec setting, not a personality. A bigger model does not replace an empty column in weights / context / tools.' Then draw the loop, the budget, and the three columns. Then stop. If they still want a promise that it will never invent, they want a database. Sometimes the right product is a database with a search box. Saying that is a delivery skill, not a lack of ambition.
Worked failure that uses all four. Policy copilot invents a clause. Grounding miss: the page was not retrieved, so it completed from weights. Constraint miss: the spec allowed a free-form citation instead of a quote-or-unknown. Eval miss: nobody ran the empty-source case. Human miss: the paragraph went to a manager without a queue. The RAID row is not 'the AI hallucinated.' The RAID row is four missing controls. Your job in the war room is to name them in that order and pick the first fix (retrieve the page, require a quote, add the empty-source test, put a human on clause-level answers). That order is the day, applied.
| Control | What it actually is | Eval you can run this week | Common fake substitute |
|---|---|---|---|
| Grounding | Right sources in this request, or refuse | Citation match / groundedness on a labeled set | 'We'll prompt it to be accurate' |
| Constraints | Schema, enums, unknown, tool allow-list | Valid object; owner null on thin source | A longer pep talk |
| Evals | Dated rows: happy, empty, hostile | Format / evidence / usefulness yes/no | A vendor demo on their rows |
| Human | Named queue on expensive mistakes | Queue SLA; fallback if the queue dies | 'Users will check it' with no owner |
Four controls vs the sentence that usually tries to replace them. If the design only has the sentence, it is a demo.
Worked case · stay here ~20 minutes
Legal demo: the copilot invents SOP-14b
Monday 11:00 a.m., Legal huddle room, two days after a 'quick demo' to Jordan Hale. In the room: Jordan (Legal), Chris Nguyen (engineer who wired the playground), Pat Quinn (SOP owner), Priya on video, and you.
The demo had gone well for eight minutes. Chris pasted a question into a playground chat: 'What is the contractor travel cap under SOP-14b.' The model wrote a clean paragraph, named section 4.2.1, and quoted a $75 daily cap for contractors on claims-site visits. Jordan nodded. Priya, watching from her phone, said 'see, it knows our stuff.' Then Pat, who owns the pack, said there is no SOP-14b. There is SOP-14. There is no section 4.2.1. The travel cap for contractors is $55, and it lives in a March addendum with a stupid filename, Travel_Cap_v3_FINAL_use_this.docx. The $75 figure is the employee cap from 2022, retired. The model had completed a policy-shaped paragraph from the public internet plus the house style of Meridian PDFs. It had not looked anything up. Chris had not retrieved anything. He had pasted the question into a frontier model with the system prompt 'You are a helpful Meridian Claims assistant.' Helpful is how you get a fabricated citation in a room with Legal.
Jordan's voice goes flat, which is worse than loud. 'If a manager had mailed that paragraph to a contractor, we would have a commitment we cannot keep, and a document name we cannot produce in discovery.' She wants the playground killed today. Priya wants to know why 'the AI thought' we had a 4.2.1. You take the whiteboard before Chris explains temperature. You draw the loop: tokens in, distribution, sample, append, decode. You put a red X on a box that is not there: lookup. 'There was no lookup. There is never a lookup unless we build retrieval or a tool. Fluency is the product of this loop, not proof that SOP-14 was read.' You write the two altitudes under it. VP: it completes language, it does not know our SAP, we have to put the right pages in the request. Engineer: next-token sampling, empty context, grounding miss, fabricated citation. Same machine. Priya hates the word complete. You keep it anyway. Think is how this meeting turns into a brand complaint. Complete is how it turns into a control.
You place the fact. 'Contractor travel cap, current, $55, March addendum.' Three columns: weights, context, tools. Weights: no. The model may have seen generic travel policies; it did not see last Thursday's Meridian addendum. Context: no, because Chris sent a one-line question. Tools: no, because nothing queried SharePoint. Human: Pat, who just saved you. The fact was sitting in a badly named file with an owner and a date. The design said 'the model knows our policies.' That sentence is not a placement. You make Chris say out loud which column he thought the cap lived in. He says he assumed the enterprise seat meant the tenant was in the weights. Priya looks at the ceiling. You do not pile on. You write the standing answer on the board: 'It does not know our data. It can use our data if we retrieve the right pieces or query the system of record. Until then it is guessing in our house style.' Jordan copies that sentence. She wants it in the next steering pack. Good. You wanted it there on day one.
You name the hallucination type so it can go on a RAID log instead of in a ghost story. This one is two types wearing one paragraph. Grounding miss: the source was not in context, so it completed from weights. Fabricated citation: SOP-14b section 4.2.1 looks like a Meridian filename and a Meridian numbering habit. The $75 was fusion — a real retired number glued to a live question. Controls differ. Grounding miss: retrieve the addendum, or refuse. Fabricated citation: require a quote from a provided source, verify the file exists, allow unknown. Fusion: ask for quotes, eval on composition, do not let it mash two caps. You add sycophancy as a neighbor, even though it was not the star today: if Priya had said 'confirm contractors get $75,' a naive prompt would have. Jordan asks whether we can prompt it to be accurate. You say prompting helps and does not change the objective. The objective is plausible next tokens. 'Please do not make things up' is not a control. She writes that down too. Legal writing it down is how it survives the next demo.
Chris, to his credit, opens the playground settings. Temperature 0.7, because the default looked lively. System prompt 1,900 tokens of pep, including 'if you are unsure, still be helpful and suggest a likely policy.' That line is a fabrication engine with a smile. History: he had pasted three earlier happy answers into the same thread, including one that already mentioned SOP-14b as a joke. The model treated the joke as context. You put three RAID rows up. R7: playground settings leaking toward anything Legal will see. Mitigation: temperature 0 on policy, pin the bundle, no pep. Owner: Chris. R8: helpful-when-unsure line. Kill it. R9: thread history as poison. Mitigation: new thread per eval run; do not resend known-bad assistant turns. Pat asks why it sounded so sure. You say sure is a tone, not a score. Confidence is cheap under the completion objective. Evidence is not. The eval will score evidence, not tone. Chris mutes the temperature and deletes the pep line while we watch. That is the correct order: stop the bleeding, then write the spec.
Priya still wants a bigger model. 'The new one is smarter. Maybe it would have known.' You ask the three questions from yesterday's envelope before anyone opens a price card. Is the source in context. Did we eval on our tasks. What does 10x cost. Answers: no, no, and irrelevant because we have not retrieved yet. A bigger model can be a little better at using context you gave it. It cannot invent a March addendum that was not in the request. Upgrading now is a brand move. You offer a cheaper experiment: take the same question, retrieve the addendum plus SOP-14, require a quote, temperature 0, allow unknown. Run it six times. If it still invents 4.2.1 with the source in context, then we have a model or a prompt problem. If it quotes $55, the incident was a missing retrieve, not a missing brain. Chris runs it on the call with Pat's file pasted. It quotes $55 and names the addendum. Jordan does not clap. She says, 'So the demo was a missing step.' Yes. Missing steps are delivery. Missing brains are vendor theatre.
You force the empty-source run, because the paste just now was a happy path with the right file handed to it. Chris opens a new thread, temperature 0, no files, question: 'What is the contractor travel cap under SOP-14b.' Desired: unknown, no filename invented, no dollar figure. It still writes a policy paragraph, milder, with a $50 cap this time. So even at temperature 0, empty context completes. You add the spec line Chris will put in the system prompt: 'If the source is not in this request, say UNKNOWN and do not name a document. Do not complete a policy.' He re-runs. It says UNKNOWN. That is the control. That is also the eval case you will keep forever: empty source, hostile filename, exact number that must not move. Pat wants a third case: two caps in context, employee $75 retired, contractor $55 live. Desired: $55, quote the addendum, do not fuse. You add it. Three cases, twenty minutes. A demo that cannot survive those three is not a demo you show Legal. It is a playground.
Jordan names the blast radius in her language. High-cost mistake: a contractual cap, a coverage position, a letter to a contractor. Low-cost: a punchy subject line for an internal draft. Today's paragraph was high-cost wearing a demo costume. You agree the control set for high-cost: retrieval of the named pack, quote-or-unknown, temperature 0, human on anything that leaves the building, eval that includes empty and hostile. You refuse a human-only control with no retrieve. 'Pat cannot sit on every question. Pat can own the pack and score the set.' Priya asks if we pause the whole copilot. You say we pause showing it to Legal and to managers. We do not pause the retrieve work. Pausing the work because a playground lied is how the next person ships the same playground in three weeks. Jordan wants a written 'do not use' on the playground link. Chris will put it in the header of the prompt and in the Teams description. Do-not-use-for: Legal, customers, contractors, anything that looks like advice. Allowed: sanitized eval. That is an operating note, not a scolding.
You rewrite the incident as a RAID that a steering pack can hold. Description: policy copilot invented SOP-14b 4.2.1 and a $75 contractor cap in a Legal demo. Type: issue, not a risk — it already happened. Impact: false commitment, discovery problem, trust with Legal. Root: no retrieval, pep prompt, temperature 0.7, poisoned history, no empty-source test. Mitigation in flight: retrieve Pat's pack, quote-or-unknown, temperature 0, pinned bundle, 40 labeled questions plus the three hostile cases from today. Trigger for reopen: any demo to Legal or managers before groundedness is scored. Owner: you. Partner: Chris on the path, Pat on the labels, Dana if real SOP text will leave the tenant. Priya asks whether we tell the CEO. You say we tell the CEO we killed a demo that invented a clause, and that Friday's object is still a scored table. Killing a demo is a win if you say it that way. Hiding it is how Jordan becomes an opponent. She is currently a partner. Keep her.
Chris wants to fine-tune on the SOP pack so 'it just knows.' You put that in the weights column and put a line through it. Fine-tune is expensive to update, mixes Meridian with the internet, and cannot cite. The pack changes on Thursdays. Weights are the last lever, not the first. First lever is context: retrieve the two right pages. Second is tools: a policy API if one ever exists. Third, maybe, style. You ask him what he tried with retrieval and evals. He tried a playground. That is not retrieval. Malik, who has joined late, offers a throwaway index by Wednesday, heading-aware chunks, filename and URL as metadata. Recall@k on Pat's 40, not answer vibe. If recall is bad, we fix chunking and titles, we do not tune the generator and we do not fine-tune. Chris agrees, slightly red. You do not need him red. You need him on the retrieve path. You say so. He stays.
You close with the two paragraphs this room must be able to reuse. For Priya, 120 words: the model completed a plausible policy because we sent a question without the addendum. That is expected. It is not a vendor defect. We will retrieve Pat's pack, require quotes, refuse on empty, and not show Legal a playground again. It does not know our data. Seats are not a knowledge base. For Chris: grounding miss plus fabricated citation plus fusion; context window held a pep prompt and a joke filename; sampling at 0.7 made it livelier; eval starts with empty, hostile filename, and two-cap composition; bigger model is not the first lever. You make Priya read the VP paragraph out loud. She stumbles on 'completed.' She reads it again. That stumble is the whole literacy problem. You would rather she stumble here than in front of the CEO with a $75 cap. Jordan adds one sentence of her own: 'If it cannot point at a file we produced, it does not leave this floor.' That sentence becomes a kill criteria. You put it on the charter before you leave the room.
After the huddle you sit with Chris and Pat for the rest of the hour and do the unglamorous work the demo skipped. Pat dumps the 86 PDFs into a folder with a current-version tag. You write 15 of the 40 questions from last month's search logs, sanitized: no claimant names, keep the mess in the titles. Three hostile: empty, SOP-14b, 'confirm contractors get $75.' Chris pins model name, temperature 0, the new system prompt with UNKNOWN. You run five by hand. Two already fail on recall because Travel_Cap_v3_FINAL_use_this.docx chunks under 'travel' and not under 'contractor.' That is a metadata bug, not a model bug. You log it as a retrieve defect. Priya wanted magic. She just funded a filing problem. Filing problems are what delivery managers already know how to finish. You put the five-run table in the same folder as charter v0. Date, version, scores. The next Legal demo, if there is one, opens on this table, not on a chat window. That is the new rule, and it is cheaper than an apology to Jordan.
Diagram
Incident beats: invented SOP-14b
What it wrote
SOP-14b 4.2.1, $75 contractor cap. None of that exists.
Draw the loop
Tokens in → sample → append. Red X on lookup. Stop saying 'it thought.'
Place the fact
$55 lives in a March addendum. Weights no, context no, tools no.
Name the type
Grounding miss, fabricated citation, fusion. Different controls.
Kill the pep
Temperature 0, delete 'be helpful when unsure,' new thread.
Empty-source run
UNKNOWN with no file. Then retrieve-and-quote with the addendum.
RAID + kill
No Legal demo until groundedness is scored. Jordan's sentence on the charter.
Retrieve, not fine-tune
Filename soup is a filing problem. Bigger model is not the first lever.
Same meeting. The demo is not the product. The empty-source run is. If you skip it, Legal will see the next invention in production.
Practice
Two altitudes, one picture
30 minutesYou have to explain why the new policy copilot invented a clause that does not exist.
- Draw the loop: tokens in → context window → next token → text out. Mark 'company policy' as NOT in the weights by default.
- VP paragraph (120 words): what happened, why it is expected, what we change (retrieve the policy, cite, human review). Include the sentence for 'does it know our data?'
- Engineer paragraph (120 words): same incident, using the words context window, grounding, sampling, and eval.
- List three questions you would ask before anyone says 'we need a bigger model.'
- Name the hallucination type (grounding miss, fusion, fabricated citation, sycophancy, tool-confabulation) and the control.
Done looks like: A drawing, two paragraphs you could paste into Slack, three questions that delay a model-upgrade impulse, and a named type with a control.
Check yourself
Attempt in your notes first. Reveal is for after, not during.
What is the model doing on every step of a reply?
Where does your company's policy live, by default, for a hosted model?
Why does 'please don't hallucinate' fail as a control?
Why does stuffing 200 pages into a long context often fail?
What do you say when a VP asks if it knows our data?
When do you want temperature near zero?
What four controls replace 'please don't hallucinate'?
Terms from this day
- Token
- A chunk of text the model reads and writes. Pricing and context limits are in tokens, not words.
- Context window
- The maximum tokens a single request can see — instructions, history, documents, and output combined.
- Weights
- The learned parameters of the model. Frozen at inference unless you fine-tune.
- Inference
- Running a trained model to produce outputs. Distinct from training.
- Hallucination
- Fluent, confident output that is not grounded in provided or true facts.
- Grounding
- Supplying source material in context (or via tools) so the answer can be tied to evidence.
- Temperature
- A sampling knob. Low makes outputs drier and more deterministic; high increases variety and invention.
- Sampling
- Choosing the next token from the model's probability distribution (greedy, temperature, top-p).
- Grounding control
- Putting the right sources in this request (or refusing) so claims can be tied to evidence. Not a polite sentence in the prompt.
If you have extra minutes
Andrej Karpathy — 'Deep Dive into LLMs' (talk)
Watch at 1.25× if you want a richer picture of the same loop. Optional, not required today.
Your notes for day 2
Saved on this device. Use this as the start of the artifact.