AI merge review
After the engine clusters duplicates, an AI agent reviews each group, assigns a verdict and confidence, explains it in plain language, and can override the engine.
This is the part that makes the tool defensible instead of a black box. The matching engine proposes which rows are duplicates; the AI agent reviews each of those proposals, decides whether it agrees, and tells you why in one plain sentence. When it disagrees, it overrides the engine.
What the agent returns per group
For every duplicate group, the agent returns three things:
- Verdict — one of:
confirmed— the rows really are the same entity.uncertain— the evidence is thin or mixed; a human should decide.rejected— the engine over-merged; these are different entities.
- Confidence —
high,medium, orlow. - Explanation — one short, plain-language sentence a non-technical reader can follow, e.g. "Same company — only the punctuation and casing differ" or "Two different people who share a last name and city."
Rejected = the agent overriding the engine
A rejected verdict is the agent stepping in to undo a merge the deterministic
engine proposed. That matters: it means a real decision is being made in
production by the AI, not just a label being printed. The deterministic engine
optimizes for catching duplicates (recall); the agent acts as the precision
backstop, throwing out the merges that went too far.
"Needs review"
In the results, rejected and uncertain groups are floated to the top under a Needs review heading — rejected first (the overrides), then uncertain. The confirmed groups are still listed below under All groups. The idea is that your attention goes straight to the handful of decisions that actually need a human, not to the hundreds the agent was confident about.
What "reviewed" means (and the honest limits)
Two limits are worth being upfront about:
- Only multi-row groups are reviewed. A singleton (a row with no duplicate) needs no explanation, so it's never sent to the agent.
- There's a per-request review cap. To keep cost and latency bounded, only the
first
EXPLAIN_MAX_CLUSTERSduplicate groups are sent to the model (50 by default). Any beyond that come back marked not reviewed rather than silently treated as confirmed, so coverage is always honest. The response tells you exactly how many were reviewed (reviewed_count) out of the total (total_clusters).
The agent never takes down a run. If the model provider is unavailable or returns something unparseable, each affected group degrades to a neutral "explanation unavailable" verdict and the results panel says agent review is unavailable. You still get the engine's groups and a clean file.
For the exact request and response shapes, see the explain API reference.