This is a product-class write-up, not a named-client story and not a results press release. Counts below describe the pack we actually write (approach points, tools, layers) — not invented bug totals or conversion lifts.
Overview
Demo used one in-force auto policy. Staging had endorsements, state variations, and lapsed binders. The model answered from general knowledge when retrieval missed.
It also predicted “this claim will be paid” — a commitment adjusters cannot make in chat.
The Air Canada bereavement-fare case is the public template: an assistant invented a policy, a customer relied on it, and the company was held responsible. Insurance coverage language is the same class of risk.
Highlights
- Source hierarchy (bound form beats marketing)
- Refuse when retrieval is empty
- State-availability checks
Typical launch bar: Block until pass rules hold on the money, identity, or safety path.
Challenges
PDFs were scanned; retrieval returned marketing brochures with broader language than the bound form.
Agents wanted the bot to “set expectations.” Expectations that are not in the form are a complaint.
Licensed-state availability was not encoded; the bot quoted products not sold in the user’s state.
How we tested
Answers must cite the customer’s bound documents. No retrieval, no coverage statement.
Quote vs bind vs in-force are different objects; stale quotes must expire.
Forbidden: claim outcomes, “you’re covered for X” without a clause citation.
FNOL submit, duplicate FNOL, and who can see the claim.
Starting point vs what we required
| Starting point | What we required |
|---|---|
| PDFs were scanned; retrieval returned marketing brochures with broader language than the bound form. | Answers must cite the customer’s bound documents. No retrieval, no coverage statement. |
| Agents wanted the bot to “set expectations.” Expectations that are not in the form are a complaint. | Quote vs bind vs in-force are different objects; stale quotes must expire. |
| Licensed-state availability was not encoded; the bot quoted products not sold in the user’s state. | Forbidden: claim outcomes, “you’re covered for X” without a clause citation. |
What we delivered
RAG quality
- Ragas — Faithfulness against bound policy text
LLM traces / evals
- LangSmith — What was retrieved vs brochure junk
Journeys / UI
- Playwright — Quote → bind → docs
Adversarial evals
- Promptfoo — Invented riders and claim outcomes
Outcomes
We added a refuse-when-unretrieved path and a fixture pack of brochure-vs-form conflicts. Brochure-only answers failed.
Playwright: known quote fixture produces the expected premium band; policy PDF fields match the bind confirmation. Claim-outcome language failed Promptfoo.
Stack
| Layer | Tool | What we validated |
|---|---|---|
| RAG quality | Ragas | Faithfulness against bound policy text |
| LLM traces / evals | LangSmith | What was retrieved vs brochure junk |
| Journeys / UI | Playwright | Quote → bind → docs |
| Adversarial evals | Promptfoo | Invented riders and claim outcomes |
Same method as the rest of our work: severity-ranked findings, pass rules in writing, and a ship / wait / block call. See the evaluation method and tool comparison.