Banks, lenders and funds work under regulators, auditors and investors, so an AI system has to answer the same questions their other systems do: who saw what, who decided what, and how do you know it works?
Keep an audit trail. For every output, record the input document and its version (a hash of the file is a good id), the extracted text, the model and prompt version, what came back, the checks that ran, and every human action: who reviewed, what they changed, who approved, and when. Write it so it can be added to but not edited. When someone asks in a year why a number was in a memo, you can show them.
Control access the same way the documents are controlled. If only one deal team may see a borrower's files, the retrieval step must filter by the user's permissions, so a passage they can't see never reaches their prompt or answer. Many firms also have information barriers between teams that must not share information; the AI system has to respect them too.
Treat personal data carefully: names, addresses, tax ids, account numbers. Send a model only what the task needs, mask what it doesn't, keep data in the places and for the time your policies allow, and know what your model provider does with what you send (retention, training, where it's processed). Rules differ by country and by type of firm, so check with your compliance team.
Put a person at the decisions. The system can extract, check and draft; a person approves the credit memo, the questionnaire, the value that failed a check. The aim is to make their review fast, not to remove it.
Measure it on labeled documents: a set where people have recorded the right value for every field. Report accuracy per field, not one overall number, and split it by document type and scan quality, because a 96% average can hide a field that's right 84% of the time. Rerun the set on every model or prompt change, as in the evals lesson of How LLMs work.
gold = [{"margin_bps": 425, "maturity": "2030-03-31"}, {"margin_bps": 500, "maturity": "2029-06-30"}, {"margin_bps": 375, "maturity": "2031-01-15"}]
pred = [{"margin_bps": 425, "maturity": "2030-03-31"}, {"margin_bps": 500, "maturity": "2029-03-30"}, {"margin_bps": 375, "maturity": "2031-01-15"}]
for field in ("margin_bps", "maturity"):
right = sum(g[field] == p[field] for g, p in zip(gold, pred))
print(field, f"{right}/{len(gold)}")
Prints
margin_bps 3/3
maturity 2/3
And know what a document costs: model tokens for every call, OCR, and the minutes a person spends reviewing it. The review time is usually the biggest part, which is why better checks and better source highlighting often save more than a cheaper model.
Practice
Which of these does an audit trail for an extracted value need?
More info
Quick reference
Audit trail
Append-only record of inputs, versions, outputs, checks and human actions.
Access control
Filter retrieval by the user's permissions.
Information barrier
Teams that must not share information.
Data minimisation
Send only what the task needs; mask the rest.
Labeled set
Documents with the right value recorded for each field.