mcpField
C
crisis-detection-intervention-ai

crisis-detection-intervention-ai

github.com/curiositech其他257217 次安装2 天前更新
代码仓库

关于 crisis-detection-intervention-ai

为应用和支持平台提供心理健康危机检测与安全升级指导,强调人工审核、及时提供资源、保护敏感数据,并明确自动检测的局限。

主要功能

  1. 01心理健康专用信号检测
  2. 02人工审核与升级流程
  3. 03及时提供热线及资源
  4. 04敏感数据保护实践
  5. 05NLP 模型选择指导

适用场景

  1. 01标记日记内容供人工审核
  2. 02监测支持小组帖子中的风险信号
  3. 03协助治疗师分流平台消息
  4. 04设计咨询师升级处理流程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/curiositech/some_claude_skills --skill crisis-detection-intervention-ai

安装后在 Claude Code 中输入/crisis-detection-intervention-ai确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.claude-plugin/
plugin.json
references/
intervention-protocols.md
mental-health-nlp.md
crisis-resources.md
scripts/
model_evaluator.ts
crisis_detector.ts

详细介绍

危机检测与干预 AI

擅长检测心理健康危机并实施安全、合乎伦理的干预协议。

⚠️ 伦理免责声明

此技能用于协助检测危机,而非应对危机。

✅ 适用场景:

  • 标记令人担忧的内容,供人工审核
  • 为用户联系专业资源
  • 转介给危机咨询师
  • 提供即时热线信息

❌ 不能替代:

  • 持证治疗师
  • 紧急服务(911)
  • 医学诊断
  • 专业心理健康治疗

务必提供危机热线:全国自杀预防生命线:988


适用场景

✅ 适用于:

  • 心理健康日记应用
  • 康复社区平台
  • 支持小组监控
  • 在线治疗平台
  • 危机短信热线集成

❌ 不适用于:

  • 一般情感分析(使用标准工具)
  • 医学诊断(不具备资质)
  • 未经人工审核的自动回复
  • 替代专业危机咨询师

快速决策树

Detected concerning content?
├── Immediate danger? → Escalate to crisis counselor + show 988
├── Suicidal ideation? → Flag for review + show resources
├── Substance relapse? → Connect to sponsor + resources
├── Self-harm mention? → Gentle check-in + resources
└── General distress? → Supportive response + resources

技术选型

心理健康 NLP 模型(2024)
模型最适用于准确率延迟
MentalBERT心理健康文本89%50ms
GPT-4 + Few-shot危机检测92%200ms
RoBERTa-Mental抑郁检测87%40ms
Custom Fine-tuned BERT特定领域90%+60ms

时间线:

  • 2019:针对心理健康微调 BERT
  • 2021:MentalBERT 发布
  • 2023:GPT-4 展现出强大的零样本危机检测能力
  • 2024:针对特定状况的专用模型

常见反模式

反模式 1:使用通用情感分析

新手的想法:“负面情绪 = 危机”

问题:心理健康相关表达含义微妙,且依赖语境。

错误做法:

// ❌ Generic sentiment misses mental health signals
const sentiment = analyzeSentiment(text);

if (sentiment.score < -0.5) {
  alertCrisis();  // Too broad!
}

错误原因:“我累了”和“我厌倦了活着”含义不同,但情感倾向相同。

正确做法:

// ✅ Mental health-specific model
import { pipeline } from '@huggingface/transformers';

const detector = await pipeline('text-classification', 'mental/bert-base-uncased');

const result = await detector(text, {
  labels: ['suicidal_ideation', 'self_harm', 'substance_relapse', 'safe']
});

if (result[0].label === 'suicidal_ideation' && result[0].score > 0.8) {
  await escalateToCrisisCounselor({
    text,
    confidence: result[0].score,
    timestamp: Date.now()
  });

  // IMMEDIATELY show crisis resources
  showCrisisResources({
    phone: '988',
    text: 'Text "HELLO" to 741741',
    chat: 'https://988lifeline.org/chat'
  });
}

时间背景:

  • 2015:基于规则的关键词匹配
  • 2020:针对心理健康微调 BERT
  • 2024:具备语境理解能力的多标签模型

反模式 2:未经人工审核就自动回复

问题:AI 无法替代共情,还可能加重痛苦。

错误做法:

// ❌ AI auto-responds to crisis
if (isCrisis(text)) {
  await sendMessage(userId, "I'm concerned about you. Are you okay?");
}

错误原因:

  • 给人机械、否定感受的印象
  • 可能加重痛苦
  • 缺少人工判断

正确做法:

// ✅ Flag for human review, show resources
if (isCrisis(text)) {
  // 1. Flag for counselor review
  await flagForReview({
    userId,
    text,
    severity: 'high',
    detectedAt: Date.now(),
    requiresImmediate: true
  });

  // 2. Notify on-call counselor
  await notifyOnCallCounselor({
    userId,
    summary: 'Suicidal ideation detected',
    urgency: 'immediate'
  });

  // 3. Show resources (no AI message)
  await showInAppResources({
    type: 'crisis_support',
    resources: [
      { name: '988 Suicide & Crisis Lifeline', link: 'tel:988' },
      { name: 'Crisis Text Line', link: 'sms:741741' },
      { name: 'Chat Now', link: 'https://988lifeline.org/chat' }
    ]
  });

  // 4. DO NOT send automated "are you okay" message
}

