Multi-Turn Conversation Evaluation¶
Multi-turn conversation evaluation pairs per-turn scoring with a trace-level resolution check to catch failures that compound across turns.
Two layers, different failures¶
A conversational agent can score 100% on per-turn brand alignment while resolving 40% of issues — every reply is polite and policy-compliant, but the conversation never reaches a fix. Per-turn scoring sees only local quality. It cannot tell whether the agent dropped a fact from turn 2 or kept the user in a polite loop. (Braintrust, 2026)
Trace-level scoring grades the conversation as one unit against a goal-completion criterion (typically binary: "was the issue resolved?"). It catches the across-turn failures per-turn scoring is blind to, but its verdict is coarse and hides which turn drifted. Both are needed. The diagnostic case is when they disagree.
| Per-turn | Trace-level | What it means |
|---|---|---|
| High | High | Both layers happy — good baseline |
| Low | High | Rough responses but issue resolved — fix tone, not flow |
| High | Low | "Sounds good, fixes nothing" — system prompt lacks resolution steps |
| Low | Low | Bot is broken — debug from the trace |
The high-per-turn + low-trace cell is the cheapest diagnostic — per-turn metrics alone would call it a success.
Three failure classes single-turn scoring misses¶
Conversations carry state across turns. Three failure classes only emerge in that setting:
- Context loss — the agent forgets a fact the user gave earlier (order number, account email), the kind of dropped detail transcript analysis surfaces. The per-turn response is locally coherent, then the next turn re-asks for the dropped fact.
- Intent drift — the conversation gradually leaves the original goal. Stateful drift detection (RNN over per-turn embeddings, DeepContext) reaches F1 0.84 versus 0.67 for stateless filters like Llama-Prompt-Guard-2 and Granite-Guardian — the gap is the multi-turn signal stateless eval cannot see. (DeepContext, 2026)
- Circular exchange — every turn is locally fine but the conversation makes no progress. The trace-level resolution check is the first metric to fail on a polite loop.
Drift-Bench extends the taxonomy to input faults that only surface across clarification turns — implicit intent, missing parameters, false presuppositions, ambiguous expressions — and shows agents that handle each turn in isolation drop substantially under iterative disambiguation. (Drift-Bench, 2026)
What to wire¶
Three pieces must be in place before trace-level scoring works:
- Span grouping — every turn logs as a child span under a shared trace ID. Without it, each turn is an unrelated root span and trace-level scoring has nothing to score. (Braintrust, 2026)
- A per-turn scorer — graded turn-by-turn (helpfulness, tone, policy, format). LLM-as-a-judge against three or four binary sub-criteria is the standard pattern.
- A trace-level scorer — graded against goal completion for the whole conversation: did the agent satisfy the user's stated goal by the end of the trace.
Online scoring rules then run both scorers asynchronously against new production traces — per-turn rules span-scoped, trace-level rules trace-scoped. Sampling rate is the cost lever: 100% at low volume, lower as traffic scales.
Why it works¶
Failures emerging from accumulated state must be scored where that state is observable. Per-turn scoring projects the conversation into independent slices, the projection in which context loss, intent drift, and circular exchange vanish. The trace is the smallest unit that exposes all three. This generalizes beyond chatbots: the 2025 multi-turn agent survey names five evaluation dimensions (task completion, response quality, user experience, memory and context retention, planning and tool integration) and only the first two are cleanly observable per-turn. (Survey, 2025)
When this backfires¶
Trace-level scoring is not free. Narrow scope when:
- The agent is one-shot, not conversational. A PR-fix or CI agent that takes a task and returns a patch has no across-turn failure surface. pass@k metrics and trajectory decomposition cover the relevant axes, so trace-level conversation scoring measures a dimension the workload lacks.
- The judge is below the precision floor. AgentRewardBench evaluated 12 LLM judges across 1,302 web-agent trajectories — none cleared 70% precision (GPT-4o 69.8%, Claude 3.7 Sonnet 68.8%, against 89.3% human agreement). Below that ceiling roughly one trace verdict in three is wrong. Pin to deterministic resolution checks (was a refund issued, a ticket closed) before defaulting to an LLM judge. (AgentRewardBench, 2025)
- Logs are not grouped. If production logs every LLM call as its own root span, retrofitting trace-level scoring needs re-instrumentation or timestamp reconstruction. The failure is silent — scoring runs against fragments and produces real-looking numbers.
- Volume × per-trace cost exceeds the violation cost. Every trace-level judge call is its own inference, so at tens of thousands of conversations a day the bill can exceed the value of the violations caught. Sampling cuts cost but moves the metric from continuous to spot-check.
The Trajectory-Opaque Evaluation Gap covers the conjugate safety case: outcome-only grading misses safety violations even in single-turn conversations. Pair the two — per-turn + trace-level for quality and resolution, outcome + trajectory auditing for safety.
Example¶
A customer-support chatbot resolves a return-and-refund request over four turns. Two scoring layers are wired against the trace:
Per-turn scorer (brand alignment, LLM-judge against helpfulness + tone + policy):
Turn 1: 50% (acknowledged frustration, no next steps)
Turn 2: 50% (asked for order number, did not state return policy)
Turn 3: 50% (offered exchange, did not address the discount-code request)
Turn 4: 100% (clear conditions for qualifying)
Average: 62.5%
Trace-level scorer (conversation quality, LLM-judge against binary resolution):
Conversation quality: 100%
Reason: agent obtained order number, acknowledged the discount-code request,
confirmed return status, and stated qualifying conditions. Issue
resolved.
The divergence is diagnostic. Per-turn at 62.5% would trigger a tone review. Trace at 100% says the issue was fixed despite rough edges. The two numbers point engineering in different directions — the per-turn scorer at the response-template prompt, the trace-level scorer at goal-completion logic. Acting on either alone produces the wrong fix. (Braintrust, 2026)
Key Takeaways¶
- Per-turn scoring evaluates each response in its local context; trace-level scoring evaluates the conversation against a goal-completion criterion. Both are required because they catch orthogonal failures.
- The high-per-turn + low-trace cell ("sounds good, fixes nothing") is the cheapest diagnostic — it points at the resolution gap that outcome grading targets and that per-turn metrics alone would call a success.
- Three failure classes only emerge across turns: context loss, intent drift, and circular exchange. Single-turn scoring is structurally blind to all three.
- Span grouping is the prerequisite. Without a shared
trace IDacross turns, the framework cannot tell which turns belong to one conversation. - Trace-level LLM judges have a measured precision ceiling near 70%; deterministic resolution checks (was a refund issued) are more reliable when they are expressible.
Related¶
- Trajectory-Opaque Evaluation Gap
- Trajectory Decomposition: Diagnose Where Coding Agents Fail
- pass@k and pass^k: Capability and Consistency Metrics
- Grade Agent Outcomes, Not Execution Paths
- Anti-Reward-Hacking: Rubrics That Resist Gaming
- Using the Agent to Analyze Its Own Evaluation Transcripts
- Stateful Agent Evals via State Snapshots and Transition Assertions