Utilities · 2025 · 14 weeks
A retrieval system that answers asset questions with the record attached
A mid-market water utility was losing hours a day to asset-history lookups spread across four systems. We built a spatial retrieval layer that answers in seconds and cites its sources.
- Sector
- Utilities
- Year
- 2025
- Engagement
- 14 weeks
- Team
- 3 people
The question that started the engagement was small: "When was this main last relined?" The answer lived in four places: a GIS layer, a work-order system, a scanned as-built from 1987, and the memory of a supervisor eighteen months from retirement. Getting it took eleven minutes on a good day. The utility asked us whether AI could help. We said: maybe, and the honest way to find out is to build the smallest version that could work.
The situation
The utility serves roughly 180,000 connections. Its asset records were digitized in three separate waves, and each wave left seams. Field crews and engineers asked the records team about forty history questions a day, and the records team answered them by hand.
What we did
We built a retrieval system over the four record stores, with geography as the join key. Every pipe segment, valve, and hydrant became an anchor; documents, work orders, and as-builts were indexed against the assets they touch. A question like "what do we know about the main under Alder Street" resolves spatially first, then semantically.
It doesn't feel like asking a chatbot. It feels like asking the one person who has read everything, except she shows you the folder.
Every answer carries citations to the underlying record (the scanned page, the work order number) because in a regulated utility an uncited answer is a liability, not a convenience.
What we found
The retrieval was the easy half. The hard half was the 1987–1994 gap, where as-builts existed only as scans with hand-lettered annotations. We ran a structured extraction pass over 21,000 scanned sheets and got usable georeferencing on about 70% of them.
What we learned
One thing didn't work, and it's worth saying plainly: our first attempt let the model synthesize answers across conflicting records, and it produced confident summaries that quietly picked a side. Engineers caught it within a week. We rebuilt the answer layer to surface conflicts instead of resolving them: "these two records disagree" turns out to be one of the most valuable answers the system gives.
The supervisor near retirement now spends two afternoons a week correcting and annotating the index. That was not in the statement of work. It might be the most durable thing the engagement produced.