人工审核流程:

AI Detection → Flag → On-call counselor notified → Human reaches out

反模式 3:不提供即时资源

问题:处于危机中的用户需要现在就获得帮助,而不是以后。

错误做法:

// ❌ Just flags, no immediate help
if (isCrisis(text)) {
  await logCrisisEvent(userId, text);
  // User left with no resources
}

正确做法:

// ✅ Immediate resources + escalation
if (isCrisis(text)) {
  // Show resources IMMEDIATELY (blocking modal)
  await showCrisisModal({
    title: 'Resources Available',
    resources: [
      {
        name: '988 Suicide & Crisis Lifeline',
        description: 'Free, confidential support 24/7',
        action: 'tel:988',
        type: 'phone'
      },
      {
        name: 'Crisis Text Line',
        description: 'Text support with trained counselor',
        action: 'sms:741741',
        message: 'HELLO',
        type: 'text'
      },
      {
        name: 'Chat with counselor',
        description: 'Online chat support',
        action: 'https://988lifeline.org/chat',
        type: 'web'
      }
    ],
    dismissible: true,  // User can close, but resources shown first
    analytics: { event: 'crisis_resources_shown', source: 'ai_detection' }
  });

  // Then flag for follow-up
  await flagForReview({ userId, text, severity: 'high' });
}

反模式 4:不安全地存储危机数据

问题:危机内容属于极其敏感的受保护健康信息(PHI)。

错误做法:

// ❌ Plain text storage
await db.logs.insert({
  userId: user.id,
  type: 'crisis',
  content: text,  // Stored in plain text!
  timestamp: Date.now()
});

错误原因:数据泄露会暴露用户最脆弱的时刻。

正确做法:

// ✅ Encrypted, access-logged, auto-deleted
import { encrypt, decrypt } from './encryption';

await db.crisisEvents.insert({
  id: generateId(),
  userId: hashUserId(user.id),  // Hash, not plain ID
  contentHash: hashContent(text),  // For deduplication only
  encryptedContent: encrypt(text, process.env.CRISIS_DATA_KEY),
  detectedAt: Date.now(),
  reviewedAt: null,
  reviewedBy: null,
  autoDeleteAt: Date.now() + (30 * 24 * 60 * 60 * 1000),  // 30 days
  accessLog: []
});

// Log all access
await logAccess({
  eventId: crisisEvent.id,
  accessedBy: counselorId,
  accessedAt: Date.now(),
  reason: 'Review for follow-up',
  ipAddress: hashedIp
});

// Auto-delete after retention period
schedule.daily(() => {
  db.crisisEvents.deleteMany({
    autoDeleteAt: { $lt: Date.now() }
  });
});

HIPAA 要求:

  • 静态和传输中的数据均须加密
  • 记录访问日志
  • 保留期限过后自动删除
  • 仅授予最低限度的必要访问权限

反模式 5:没有升级处理协议

问题:从检测到人工干预之间没有明确的处理路径。

错误做法:

// ❌ Flags crisis but no escalation process
if (isCrisis(text)) {
  await db.flags.insert({ userId, text, flaggedAt: Date.now() });
  // Now what? Who responds?
}

正确做法:

// ✅ Clear escalation protocol
enum CrisisSeverity {
  LOW = 'low',        // Distress, no immediate danger
  MEDIUM = 'medium',  // Self-harm thoughts, no plan
  HIGH = 'high',      // Suicidal ideation with plan
  IMMEDIATE = 'immediate'  // Imminent danger
}

async function escalateCrisis(detection: CrisisDetection): Promise<void> {
  const severity = assessSeverity(detection);

  switch (severity) {
    case CrisisSeverity.IMMEDIATE:
      // Notify on-call counselor (push notification)
      await notifyOnCall({
        userId: detection.userId,
        severity,
        requiresResponse: 'immediate',
        text: detection.text
      });

      // Send SMS to backup on-call if no response in 5 min
      setTimeout(async () => {
        if (!await hasResponded(detection.id)) {
          await notifyBackupOnCall(detection);
        }
      }, 5 * 60 * 1000);

      // Show 988 modal (blocking)
      await show988Modal(detection.userId);
      break;

    case CrisisSeverity.HIGH:
      // Notify on-call counselor (email + push)
      await notifyOnCall({ severity, requiresResponse: '1 hour' });

      // Show crisis resources
      await showCrisisResources(detection.userId);
      break;

    case CrisisSeverity.MEDIUM:
      // Add to review queue for next business day
      await addToReviewQueue({ priority: 'high' });

      // Suggest self-help resources
      await suggestResources(detection.userId, 'coping_strategies');
      break;

    case CrisisSeverity.LOW:
      // Add to review queue
      await addToReviewQueue({ priority: 'normal' });
      break;
  }

  // Always log for audit
  await logEscalation({
    detectionId: detection.id,
    severity,
    actions: ['notified_on_call', 'showed_resources'],
    timestamp: Date.now()
  });
}

