AI Knowledge Platform
A regional innovation network asked for better search. It connected organizations, funding programs, and startups, but much of its information was hard to find. Resources lived in PDFs, partner websites, and program one-pagers.
I worked on the product strategy and AI engineering. The initial proposal was a search-and-filter plugin for the existing website. As we worked through the requirements, the scope grew to include importing external material, reviewing it, answering questions with source citations, and publishing a directory and map.
The finished platform connects those tasks. Staff can add a PDF or a URL, review the extracted information, and publish it. Approved material becomes available to the search, while organization and program records also appear in the directory.

From a document to an answer
The first part of the work was getting usable content into the system. The ingestion pipeline accepts PDFs and URLs, extracts their contents, and removes navigation, ads, and other boilerplate. Some partner sites render their text with JavaScript, so those pages need a browser to load before extraction.
A curator reviews the material before publishing it. That approval determines what the public search can retrieve. The answer process draws on this approved library rather than searching the open web.
Retrieval combines keyword search with semantic search, using embeddings stored in PostgreSQL. Keyword matching handles exact names and specialist terms; semantic search helps with questions phrased differently from the source material. We combine the results to select passages for the answer.
The answer includes citations to those passages. A reader can follow the reference and inspect the material behind the response.

Fixing the citations
An early version retrieved a relevant passage but cited the beginning of its document. The answer could look convincing while sending the reader to the wrong evidence.
We traced the problem and corrected the citation handling to use the passage that matched the question, so the reader could check the answer against it.
There also needed to be a path for questions the library couldn't answer. The system compares its strongest match against an adjustable threshold. Below that threshold, it returns a message explaining that it doesn't have a strong match. We calibrated that threshold against the embedding model's behavior on real queries.
Keeping the directory connected
The same curated database holds the network's organizations and programs, their locations, and the categories and audiences used for filtering. That data also powers the public directory and interactive map.
Staff approve an organization once. Its published record can then appear in the directory, on the map, and as context for the search. They maintain those records alongside the source material the answers draw from.

Refreshing sources without undoing editorial work
Published web sources refresh on a schedule. The ingestion pipeline retries transient failures, so a temporary network problem doesn't immediately end the attempt to update a resource.
Re-ingestion also has to account for the work a curator has already done. New source passages and embeddings wait for a curator's approval before replacing the approved evidence. Edited titles, summaries, and existing publish status stay intact. Staff can revise a resource's public description without having to redo that work after the next scheduled refresh.
