← Back to portfolio

CASE STUDY · 2026

Agentic Transcript-Analysis System

An agentic pipeline built with LangGraph and the OpenAI API that reads conversational bot transcripts, classifies intent, and decides for itself what it can resolve versus what needs a human — cutting required review from 8 hours to 1 hour of validation per batch.

8h → 1h
Human validation time / batch
80% → 88%
Intent-recognition accuracy
85% → 90%
Authentication success rate

The problem

Every conversational-bot transcript needed a human to read it, work out what the caller actually wanted, tag it, and flag anything that looked like an authentication gap or a recurring call driver. That's straightforward for one transcript. At volume, it was a full day of manual review per batch — and most of that day was spent on transcripts that were completely unambiguous, not the handful that actually needed judgment.

The earlier version of this system (described elsewhere on this site) used clustering plus LLM classification to speed up tagging, which already lifted intent accuracy from 80% to 88%. But it was still a linear script: run the model, hand every output to a human, repeat. The bottleneck wasn't the model's accuracy anymore — it was that every single output, confident or not, still needed a person.

Why an agent, not a longer prompt chain

A single well-engineered prompt can classify a transcript. What it can't easily do is decide when it doesn't know and change its own next step accordingly. That's the actual shape of this problem: ingest → classify → extract structured fields → branch — auto-resolve if confident, route to a human queue if not → merge everything back into one report. That's a graph with conditional edges and persistent state across steps, not a single call. LangGraph gave three things a plain chain doesn't:

Conditional routing — the confidence check after classification actually changes which node runs next, instead of every transcript following the same path. Per-node retry — a malformed structured-output response from one node retries in isolation instead of re-running the whole pipeline. Explicit state — the transcript, its classification, and its confidence score persist across nodes, so the aggregation step at the end has the full trail, not just a final answer.

Architecture

Ingest Pull batch of transcripts Classify Intent Clustering + LLM classification Extract & Structure Structured JSON output, schema-validated Confidence Router Decides: resolve now or hand off? high confidence low confidence Auto-resolve Tagged & closed, no human touch needed Human Validation Queued for the 1-hour review window Aggregate & Report Merged output feeds analytics dashboards

Graph structure — solid edges are direct transitions, the dashed node is the conditional branch point.

The tradeoff that mattered most

Engineering decision

The obvious next step after seeing early results was to push the confidence threshold down and auto-resolve almost everything — on paper, that gets you closer to zero human hours. It also meant the agent occasionally closed out genuinely ambiguous cases with confident-sounding wrong answers, which is worse than a slow manual process because nobody catches it. The fix was deliberately keeping the threshold conservative: the agent only auto-resolves the clearly unambiguous majority, and routes everything else — including anything borderline — to the human queue. That's why the result is 8 hours down to 1 hour, not to zero. The 1 hour is the part of the job that actually needs a person.

Stack

LangGraph OpenAI API (GPT-4) Python Structured JSON schemas Confidence thresholding

Want the fuller technical breakdown?