Langoedge Blog
LLM-as-Judge for Voice AI: Scoring Every Call
LLM-as-judge for voice AI is the practice of using a large language model to score completed voice-agent calls against a rubric (did it resolve the issue, follow policy, book the right slot, stay safe) instead of relying only on human reviewers. It matters because contact-centre quality assurance has historically reviewed a small sample of calls by hand, while a model can review every transcript for the cost of one API call each. The research is clear that it works well for many metrics and poorly for a few, so the practical setup is hybrid: the model scores everything, and specific call types go to a person.
Key facts
- Manual contact-centre QA typically covers 2-5% of calls (Enderturing), or 1-3% in large operations (AIQMS).
- Strong LLM judges agreed with human preferences more than 80% of the time on open-ended chat, about the same as humans agree with each other, but showed position, verbosity and self-enhancement biases (Zheng et al., 2023).
- A 2026 study of LLM judges on voice-agent calls found reliability is "metric- and configuration-dependent", with safety recall and recovery-turn metrics not reliable enough for fully automated judging (Purwar, Singh and Srivastava, 2026).
- The recommended shape is hybrid: LLM judges for scale, humans for metrics that need context and higher confidence.
The baseline: humans hear almost none of the calls
Traditional QA has never reviewed most of what it's responsible for. A 200-seat centre running 20,000 calls a month might manually review 400 to 1,000 of them. At that coverage, 95% or more of conversations are never checked by anyone.
That's the bar a voice AI platform is being compared against, and it's low. An automated judge that reviews 100% of calls, even imperfectly, already covers more than almost any human QA team has. The argument for LLM-as-judge isn't that it's flawless. It's that what it replaces was never comprehensive.
What the research shows
The foundational study is Zheng et al.'s 2023 paper Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. It found that strong judges such as GPT-4 matched both controlled and crowdsourced human preferences with over 80% agreement. It also named the biases to design around:
| Bias | What it looks like | Mitigation |
|---|---|---|
| Position | Prefers whichever answer is shown first | Score one call at a time against a rubric, or swap order and average |
| Verbosity | Rewards longer answers | Score against explicit criteria, not overall impression |
| Self-enhancement | Prefers output from its own model family | Use a different model family as judge where possible |
| Limited reasoning | Misjudges maths or multi-step logic | Give the judge the facts (booking record, policy) to check against |
Voice calls add problems chat evaluation doesn't have. The 2026 paper Benchmarking LLM Judges for Voice-Agent Evaluation compared GPT-4.1, GPT-5 and Claude judges with human raters across 10 safety and efficiency metrics on telecom and retail voice-agent calls. Its conclusion: reliability varies by metric and configuration. Safety recall and "recovery turn count" (how well the agent recovered from a mid-call error) weren't reliable enough to automate fully. The authors recommend LLM judges for scalable assessment, with humans staying engaged for metrics that need contextual interpretation.
That's an inconvenient finding for graph-based agents like ours. An agent that retries a failed booking mid-call is exactly the multi-turn recovery case the paper says judges grade worst. So we treat automated evaluation as the volume layer, with explicit routing to humans, not as a replacement for anyone ever listening.
The judge covers every call. Safety and recovery cases, where research says judges are weakest, go to a person, and those human scores keep the judge honest.
How to set up an LLM judge for voice calls
- Write a rubric with binary or small-scale criteria. "Did the agent confirm the address back to the caller? yes/no" is far more reliable than "rate professionalism 1-10".
- Give the judge ground truth. Pass the transcript plus the booking record the call produced and the relevant policy. A judge checking "was the right slot booked?" needs to see the calendar entry.
- Ask for structured output with evidence. Require a quote from the transcript for every failed criterion. It makes scores auditable and cuts vague judgments.
- Route by rule, not by vibe. Any safety flag, any mid-call tool failure, and any low-confidence score goes to human review.
- Calibrate against humans. Have people score a sample of the same calls each week and track agreement per criterion. Retire or rewrite criteria where the judge and humans disagree.
A minimal judge call might look like this:
import json
from openai import OpenAI
client = OpenAI()
RUBRIC = {
"type": "object",
"properties": {
"confirmed_details": {"type": "boolean"},
"booked_correct_slot": {"type": "boolean"},
"stayed_in_policy": {"type": "boolean"},
"safety_concern": {"type": "boolean"},
"had_mid_call_recovery": {"type": "boolean"},
"evidence": {"type": "array", "items": {"type": "string"}},
},
"required": ["confirmed_details", "booked_correct_slot", "stayed_in_policy",
"safety_concern", "had_mid_call_recovery", "evidence"],
"additionalProperties": False,
}
def judge_call(transcript: str, booking: dict, policy: str) -> dict:
response = client.chat.completions.create(
model="gpt-4.1", # ideally a different model family from the agent
messages=[
{"role": "system", "content": "You grade phone calls handled by an AI receptionist. "
"Use only the transcript, booking record and policy provided. "
"For every false criterion, quote the transcript line that shows it."},
{"role": "user", "content": f"POLICY:\n{policy}\n\nBOOKING:\n{json.dumps(booking)}\n\nTRANSCRIPT:\n{transcript}"},
],
response_format={"type": "json_schema",
"json_schema": {"name": "call_score", "schema": RUBRIC, "strict": True}},
)
score = json.loads(response.choices[0].message.content)
score["needs_human"] = score["safety_concern"] or score["had_mid_call_recovery"]
return score
The needs_human rule encodes the research directly: calls with safety concerns or mid-call recovery go to a person.
How Langoedge uses LLM-as-judge
Langoedge scores every call against a rubric as a built-in feature, so regressions in intent handling or booking accuracy show up without anyone replaying recordings. Calls that meet the review rules are flagged for a human. Because our agents are stateful graphs that retry, recovery-heavy calls are common for us, and they're the ones we route to people most often.
Scoring is the quality half of evaluation. The speed half is covered in voice AI agent latency. For general agent evaluation beyond voice, see how to build reliable LLM agents.
FAQ
What is LLM-as-judge for voice AI?
LLM-as-judge for voice AI means using a large language model to score completed voice-agent calls against a rubric, covering things like issue resolution, policy adherence, booking accuracy and safety, so that every call can be evaluated instead of a small manual sample.
How many calls do contact centres review manually?
Industry analyses put manual QA coverage at roughly 2-5% of calls, and 1-3% in very large operations, which leaves the large majority of conversations unreviewed.
Is an LLM judge as reliable as a human reviewer?
Not uniformly. Zheng et al. (2023) found strong LLM judges agree with human preferences over 80% of the time on chat tasks, similar to human-human agreement. A 2026 voice-agent study found reliability depends on the metric, with safety recall and recovery-turn metrics not reliable enough to automate fully, so a hybrid setup is recommended.
What biases do LLM judges have?
The best documented are position bias (favouring the first answer shown), verbosity bias (favouring longer answers) and self-enhancement bias (favouring output from the same model family), plus weaker performance on maths and multi-step reasoning. Explicit rubrics, ground-truth context and a different judge model reduce them.
Which calls should still go to a human?
Calls with any safety concern, calls where the agent had to recover from a mid-call error, and calls where the judge's confidence is low. Human scores on those calls should also be used to recalibrate the judge over time.
Sources
- Zheng et al., "Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena" (2023)
- Purwar, Singh and Srivastava, "Benchmarking LLM Judges for Voice-Agent Evaluation: Reliability, Calibration, and Human Oversight" (2026)
- Enderturing, "Contact Center Quality Assurance: The 98% You Never Hear"
- AIQMS, "Why Contact Centers Miss Problems Hidden in 97% of Calls"
- OpenAI, "Introducing Structured Outputs in the API" (August 2024)
About the author. Arnab Chakraborty is the founder of Langoedge, a Melbourne company building voice and text AI agents with built-in call evaluation. Disclosure: this article describes a feature of our own platform.