Skip to content

Complaint Analyzer

Clusters and deduplicates customer complaints to find root causes.

Industry Level Difficulty Recommended mode
Finance & banking 2 of 5 Intermediate flat
  • Complaints arrive in many channels and words.
  • Root causes hide in volume.
  • Regulators expect trend analysis.
  1. Complaints are embedded and grouped by nearest neighbours.
  2. Duplicates across channels are linked.
  3. New complaints far from known groups are flagged.
  4. search_batch processes daily volumes.
Today With Complaint Analyzer on SrvDB
Manual tagging Automatic grouping
Duplicates double-counted Linked across channels
Trends spotted late New clusters surface quickly
  1. Ingest complaints.
  2. Embed.
  3. Group and deduplicate.
  4. Report trends.
  5. Track remediation.
  • search_batch: runs many queries at once, in parallel inside Rust.
  • True cosine scores: scores in [-1, 1] mean the same in every mode, so thresholds are stable.
  • upsert: inserts new items and replaces changed ones, so the knowledge base stays current.
  • Crash-safe persist(): after it returns, data survives a crash or power loss and reopens exactly as committed.
  • Root-cause analysis
  • Regulatory reporting
  • Product issue detection
  • Channel deduplication
  • Vulnerable-customer signals
  • Remediation tracking

embed() is your embedding model (for example sentence-transformers, or a function that turns your records into feature vectors).

import json
import srvdb
db = srvdb.Database("./complaint-analyzer-db", dimension=384)
def ingest(items):
"""items: list of (id, text, metadata dict)"""
db.upsert(
ids=[i for i, _, _ in items],
embeddings=[embed(t) for _, t, _ in items],
metadatas=[json.dumps(m) for _, _, m in items],
)
db.persist() # crash-safe checkpoint
def similar_complaints(complaint, k=5):
hits = db.search(embed(complaint), k)
return [(json.loads(db.get(i)), round(score, 3)) for i, score in hits]
  • Human review of groupings.
  1. Prototype: load a sample of real data with flat mode and check that searches return what an expert expects.
  2. Measure: if you move to an approximate mode, compare its results with flat on the same queries (recall).
  3. Pipeline: add continuous upsert and decide when to call persist().
  4. Harden: test restarts and crashes, add logging, review every output path with domain experts.
  5. Deploy: ship the database directory with the application or service.
Level Project What it does
1 · Beginner Policy Assistant Answers staff questions from internal policies and product terms.
2 · Intermediate Complaint Analyzer (this page) Clusters and deduplicates customer complaints to find root causes.
3 · Advanced Fraud Pattern Matcher Compares new cases with confirmed fraud cases and ranks them for investigators.
4 · Expert Investigator Agent An agent that gathers context across cases, policies and customer history.
5 · Frontier On-prem Risk AI Platform A data-resident AI retrieval platform for risk and compliance teams.

See also: Use cases · Live examples (coming soon)