AutomotiveMulti-agent system and data platform

Dealer service agents

5,000 dealerships across Europe, and everything a dealer needed to know sat in systems they could not query: about 70TB of unstructured pages in a legacy Notes application, and the operational systems behind it. A multi-agent system now takes the question in plain language and routes it to whichever agent can actually answer it, with the asker's scope resolved once and carried into whichever pipeline runs.

70TBLegacy application, made queryable
5,000EU dealerships with scoped access
Four agentsRetrieval, SQL, actions, escalation
200,000Questions a week, in production
Dealer agent answering vehicle specification queries in plain language
Redrawn from the product. The original carried client branding that cannot be published. Fields, states and controls are as built.
Client
A European automotive distribution group
My role
Led the AI and data engineering: the multi-agent architecture, the retrieval and text to SQL pipelines, the embedding fan-out, and the governance layer.
Team
Eight to nine engineers, four of them data engineers working only on extraction from the Notes application.
Timeline
Started early 2025. Live in production.
Stack
Azure OpenAI, LangGraph, LangSmith, pgvector, Azure Functions, Azure Container Apps, Apache Superset

The problem

A dealer needing a warranty term, a vehicle specification or an order status had no way to look it up. The records sat in a Notes application holding about 70TB, with no schema and no index.

So they called HQ and waited. An answer that already existed inside the business took hours or days to come back.

Scrolls sideways.

Before and after workflow for the dealer agents
How a dealer got an answer before, and how they get one now. Open full size

The solution

Retrieval is the obvious answer and only part of it. A question like “how many orders did I close last month” has nothing written down to retrieve, and a retrieval agent asked for it will still return something.

So a LangGraph supervisor resolves who is asking, classifies the question, and routes it to one of four agents: retrieval, text to SQL, an action queued through RPA, or a person.

Scope is resolved once and travels with the request. On the retrieval path the dealer filter goes into the query. On the SQL path it goes into the WHERE clause. Filtering afterwards would still have shown the model data it was not allowed to see.

Scrolls sideways.

Dealer multi-agent architecture: a LangGraph supervisor resolves identity and intent, then routes to a retrieval agent, a text to SQL agent, an action agent that queues RPA transactions, or an escalation to a person
A supervisor in front of four agents. Scope is resolved once, then travels with the request into whichever pipeline runs. Retrieval is one of the four, not the system. Open full size

How it works

Supervisor

LangGraph orchestrates the whole exchange. It resolves identity, classifies the request, picks the agent, and assembles the reply. It carries no domain knowledge of its own, so when an answer is wrong it is clear which agent produced it.

Scope resolution

Role and dealer identifier come from the authenticated session, never from the question. Scope is resolved once, at the top, and travels with the request into whichever pipeline runs.

Retrieval agent

Answers from the document corpus in pgvector, for specifications, warranty terms, parts and service history. The dealer filter is applied to the query rather than to the results, so out-of-scope records never reach the model. The first release ran on Azure AI Search, and that was deliberate: the fastest way to show the client that 70TB of legacy pages could be queried at all was a managed index, not a bespoke one. Once that was settled the binding requirement changed from speed to governance, and pgvector is what allowed the scope filter to sit inside the retrieval query itself. On a smaller corpus that changes often, AI Search is still the better answer.

Text to SQL agent

Writes SQL against the Synapse gold layer for counts, totals, trends and order status. The dealer identifier is injected into the WHERE clause, so the same scope rule holds on a path where retrieval filtering would not apply.

Action agent

Some requests are not questions. Raising a warranty claim or ordering a part is a transaction, so it is queued against the backend system through RPA rather than answered in conversation, and the queue state is visible and tracked.

Escalation

Anything legal, contractual or genuinely ambiguous is handed to a person with the context already gathered. Knowing when not to answer is a design decision, not a gap.

Ingestion and data platform

A change listener crawls the Notes application and Azure Functions embed in parallel, because 70TB run sequentially would take weeks and keep hitting the rate limit. Four of the engineers on this project worked on nothing but getting data out of that application. In parallel, Data Factory orchestrates the nightly load, Databricks conforms it, and Synapse serves the gold and rpt schemas that both the SQL agent and the Superset dashboards read.

Observability and audit

Every agent run is traced in LangSmith, with the routing decision, the retrieval step and the tool calls. Every query and response is written to the audit log with the user and the time, and thumbs up or down is captured against the run.

Where it runs

Scrolls sideways.

Azure landing zone for the platform: ADF managed VNet, Databricks VNet, Synapse managed VNet, Superset VNet, and the chat application container subnet, all behind private endpoints
The Azure landing zone for the wider data platform this agent sits in, drawn during the project. The ADF, Databricks and Synapse VNets serve the warehouse and the Superset dashboards; the agents run in the chat application subnet with the same private-endpoint and Key Vault pattern. Client identity not shown. Open full size

Stack

Orchestration

LangGraphSupervisor and worker agentsLangSmith

AI and models

Azure OpenAI GPT-4text-embedding-3-largeAzure AI Foundry

Retrieval

pgvector on PostgreSQLAzure AI Search (POC)

Warehouse and text to SQL

Azure SynapseDatabricksAzure Data Factory

Ingestion

Azure Functions (fan-out)Change-listener pipelineNotes application connector

Actions

RPA queueBackend transaction handoff

Hosting and infrastructure

Azure Container AppsAzure Managed VNetKey VaultPrivate endpoints

Analytics

Apache Superset

Product screens

Dealer agent answering a specification question, scoped to that dealer's records

1 of 5

The Superset and routing screens are real, with client identifiers removed. The agent, widget and trace views are redrawn from the product because the originals carried client branding that cannot be published. Behaviour, fields and controls are as built.

Results

Before

Days per question

A dealer needing a specification, a warranty term or an order status called or emailed HQ, who searched the legacy database and the warehouse by hand.

After

Seconds

Asked in plain language and answered from the documents or from the warehouse, scoped to that dealership. The system now carries around 200,000 questions a week that would otherwise have gone to HQ, across 5,000 dealerships.

What did not go to plan

Four of the eight to nine engineers were data engineers working only on extraction. That ratio is the honest shape of a 70TB legacy estate, and it is the number I would give anyone who assumes the model is the hard part.

The connector took far longer than planned, embedding kept hitting the rate limit until it was fanned out across functions, and burst load exposed missing connection pooling. There is still no minimum retrieval score, which is the first thing I would add.

What this demonstrates

  1. 01Multi-agent routing where retrieval is one of four paths, not the whole system
  2. 02Governance resolved before retrieval: the dealer filter sits inside the query and the WHERE clause
  3. 03A 70TB legacy estate made queryable, with the extraction effort planned as the largest line
  4. 04A full Azure data platform (Data Factory, Databricks, Synapse) serving both the agents and the BI
  5. 05Operation at around 200,000 questions a week with per-run tracing and an audit log

Next caseRequirement compliance platform