Every enterprise fears the same thing about an AI assistant: that it will confidently make something up. This one can't. It answers policy questions with the cited clause itself, never prose generated on top, and when nothing scores high enough, it abstains. That refusal is built into the control flow, not bolted on as a disclaimer. Below is the score that decides, and where the approach reaches its ceiling.
People lose hours hunting for the right internal rule, searching a document store, pinging compliance, waiting. So teams reach for a chatbot and hit the worst failure mode in regulated work: a fluent, confident, wrong answer with no source. In a bank or a payments business, an answer you can't trace to a policy is worse than no answer, because someone will act on it.
So the design does three things: match by concept rather than just keyword, return the source clause itself so there is no generated text to hallucinate, and abstain below a grounding threshold. The model never writes the answer. It only points at one.
There is no generation step, so there is no surface for a hallucination. The model isn't in the answer path at all: retrieval scores each policy by concept overlap, and the assistant returns the winning clause verbatim with its ID and a grounding score, or, below threshold, it abstains.
The grounding score is a defined number, not a vibe. Query terms are expanded with a small concept map (so "interpretability" reaches "explainability"), then:
| Question | Match | Grounding | Answer |
|---|---|---|---|
| "Can one person both raise and approve a payment?" | POL-FIN-02 | 97% | returns the segregation-of-duties clause, verbatim, cited |
| "Is customer e-money kept safe?" (paraphrase) | POL-SAFE-01 | 97% | concept map reaches "safeguarded" → the float clause |
| "What's our refund policy for a damaged laptop?" | · none | below 2.0 | abstains; needs a human or a new policy |
The trade-off is the threshold. Raise it and the assistant abstains more often, giving fewer wrong answers but more "ask a human". Lower it and it answers more, risking a weak match. In regulated work you set it high on purpose: a false abstention costs a few minutes; a false answer costs a breach. The honest ceiling: because the answer is the extracted clause, this can't synthesise across two policies. A question that needs combining the AML and the safeguarding rules will return the best single clause or abstain, rather than a merged answer. That is a deliberate floor under safety. A generative layer could synthesise, but only by reintroducing the hallucination risk this design exists to remove. For a compliance tool I would take the ceiling over the risk, and say so.
Every response takes one of exactly two shapes. There is no third "confident guess" path. This is the safeguard, shown as the actual output:
Q: "Can one person both raise and approve a payment?" A: "No single individual shall both raise and approve a payment." citation : POL-FIN-02 · Segregation of duties grounding: 97% basis: term + concept overlap, score ≥ 2.0 , , , Q: "What's our refund policy for a damaged laptop?" A: ABSTAIN , no policy scores ≥ 2.0. Routed to a human.
I treat the failure mode as the design centre. Everyone wants the AI to answer. The harder, more valuable judgment is deciding when it must not, and building that refusal into the control flow rather than hoping a prompt holds it. Defining the grounding score in the open, setting the threshold for the cost of being wrong, and naming the extractive ceiling instead of papering over it: that is the discipline that lets a regulated organisation put an assistant in front of its people at all.
The answers and the abstention above are real output from the assistant over Origin's policy library. The full console, where you can ask anything and watch it cite or abstain, runs as a working application.