Customers are small-flock poultry farmers, and they ask the same things constantly: what a bag costs, which branch is nearest, what to do about a sick bird. Every one of those questions went to a person, in whichever of three languages the customer happened to write in, at whatever hour they happened to ask.
Household poultry keeping from the Food and Agriculture Organization. The feed share of production cost is from a peer-reviewed study of broiler growers in Chegutu district, and a second study puts it at 62%. The monthly chick figure is the Zimbabwe Poultry Association's own, reported in the national press. The small-producer share is the European Union's, from its assessment of the poultry value chain in October 2022. Every customer of this assistant is somebody for whom feed is most of the cost of the thing they are trying to sell.
An AI assistant on the company's own WhatsApp number. It answers in the language the customer writes in, quotes any of 236 products by name, names the nearest branch from a shared location pin, and accepts a photograph of a sick bird. Staff edit everything it knows themselves, and a correction is live in about a minute.
What it knows lives in a tree, not a pile of documents. Prices, branches, opening hours and products are nodes with values on them, and the tree always wins over anything found in an attached file. That is what makes a correction take a minute: somebody edits a node, it is re-embedded, and the next customer gets the new answer.
No price is hardcoded anywhere in the system. That is not an assertion, it is an audit: a search across the source, the front end, the scripts and the migrations returns nothing that looks like a price, and the evidence pack is kept with the project.
Every morning an automated tester puts realistic farmer questions to the live assistant and a second model grades the replies. The daily report that comes out of it is how a miss gets found by us rather than by a customer.
It is twenty past seven in the evening. A farmer with sixty birds photographs one of them and sends it to a number they got off a feed bag.
Not a new number, not an app, and nothing to install. It is the WhatsApp number already printed on the bag, and the customer does not have to be told anything has changed.
The signature is verified, the message is acknowledged immediately so WhatsApp does not retry it, and the actual work happens after that. A customer sees the two ticks straight away and the reply when it is ready.
Across a measured twenty days, English ran between 69 and 78% of messages and Shona between 18 and 28%, with Ndebele present throughout. Plenty of messages mix two of them in one sentence.
Nothing asks the customer to choose a language, and nothing answers in a language they did not write in.
The image goes to Claude's vision as part of the conversation. On a busy day up to 9% of everything the assistant receives is a photograph, which is a farmer showing rather than describing.
It says what it can see and what it cannot, and it says plainly that it is not a vet. A bird is somebody's income and the wrong confident answer costs them more than no answer.
| Asked | Found in | Answered from |
|---|---|---|
| Price of a 50kg bag | Product node | The tree |
| Nearest branch | 46 branch locations | The tree |
| Opening time on Saturday | Branch node | The tree |
| Dosage for a treatment | Attached document | Source, flagged |
A price, an opening time, a product name or a branch address is looked up in the company's own knowledge tree before it is said. The search runs over meaning and over exact words at the same time and combines the two, so a product asked for by description is found as reliably as one asked for by name.
The tree holds 236 products it can quote by name. Documents are attached as sources and are never the default: where a document and the tree disagree, the tree wins, because the tree is the thing staff edit.
| Branch | Distance | Open now |
|---|---|---|
| Nearest | 4.2 km | Until 17:00 |
| Second nearest | 11.8 km | Until 17:00 |
| Third nearest | 26.4 km | Closed |
The customer shares their location and the assistant returns the closest of the 46 branch locations it holds, by actual distance rather than by which town name it recognises.
That is the single most common thing anybody asks it, and it is the one a person answering a phone gets wrong most often, because they know their own province and not the customer's.
Some questions belong to a person: a complaint, a large order, anything about an account. The assistant stops and passes the conversation on rather than improvising.
Across one measured week it recorded 55 misses out of 884 messages, about 6%, and each one was grouped and given to somebody to fix. A miss rate you publish to yourself every week is the thing that makes the other 94% trustworthy.
sales/products/broiler-finisher/price-50kg was: 33.00 now: 34.50 <- edited by a person at the company re-embedded on save, no deploy, no ticket to us. the next customer who asks gets 34.50.
Somebody at the company opens the tree, finds the node that was wrong, edits it, and it is re-embedded on save. The next customer to ask gets the new answer.
About a minute, and no deploy. That is the whole argument for putting what it knows in a tree the client owns rather than in a prompt we own.
It runs in production, serving real customers. Every morning an automated tester puts eight realistic farmer questions to it and a second AI grades the replies.
Measured from seven consecutive days of the assistant's own daily usage reports. The product count and the 46 branch locations it can name are counted from the system's own data, which comes from the company rather than from anything they publish, so the entry describes what the assistant covers rather than asserting a branch count on the company's behalf.
This page once carried claims that described the work inaccurately. They came down in an audit of our own copy, and each one went back up only when its numbers could be traced to something measured. A case study you cannot check is worth nothing to you, and one that turns out to be wrong costs us more than it ever earned.