AI call quality assurance: grade every call, then verify the grader
Quality assurance for a human call team was built around one constraint: review is expensive, so you sample. A reviewer scores a small share of calls against a rubric, and the program lives with the blind spots sampling creates. AI phone agents change both sides of that equation. The agent produces far more calls than any human team could sample meaningfully — and automated grading makes it possible to put every one of those calls under some level of inspection. The discipline shifts from choosing which calls to review to designing what the review measures, clustering what it finds, and verifying that the automated judge deserves the trust you are placing in it.
This guide covers that loop: universal grading versus sampling, automatic issue detection and clustering, rubric design, and the limits of LLM-judged QA. It is the after-the-fact member of a trio — voice agent observability watches the aggregate numbers, and live call monitoring covers the conversations that cannot wait for a report.
Grading every call versus sampling
Call quality assurance traditionally answers "how are we doing?" from a sample. Sampling still has a place — but for AI agents its arithmetic turns hostile. The failures that matter most are often narrow: an agent mishandles one request type that makes up a few percent of traffic, or a tool silently errors for one class of input. A small random sample can miss a failure mode like that for weeks while the topline average looks stable, and the failure never announces itself the way a crashed service does.
Automated call scoring inverts the default: every call gets a grade, and human attention goes where the grades point. That changes what the numbers can support. A success rate computed over all conversations can drive alerting and trend analysis rather than being a quarterly estimate; a failure that touches two percent of calls produces actual failed-call rows to open rather than a statistical suspicion.
Universal grading does not retire human review — it re-aims it. Instead of sampling randomly for coverage, humans review for calibration and depth: reading the calls the grader flagged, spot-checking calls it passed, and handling the ambiguous, sensitive, and high-impact cases where judgment matters most. Random sampling keeps one narrow job — auditing the grader itself, on calls chosen without the grader's input, so its blind spots have a chance to surface.
Separate facts from judgment in the rubric
A single "was this call good?" score hides every failure mode inside it. Rubrics work better split into two layers, graded differently.
Checks that are facts. Much of what matters on a call is directly checkable, and should be asserted rather than judged: the required disclosure happened before collecting information; the right tool was invoked with the caller's corrected values; a mutation happened exactly once; the agent did not claim success after an error; the call ended in a permitted disposition. These deserve pass/fail treatment, and a critical check should stay visible on its own — never averaged into an overall score where one weighted failure disappears among ten successes.
Judgments that need a definition. Concision, clarity, tone, whether a handoff summary was useful — these are legitimately judgment calls, and a grader (human or model) needs each level defined in observable behavior. "Professional" is not a criterion; "did not interrupt the caller mid-answer" is. Vague rubric language does not make grading impossible — it makes it inconsistent, which is worse, because the numbers still look precise.
Two more properties keep a rubric honest. Every failing grade should carry evidence — the turn or event that triggered it — because a score without a pointer into the transcript is undebuggable and easy to optimize in the wrong direction. And rubric changes should be reviewed like code changes: quietly relaxing a criterion moves every downstream number while looking like quality improved.
From graded calls to named issues
A grade answers "how did this call go?" The operational question is different: "what keeps going wrong?" Answering it from raw grades means reading failed calls one at a time and rediscovering the same defect fifty times.
Automatic issue detection closes that gap by reading conversations at scale for failure signatures — dead air, repeated loops, questions the agent could not answer, failed tool calls, callers asking for a human — and clustering recurring findings into named patterns. Fifty instances of the same wrong-hours answer become one row with a trend line and severity, not fifty reports. Each pattern carries its example calls as evidence and a lifecycle — open, dismissed, resolved — so triage has state and a re-emerging problem resurfaces instead of drowning in duplicates.
Clustering is where this layer earns its keep and where it deserves skepticism. Grouping is itself a judgment: a clusterer can merge two distinct root causes that produce similar symptoms, or split one cause across several patterns. Treat a pattern as a lead with evidence attached, not a diagnosis — the transcripts, not the cluster label, are the ground truth. Detected issues also mix sources usefully: machine-raised patterns sit alongside issues people file from individual calls, and both should flow into the same triage queue.
The limits of LLM-judged QA
Model-graded QA is what makes universal review affordable, and it inherits every weakness of the model doing the judging. Four limits matter in practice.
Correlated blind spots. A judge model can share failure modes with the agent it grades — the same plausible-sounding wrong answer that fooled the caller can fool the grader, particularly for factual errors and confident hallucinations. The mitigation is grounding: graders score better against explicit criteria and reference facts than against their own sense of correctness.
Transcript myopia. A grader that reads only text misses what the caller actually experienced: latency gaps, talked-over turns, mispronunciations, audio quality. A transcript can read perfectly while the call was unusable. Timing and audio evidence need their own checks — where the milliseconds go covers what to instrument.
Judgment drift. Model updates, prompt edits to the grading rubric, and distribution shifts in traffic all move grades without any change in agent quality. A grade trend is only meaningful while the judge holds still; version the grader like any other component, and expect to re-baseline when it changes.
Missing context. A grader unaware that an operator whispered an instruction mid-call will misjudge the agent's sudden change of course. QA needs the call's full internal history, not just the customer-facing transcript.
The answer to all four is the same: keep humans in the loop, at the points of leverage. Humans audit the grader against ground truth on calls it did not select. Humans confirm detected patterns before fixes ship. Humans own the ambiguous and sensitive calls. The model does coverage; people do calibration and judgment.
Close the loop: from finding to fix to regression test
QA that ends at a dashboard is a scoreboard. The loop closes when a confirmed finding changes the system and the change is verified:
- Trace the pattern to a cause — a prompt clause, a missing knowledge answer, a tool contract, an escalation rule. The evidence calls make this a reading exercise, not an archaeology project.
- Fix and test before deploying. Reproduce the failure in a simulation, apply the fix, and confirm the scenario passes — the ladder described in how to test voice agents.
- Freeze the failure as a permanent check. A real failing moment — the conversation context, the caller audio, the expected behavior — becomes a validation example replayed against every future draft, so the same regression cannot ship twice. This is regression testing built from production evidence rather than imagined cases.
- Watch the live numbers after release to confirm the pattern's trend actually bends — the handoff back to observability.
On ThunderPhone
ThunderPhone's call logs are AI-graded, and the Issues page (under Quality & Testing) groups problems detected across calls into patterns with severity, trend sparklines, affected-call counts, and an open/dismissed/resolved lifecycle; issues come from the platform's automatic call analysis and from people filing reports on individual calls. A pattern's detail panel links each affected call to its full transcript, and Fix with AI investigates the affected calls and drafts targeted prompt fixes shown as redline diffs for review before anything is applied. Any conversation in Call History can become a reusable test scenario, and validation sets freeze real agent turns — conversation context, caller audio, and edited ground truth — for replay against the current draft, with pass/warn/fail verdicts, regression counts against the previous run, and the latest result surfaced in the deploy dialog.
FAQ
Should AI-agent QA sample calls or grade all of them?
Grade all of them automatically, then spend human review where it compounds: auditing the grader on independently chosen calls, confirming detected patterns, and judging ambiguous or sensitive cases. Pure sampling leaves narrow failure modes running for weeks; pure automation leaves the grader unaudited.
Can an LLM grader replace human QA reviewers?
It replaces their coverage, not their judgment. Model grading makes reviewing every call affordable, but it shares blind spots with the agent, misses audio-level experience, and drifts when the judge changes. Humans stay in the loop for calibration, pattern confirmation, and high-stakes calls.
What belongs in a call QA rubric?
Two layers: factual assertions (disclosures made, correct tool calls, single mutations, no success claims after errors, permitted dispositions) graded pass/fail and never averaged away, and defined judgment criteria (clarity, concision, handoff quality) with each level described as observable behavior. Every failure should carry its evidence.
What is automatic issue detection, and can it be trusted?
It is machine review of every call for failure signatures, with recurring findings clustered into named, triageable patterns — see the glossary entry. Trust it as a lead generator with evidence attached: confirm patterns from the example calls before shipping fixes, because clustering can merge distinct causes or split one.