Skip to main content

Overview

The User Friction evaluator classifies whether the latest user message expresses friction with an assistant’s preceding behavior. It detects corrections, retries after an unsuccessful response, frustration, and challenges to unrequested or unexplained actions. Use it to monitor conversational assistants, identify turns worth reviewing, and measure whether product changes reduce expressed user friction.
no_friction means no friction was expressed. It does not prove that the user was satisfied; users often abandon conversations without saying why.

Supported Levels

Relevant span kinds: AGENT, CHAIN, and LLM spans that preserve multi-turn conversation history.

Input Requirements

Keep the target message separate from conversation. Include enough preceding history to distinguish retries and corrections from ordinary follow-ups. Render tool activity compactly and remove non-human payloads before evaluation.

Output Interpretation

Usage Examples

Using Input Mapping

Map your trace or dataset fields into the evaluator’s two-field contract. The conversation should end immediately before the target user message.
See Input Mapping for additional mapping options.

Viewing and Modifying the Prompt

The default prompt is maintained in the classification evaluator config. Adapt it when your application has domain-specific conversational conventions.

Configuration

For model and provider options, see Configuring the LLM.

Using with Phoenix

Benchmarks

On a 40-example public synthetic benchmark using gpt-4o-mini, the default prompt achieves 0.97 accuracy, 0.98 macro precision, 0.97 macro recall, and 0.97 macro F1. See user_friction.eval.ts for the categorized example set.

API Reference