Services How we work Products About Blog Book a discovery call →
Case study · Bizintellis

An AI data analyst for fragrance research.

For Bizintellis, we built an agent that answers questions about years of fragrance consumer research in plain language. It works the numbers out from the database, draws the chart, cites its sources and keeps a record of how it got each answer.

How the analyst agent answers a question A question passes through a router gate. One lane runs through a vector search grid, where the nearest matches light up, into the survey database; the other runs to a web search mast. Both lanes meet at a synthesis block, which produces an answer board with a bar chart and a stacked trace of every step. QUESTION ROUTER VECTOR SEARCH SURVEY SQL WEB SEARCH SYNTHESIS ANSWER TRACE
) The story
Client

Bizintellis is a business intelligence firm. It builds research platforms that put large consumer surveys in front of brand and product teams.

Challenge

The data spans many markets, several yearly survey waves, hundreds of fragrance ingredients and dozens of audience segments. Dashboards answered the questions someone had planned for. Anything else waited for an analyst.

Build

An AI agent inside the research platform. People ask in their own words and follow up the way they would with a colleague.

Principle

Numbers come from database queries, not from the model's memory. When the data cannot answer a question, the agent says so and suggests what it can do instead.

) What we built
One agent, many jobs

A colleague who knows the whole dataset.

Each question is planned, routed and answered by a set of steps working together, with a record of every step kept for review.

Agentic AI

Questions in plain language

The agent decides whether a question needs the survey data, the web or both. Follow ups like "and the year before?" keep their context, and a question that could mean two things gets a short clarifying question first.

Data

Answers worked out, not guessed

The agent writes and runs the database query behind every figure. Semantic search finds the right ingredient or measure when people use their own words, and each answer says which market, year and audience it covers.

Reporting

Charts, tables and decks

Charts are drawn from the same figures as the answer. Tables and charts export, and a conversation can become a PowerPoint deck in the client's own template.

Web context

The market, kept separate

When a question needs outside context, the agent searches the web and lists its sources with links, so web findings are never mixed up with survey figures.

Embedded

Aware of the page on screen

The agent opens inside the research platform and knows which chart the user is looking at. "What leads here?" is answered for that chart, and the answer says so.

Platform

Ready for many teams

Answers in English, Chinese, Spanish and Japanese, user accounts and an admin dashboard, and a saved trace of every answer: the route taken, the query run and the data returned.

) Under the hood
How a question becomes an answer

Retrieval, routing and live search, working as one.

Each question passes through a graph of specialised steps. These are the parts that make it accurate, fast and explainable.

  1. 01

    Routing that knows when to think

    Every question is sent down one of four paths: the survey data, the web, both, or a polite decline for anything off topic. A rule based router matches products, measures, markets, years and audiences against a cached index, with fuzzy matching for typos, and answers in milliseconds. Only when its confidence is low does a language model make the call. Questions with several parts are split up and run in parallel, or in order when one part depends on another.

  2. 02

    Semantic search over the survey's own vocabulary

    People rarely use the survey's exact labels. Every fragrance ingredient and survey measure is embedded and stored in PostgreSQL with pgvector, behind an HNSW index, so a question in everyday words still finds the right entries. This is retrieval augmented generation applied to structured data: retrieval decides what to look up, the database supplies the figures. The agent also tells apart a definition, a ranking, a "why" question and a full profile, and plans each one differently.

  3. 03

    Figures from SQL, not from the model

    Once the entities are resolved, the agent builds the database query with exact filters for market, survey wave and audience, and runs aggregations, rankings, standard deviations and z scores in the database. If a query comes back empty, the graph loops back to try a related measure or the nearest available year before it reports that the data does not exist, and it says which substitute it used.

  4. 04

    Real time web search, clearly labelled

    For brands, products, prices and trends the survey cannot know, the agent runs a live web search. A synthesis step lines the web findings up against the survey figures, and web findings come with their source links and link previews. When a market has no survey data, the agent offers a web search instead of a dead end.

  5. 05

    Conversation memory

    A context resolver rewrites each follow up into a complete question using the conversation so far, so "and the year before?" or "how does that compare with the men?" means exactly what the user meant. Conversations and their traces are stored in PostgreSQL and cached in Redis.

  6. 06

    Pausing to ask, streaming to answer

    When a question is genuinely ambiguous, the run pauses at a checkpoint and asks one short question, then resumes on the same path, even after a server restart. Answers stream word by word over server sent events, with each step shown live as it happens and the charts arriving alongside the text.

) Engineering notes
The hard parts

Where an analyst agent earns trust.

Most of the work was not the model. It was making sure the agent answers the question that was actually asked, from the right slice of data.

Messy data

Each survey wave labelled markets and segments a little differently. A dictionary of concepts lets one filter find every year's spelling, so no wave is silently left out.

No silent guesses

The agent may take the measure from the chart on screen, and it says when it does. It never quietly assumes the audience, because answering for the wrong group looks right and is wrong.

Tested behaviour

Automated tests cover routing, queries, follow ups and streaming, so a fix for one kind of question does not break another.

PythonLangGraphPydanticAIFastAPIPostgreSQLpgvectorRedisAI modelsWeb search

The agent is in daily use on the research platform, and the engagement is ongoing. We keep extending the agent as Bizintellis and its users ask for more.

) Start
One conversation is enough to start

Data your team can't easily question? Let's talk.

Tell us what you want to ask of it. A senior member of the team replies within one business day.

Book a discovery call →