frustration-detection
Reading user emotional state from text signals — caps, punctuation density, repetition, latency — and adapting before the user disengages.
适合你,如果需要在用户失去耐心前感知并调整对话策略
npx oh-my-skill add owl-listener/ai-design-skills/frustration-detectioncurl -fsSL https://oh-my-skill.com/install.sh | bash -s -- owl-listener/ai-design-skills/frustration-detectionnpx oh-my-skill verify owl-listener/ai-design-skills/frustration-detection怎么用
商店整理自技能原文 · 版本 f41b650 · 表述以原文为准Claude 会从你的文字中识别沮丧信号(如全大写、重复提问、感叹号密集、脏话等),累积判断后自动调整回应语气:放慢节奏、更温和、缩短安慰、直接解决问题,但不直接说“你沮丧”。
当你连续使用多个沮丧信号(如全大写加重复提问),或累积信号达到分数阈值(2分调语气,5分升级处理)时触发。注意:单次信号不触发,需累积。
技能原文 SKILL.md
Frustration Detection
Most AI products treat every user message as having the same emotional weight. They don't. "Cancel my subscription." and "PLEASE just cancel my subscription!!!" deserve different responses. Frustration detection is the perception skill that picks up the signal so the rest of the system can adapt.
This is the unnamed skill that sits behind tone calibration, escalation design, and graceful repair. Without it, those skills can't fire at the right moment.
Signals
Linguistic
- Capitalisation shifts: ALL CAPS, sudden "PLEASE", "URGENT"
- Punctuation density:
?!?!,...., multiple!! - Hedge-stripping: terse, demand-form ("just fix it", "stop")
- Repetition: same concept restated across turns
- Profanity (mild or strong)
Structural
- Decreasing turn latency (rapid-fire replies)
- Increasing turn latency past a threshold (walk-away)
- Re-asking the same question after a response
- Explicit human-handoff request ("speak to a person")
- Sudden topic switches
Lexical / affect
- Negative affect words ("useless", "annoying", "broken")
- Time-pressure words ("now", "immediately", "deadline")
- Doubt words ("really?", "are you sure", "is that right")
- Disengagement words ("never mind", "forget it", "whatever", "fine")
Detection should be cumulative across signals and turns, not single-feature.
Decision rules
- One signal is noise; two is a pattern. Don't act on a single CAPS message; act when CAPS plus repetition appear.
- If frustration is rising AND the AI has already attempted a fix once, escalate. Don't reach for a third rephrase.
- Urgency without frustration ≠ frustration. Speed up; don't change tone.
- Long latency after a long AI response is a walk-away, not deep reading. Save state, offer re-engagement, don't continue.
- Adapt silently. Don't name the emotion. "I sense you're frustrated" is patronising. Lower confidence, slow pace, raise warmth — but in the prose, not the meta-commentary.
Anti-patterns
- Emotion mirroring as performance: "I'm so sorry to hear that!" reads as scripted at scale.
- Asking the user to confirm their state: "Are you frustrated?" The user came to get help, not be analysed.
- One-shot detection: a single signal triggers a full empathy cascade. Detection must be cumulative.
- Detection without action: reading the signal and continuing the same playbook makes the detection performative.
- Over-empathy: two paragraphs of validation where one sentence and a fix would do. A frustrated user has no bandwidth for warmth.
When not to use this
- Transactional UIs (search box, code completion) — there's no conversational drift to read. Reach for
feedback-loopsinstead. - First-turn cold starts — detection is comparative; you need a baseline. Treat first-turn signals as descriptive, not diagnostic.
- Products with explicit feedback controls (thumbs down, "this isn't helping") — the user has the controls; don't bolt on inference.
See also
tone-calibration— what to do once you've detected the signal: lower confidence, slow pace, raise warmth.escalation-design— frustration is one of the documented escalation triggers; this skill is how you detect that trigger.feedback-loops— the cousin that handles ambient signals about output quality; this one handles ambient signals about user state.harm-anticipation— when frustration shades into distress (crisis markers, vulnerability), route through harm anticipation for elevated handling.
Design Artefacts
A frustration scorecard, scored cumulatively per session:
| Signal | Weight | | --- | --- | | ALL CAPS message | +2 | | Profanity | +3 | | Repeated question (3rd+ time) | +2 | | !! or ?? punctuation | +1 | | Explicit handoff request | +5 | | Disengagement word ("forget it") | +3 | | Long latency (>3 min after AI response) | +2 |
Threshold for escalation: 5. Threshold for tone shift: 2.
Worked example:
- Turn 1: "hey can you help me cancel my order" → 0
- Turn 2: "the cancel button isn't working" → 0 (problem statement, not frustration)
- Turn 3: "i've tried 3 times PLEASE" → +4 (CAPS, repetition, "please") → score 4 → tone shift
- Turn 4: "this is USELESS" → +2 (CAPS) +3 (negative affect) → score 9 → escalate
Other artefacts:
- Per-product baseline: average frustration score across the last 1000 sessions; alert on 2σ deviation
- Latency thresholds calibrated per product (chat support: 30 s engaged / 2 min disengaged)
- Test scenarios: happy path, slow rise, sudden spike, silent walk-away, recovery (score drops mid-session after fix)
Adapted from work on affective computing in conversational systems (Picard; Bickmore on emotional dialogue agents).