For UK charities · How I keep it accurate

Do private AI assistants make things up?

Any AI can. The job is making sure the ones I build don't reach your team with it when they do.

I build UK charities private AI assistants that answer questions from their own systems: their CRM, their finance system, their spreadsheets and their documents, without any of it leaving their control. Each one has a job, and some read several systems at once. This page is about the first thing worth asking of a tool like that. Can you trust what it tells you?

AI tools are known for inventing a confident, plausible answer to a question they can't really answer. The industry calls it hallucination. It's the right thing to worry about, and it's the reason most of the work on one of these assistants is not building it. It's trying to catch it being wrong before you ever see it.

You can see one of these assistants here. This page is only about the answers: how I test them, and what the testing has caught. No adjectives, just the method and the results.

What I can honestly claim

I'm not going to tell you it never makes a mistake. Nobody can say that honestly about any AI, and I'd be wary of anyone who does. Here is what I can say instead.

Every assistant I build is tested against data I control and already know the right answers for, before anyone relies on it. Every question has to be answered correctly, with working links to the source, 20 times in a row before it ships. One wrong answer out of the 20 fails the whole question. Every mistake the testing finds becomes a permanent check, so the same mistake cannot come back. And where a kind of mistake can be made impossible rather than just unlikely, I make it impossible.

There is one promise underneath all of this that matters most: a wrong answer never reaches you. When the assistant cannot check what it is about to say against your data, it does not guess, it says so plainly.

On the demonstration build the most recent test asked all twenty questions twenty times over, twice through, eight hundred answers in all, and not one wrong answer went out, and not once did it have to fall back on "I can't answer that". It was simply right every time.

That's a different promise from "trust me, it's clever". It's "here is the evidence, and here is what it got wrong on the way".

How the testing works

The idea is simple. I take a set of questions I already know the right answers to, drawn from the real data in the systems you already run: your CRM, your Xero, whichever third-party systems you use. I ask each one many times over, and mark every answer against the known result.

The answers I mark against aren't my opinion. In the demonstration here, that data is a fictional charity's, built by scripts that write out the correct figures as they go, so the member counts, the fund totals, the attendance and the species counts are all worked out separately from the assistant. On your own build it's your real figures, established the same way, independently of the assistant. The assistant never marks its own homework.

Then a few rules make the marking strict:

  • Each question is asked 20 times, not once. A lucky right answer isn't a pass. The score is how many of the 20 were right.
  • The facts and the source links are marked separately. A right figure with a broken link is a fail. A working link on a wrong figure is a fail.
  • Every question also lists what the answer must not contain: the wrong total, a confidential detail, a broken link.
  • Every failed answer is kept, word for word, so a one in twenty wobble gets diagnosed from the evidence rather than guessed at.

Here is what one full run looks like, against my Fenmere Trust demo, a fictional charity with entirely made-up data. Every question goes out 20 times, and each answer comes back marked against the known figure, green for a pass.

The final certification run Every question, asked 20 times and held twice over, on the build that ships. Green is a pass: the right figure with a working link back to its source.
Supporter registration 20/20
Registration and attendance together 20/20
One person across three systems 20/20
Safeguarding policy before sharing 20/20
Wetland appeal reconciled 20/20
Stone-curlew, count and location 20/20
Trustee board briefing 20/20
Restricted fund refusal 20/20
A confidential grid reference withheld 20/20
Appeal thank-you coverage 20/20
Membership retention by region 20/20
Top donors this year 20/20
Duplicate members to merge 20/20
Case notes summarised 20/20
What changed for a young person 20/20
Actions still outstanding 20/20
Water vole survey 20/20
Woodlark five-year trend 20/20
Top volunteer, sheet to CRM 20/20
Document folder inventory 20/20

20 questions, 20 runs each, twice over: 800 answers, not one wrong, every figure marked against a total worked out separately from the assistant.

Why the numbers hold still

The reason this works is that the AI does less than you'd think. It writes only the sentence.

When you ask how much a fund raised, or how many members lapsed, the counting and adding are done by ordinary code reading your systems, the same way every time. The figures, the links, and the way the answer is laid out are all built by code from what your systems returned. The AI's job is only to understand the question and put the answer into words. It routes the question in and phrases the answer out, and it doesn't touch the figure, the link or the layout in between.

So it cannot drop a figure, cannot mangle a link, and cannot invent a citation, because it never types any of them. That's why a total comes out the same on the twentieth run as the first, and why every figure carries a link straight back to the record it came from. Nothing is taken on trust.