实现模式

模式 1:多信号检测
interface CrisisSignal {
  type: 'suicidal_ideation' | 'self_harm' | 'substance_relapse' | 'severe_distress';
  confidence: number;
  evidence: string[];
}

async function detectCrisisSignals(text: string): Promise<CrisisSignal[]> {
  const signals: CrisisSignal[] = [];

  // Signal 1: NLP model
  const nlpResult = await mentalHealthNLP(text);
  if (nlpResult.score > 0.75) {
    signals.push({
      type: nlpResult.label,
      confidence: nlpResult.score,
      evidence: ['NLP model detection']
    });
  }

  // Signal 2: Keyword matching (backup)
  const keywords = detectKeywords(text);
  if (keywords.length > 0) {
    signals.push({
      type: 'suicidal_ideation',
      confidence: 0.6,
      evidence: keywords
    });
  }

  // Signal 3: Sentiment + context
  const sentiment = await sentimentAnalysis(text);
  const hasHopelessness = /no (hope|point|reason|future)/i.test(text);

  if (sentiment.score < -0.8 && hasHopelessness) {
    signals.push({
      type: 'severe_distress',
      confidence: 0.7,
      evidence: ['Extreme negative sentiment + hopelessness language']
    });
  }

  return signals;
}
模式 2:安全的关键词匹配
const CRISIS_KEYWORDS = {
  suicidal_ideation: [
    /\b(kill|end|take)\s+(my|own)\s+life\b/i,
    /\bsuicide\b/i,
    /\bdon'?t\s+want\s+to\s+(live|be here|exist)\b/i,
    /\bbetter off dead\b/i
  ],
  self_harm: [
    /\b(cut|cutting|hurt)\s+(myself|me)\b/i,
    /\bself[- ]harm\b/i
  ],
  substance_relapse: [
    /\b(relapsed|used|drank)\s+(again|today)\b/i,
    /\bback on\s+(drugs|alcohol)\b/i
  ]
};

function detectKeywords(text: string): string[] {
  const matches: string[] = [];

  for (const [type, patterns] of Object.entries(CRISIS_KEYWORDS)) {
    for (const pattern of patterns) {
      if (pattern.test(text)) {
        matches.push(type);
      }
    }
  }

  return [...new Set(matches)];  // Deduplicate
}
模式 3:GPT-4 Few-Shot 检测
import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

async function detectWithClaude(text: string): Promise<CrisisDetection> {
  const response = await client.messages.create({
    model: 'claude-3-5-sonnet-20241022',
    max_tokens: 200,
    messages: [{
      role: 'user',
      content: `You are a mental health crisis detection system. Analyze this text for crisis signals.

Text: "${text}"

Respond in JSON:
{
  "is_crisis": boolean,
  "severity": "none" | "low" | "medium" | "high" | "immediate",
  "signals": ["suicidal_ideation" | "self_harm" | "substance_relapse"],
  "confidence": 0.0-1.0,
  "reasoning": "brief explanation"
}

Examples:
- "I'm thinking about ending it all" → { "is_crisis": true, "severity": "high", "signals": ["suicidal_ideation"], "confidence": 0.95 }
- "I relapsed today, feeling ashamed" → { "is_crisis": true, "severity": "medium", "signals": ["substance_relapse"], "confidence": 0.9 }
- "Had a tough day at work" → { "is_crisis": false, "severity": "none", "signals": [], "confidence": 0.95 }`
    }]
  });

  const result = JSON.parse(response.content[0].text);
  return result;
}

生产环境检查清单

□ Mental health-specific NLP model (not generic sentiment)
□ Human review required before automated action
□ Crisis resources shown IMMEDIATELY (988, text line)
□ Clear escalation protocol (severity-based)
□ Encrypted storage of crisis content
□ Access logging for all crisis data access
□ Auto-deletion after retention period (30 days)
□ On-call counselor notification system
□ Backup notification if no response
□ False positive tracking (improve model)
□ Regular model evaluation with experts
□ Ethics review board approval

适用与不适用场景

场景是否适用?
面向康复者的日记应用✅ 是——监测复发情况
支持小组聊天✅ 是——标记令人担忧的帖子
治疗平台消息✅ 是——协助治疗师
公共社交媒体❌ 否——存在隐私问题
替代人工咨询师❌ 绝不——AI 只能协助,不能替代
医学诊断❌ 绝不——不具备资质

参考资料

  • /references/mental-health-nlp.md - 用于心理健康的 NLP 模型
  • /references/intervention-protocols.md - 基于证据的干预策略
  • /references/crisis-resources.md - 热线、短信热线和支持服务

脚本

  • scripts/crisis_detector.ts - 实时危机检测系统
  • scripts/model_evaluator.ts - 使用测试用例评估检测准确性

此技能适用于:危机检测 | 心理健康 NLP | 干预方案 | 自杀预防 | HIPAA 合规 | 伦理 AI

评论

支持 Markdown