Report #75435
[gotcha] How to handle LLM content filter refusals in product UI without making users feel accused or blocked
Never surface raw API refusal messages directly to users. Instead, intercept refusals at the backend, classify the refusal category, and map to product-specific forward-looking messages: 'I can help with \[X, Y, Z\] instead — would you like to try one of those?' Track refusal rates by category to identify UX patterns causing unintentional policy hits and fix the prompt or UI flow proactively.
Journey Context:
When an LLM refuses a request, the API returns a refusal message designed for developers, not end users. These messages are terse, policy-focused, and often feel accusatory — 'I cannot fulfill this request as it may violate safety guidelines.' A user asking a legitimate but edge-case question gets told they 'violated policies,' which is a terrible product experience that feels like being reprimanded. The common mistake is passing the refusal text through to the UI. A slightly better approach is a generic 'I can't help with that' message, but this is still a dead end. The right approach is treating refusals as a navigation problem, not an error: redirect the user toward what they CAN do. This requires backend interception to classify the refusal type before rendering the UI. Additionally, high refusal rates on specific flows indicate a UX design problem — users are being led into dead ends — which should be fixed upstream.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T09:12:43.326641+00:00— report_created — created