Checked on every answer, not just in testing

Testing happens before an assistant reaches you, against answers I already know. But it doesn't stop there. Once the assistant is live, every answer it gives is checked in the moment, before you ever see it.

Once it's pulled the figures from your systems, the assistant writes its sentence. Before that sentence reaches you, it's checked back against the very data the tools just returned: does it carry the figures the question turned on, does it say anything the data doesn't support, is there a real record behind every claim? If it drops a number, contradicts the data, or makes a claim with no source, the answer is thrown out and written again. And if it still doesn't hold up, the assistant tells you it can't answer, rather than show you something unchecked.

That's the difference between "we tested it and it was fine" and "it's checked every single time". The testing proves the method works; this runs on the actual answer you're given.

What the testing has caught

This is the part most people don't show you. Here are real mistakes the testing found on the demo assistant, and what I did about each one.

The six stone-curlews that were really two

Asked how many stone-curlews the reserve had, the assistant answered six. There were two. It hadn't invented anything. The birds had been counted on three separate visits, and the code had added the visits up instead of taking the highest single count. A person watching the same two birds three times does not have six birds.

This is the important kind of mistake, because it isn't the AI making things up. It's a wrong convention about what the data means, and it was invisible until it was tested against a known answer. The fix was to count the peak, never the sum, written into the code and pinned down by a new test so it can't drift back.

The nest location it was right to withhold

One reserve holds a protected breeding site whose exact grid reference is genuinely sensitive. On two runs out of 20, asked about the site, the assistant quoted the grid reference. It was polite about it, and it cited its source correctly. It was still wrong to say it.

Asking it nicely not to isn't a safeguard. So the grid reference is now removed by the code before the assistant ever sees the document text. It can't disclose what it was never given. That's the difference between unlikely and impossible, and for something like a nest location or a safeguarding detail, impossible is the only acceptable answer.

There's a fuller record of every failure, its cause and its fix. Each before and after is a real pass rate: a wrong figure on 3 runs out of 20, then 20 out of 20 once the fix and its test were in.

Pass rates, before and after each fix Passing runs out of 20. The amber bar is before the fix went in, the green bar is after the fix and its permanent test.
Summed three sightings of the same two birds 17/20 20/20
Showed a grant as the appeal total 16/20 20/20
Looped on its own misspelling of a name 16/20 20/20
Paraphrased a policy clause instead of quoting it 14/20 20/20
A no-input tool crashed the run 11/20 20/20
Citation links broke under a heavy answer 7/20 20/20

Each fix is also a new test, so the mistake it caught cannot come back. The full ledger records the cause and fix for every one.

What this means for your data

The stone-curlew mistake is the one to remember, because your data has its own version of it. Every organisation counts things in ways that are obvious to the people who work there and written down nowhere: what makes a member lapsed, which date counts as the gift date, when two records are really the same person. Get one of those conventions wrong and the answer looks fine and is quietly incorrect.

Finding those is most of the work, and it's the same loop every time. Take data where the right answers are known, test the assistant against it, find where it has read your world wrong, fix it in the code, and keep the test. The report at the end, this question, answered correctly, 20 times in a row, is part of what I hand over.

So the honest answer to "does it make things up" is: I assume it will try, and I build and test it so that where it matters, it can't. If you'd like to see that run against your own data, that's a large part of what the work is. Email me and tell me what your team needs to be able to trust.

The examples here come from the demonstration assistant built for a fictional charity, the Fenmere Trust. Its records are made up so I can show the testing openly. The method is the one I use on real client builds. You can see the assistant itself here.


Start with a discovery

The first step is always the same, and it's a small one: a short, fixed-price discovery. Over a couple of weeks I work out what your team is already doing with AI, where your data actually lives, and the one thing worth building first. You get a written report and a call to talk it through, with no obligation to go further. It's genuinely useful on its own, whether or not we end up building anything.

Here's a sample, laid out exactly as the real one is delivered.

Cover of a sample Private AI Discovery report, prepared for a UK charity
See the sample report → PDF, opens in a new tab

For context: I work mainly with UK charities and non profits, with chief executives, operations and finance directors, programme leads, and the people who look after data and IT. Respectfully, I don't work with recruitment or development agencies.

Not sure it's time for that yet? Just email me, tell me who you are and what your organisation does: peter@peterbrady.co.uk