A schema is a good answer to a question you have already asked a hundred times. It is a poor answer to the question that occurs to you at 4pm with a bound date on Friday. Every specialty file has a handful of those — things nobody put in the data contract because nobody knew they would matter until this risk. Until now the only way to settle them was to open the PDFs and read.

So we added the obvious thing: pick a folder of submission or claim documents, press Ask, and put the question to the documents. What is worth writing about is not the chat box. It is the three decisions underneath it, because a chatbot over insurance documents is easy to build and easy to build in a way that no underwriter should ever rely on.

Decision one: it will not answer without a quote

The failure mode we care about is not the model saying “I don’t know”. It is the model saying $5,000,000 self-insured retention in a confident sentence, when the document says no such thing and the reader has no way to tell. An underwriter acting on a fluent, unsupported figure is the exact failure the rest of the platform exists to prevent, and it would be strange to reintroduce it through a friendlier interface.

So every factual claim comes back with the verbatim words it rests on, the file and the page. If the folder does not state something, the answer says exactly that and marks itself unanswered rather than inferring a figure or filling the gap from general knowledge of insurance. Asked for a coverage table on a renewal application that names four coverages but schedules no limits, the honest answer is the four names and a plain sentence that the limits are not in these documents — not a tidy grid with plausible numbers in it.

Where the folder is already extracted, the record answers first

A question like what is the EPL retention has usually been extracted, validated and reviewed already. Re-reading the PDF to answer it again risks a different number than the one in the audited record — two answers and no way to know which is on the quote. So the record answers when it can: instantly, at no cost, and in agreement with the audit trail by construction.

The Ask this folder panel over a three-document management-liability submission — the answer names the signatory and the date, with two citations beneath it giving the file, page and the verbatim words, and three suggested follow-up questions
Asked who signed. The answer, the two quotes it rests on with file and page, and follow-ups this folder can actually answer.

Decision two: prepare once, then it is pennies

The naive design reads the folder into the prompt for every question. It works, and it costs about a dollar a question, which quietly makes the feature unusable for the browsing behaviour it exists to support — nobody explores a file when each follow-up has a price tag.

Instead the folder is prepared once. Preparing is deterministic reading — no model is called — so it takes seconds and its only cost is OCR, paid once and stored: page text, the form’s own key/value pairs with which boxes are ticked, worksheet shapes, and the geometry of every word for later. That digest then sits in the cached part of the prompt, ahead of the question.

That placement is the entire cost story, and we got it wrong first. With the folder sitting behind the cache point it is written once and read thereafter; with it in front, every question re-sends the whole folder as fresh input. Same answers, same model, roughly ten times the bill. Measured on a three-document management-liability folder, questions land in the low single-digit pence once the folder is warm.

1 · PrepareRead every document once. No model call. Progress streams per file.
2 · DigestText, form key/values, ticked boxes, sheet shapes, word geometry.
3 · AskCached prefix. Tools go back to the documents when the digest is not enough.
4 · CheckClick a citation; the page opens with the words boxed.

Decision three: a citation you can open

A citation an underwriter cannot check is a claim, not evidence. Clicking one opens the document at the page with the quoted words outlined. The rectangle comes from the document’s own word geometry — the quote is matched back against the page rather than plotted from coordinates a model produced, because a model asked for coordinates will invent them, and invent them plausibly. Scanned pages are highlighted from the OCR geometry captured during prepare, which is the only word geometry a scan has. Where the exact words cannot be located, the page still opens and the viewer says so; a highlight over the wrong paragraph is worse than no highlight at all.

A citation opened in the document viewer — page two of the renewal proposal form, scrolled to the execution block, with the handwritten signature, the typed name, title and date, and the printed SIGNATURE OF EXECUTIVE DIRECTOR / PRINT NAME / DATE labels each outlined in amber
The same citation, opened. One rectangle per line of the quote, drawn from the document’s own word geometry — not from coordinates a model produced.

This turned out to be much harder than it sounds, for a reason specific to insurance paperwork. We wrote up the engineering separately — the short version is that asked who signed a form, a model answers with the form’s meaning, pairing each printed label with the value written against it, and those words appear nowhere on the page in that order.

Tables and charts, cited like everything else

Some answers are not sentences. Losses by policy year, expenses by function, revenue against expenses across two years — when a comparison is the point, the answer carries a chart beside the prose, and every number in it is cited the same as any other figure. Two measures over the same years come back as two series against those years, not as one flattened row of bars, because the comparison is the reason the chart exists.

A chat answer comparing revenue against expenses across two financial years — grouped bars with the years on the axis and revenue and expenses as two series, above three citations to page six of the annual report
Two measures, two series. Revenue against expenses across two years — and every figure in the chart cited to the page it was read from.

The discipline that matters here is negative: a chart of two numbers is noise, and a table with one column is a list. Both are refused. A chart is also far easier to skim than to check — a reader who glances at bars is less likely to click through to page six than one reading a sentence with a number in it — so the citations sit directly beneath it rather than behind a disclosure.

Where the documents already are

Nothing has to be uploaded anywhere new. A folder is whatever your storage location already points at, using the same connectors extraction runs against: a broker’s SharePoint site or OneDrive folder, a submission mailbox or Teams channel, or a bucket in your own cloud account — S3, Azure Blob, Google Cloud Storage, OCI Object Storage. Documents are read with your credentials, in your region, and are not copied outside your perimeter.

Chat is not a back door round your document security either. The question runs under the asking user’s role, against the same registered location the rest of the platform uses. Someone who cannot open a folder in Drive cannot ask questions of it, and a quote can only cite a document that user is entitled to read. Every question, the documents it touched and the answer it gave are recorded against the user — so who asked what of this claim file is answerable afterwards, which is the question that actually gets asked in an audit.

In your workstation, not only in ours

The console is one consumer. Everything above is three REST calls — prepare, ask, forget — so an underwriting workstation, a claims desktop or an internal insights tool can offer the same interactive exploration inside its own screens. Tables and charts come back as data, not pictures: labels and series, ready to render in your own component library and your own house style. Calls authenticate with a scoped API key and usage is metered per key, so an assistant embedded in another product is governed like any other consumer of the platform.

What this is not good at, and what to use instead

The digest carries a bounded slice of each document and the agent reads more on demand, within a budget. That fits targeted questions well — a limit, a date, a signature, what a form says. It does not fit a few hundred pages of policy wording, or sweeping questions like summarise every exclusion, which need more lookups than one question is given. Those are extraction jobs against a schema, and should be run as such. We would rather say that here than have you discover it on a live renewal.

What it changed for us

The thing we did not predict is how often the answer is the folder does not state this. On a nonprofit D&O renewal we asked for the requested coverages as a table and got four coverage names and a flat statement that no limits, deductibles or premiums appear anywhere in the submission. That is a gap in the submission, surfaced in nine seconds, in the window where a broker can still be asked for the missing schedule. Reading three PDFs would have found the same thing an hour later, or not at all.