The LLM never writes the query: declarative search layer over sensitive records
We have an internal assistant. One of the things it does is find people.
By people I mean records in a system of record β names, contacts, home addresses, current assignments, and other personal details that exist in exactly one place and actually matter. This is the most sensitive data we hold. Staff can search it by typing a request in plain language, such as βfind translators in France who speak Spanish,β and getting an answer back.
The model handles the request itself without much trouble. This post is about what happens between the request and the answer.
First, some background on what the assistant is.
Itβs an internal chat tool. A staff member opens it, types a request in plain language, and gets an answer. Under the hood itβs an LLM with a set of tools, which are small functions itβs allowed to call. The model has no direct connection to a database. When it needs data, it calls a tool, and the tool is the only code that touches a real record.
Finding people is one of those tools. When someone types βfind translators in France who speak Spanish,β the model reads the request, works out the search criteria, and calls the person-search tool with them. The tool runs the query and returns the matches, and the model presents them.