Skip to content

功能-实时风险评估

字数
3926 字
阅读时间
18 分钟

版本:v1.0.0 | 更新日期:2025-10-08 关联页面:心语精灵对话界面 | 关联云函数:askMessageManager、sosRelay

功能概述

实时风险评估功能是心语精灵对话系统的安全保障核心,通过多层次的风险识别模型,实时监控用户对话中的潜在风险信号,及时触发预警机制,为用户提供必要的安全保障和专业支持。

设计理念

  • 安全优先:以用户安全为首要原则,宁可误报也不漏报
  • 及时响应:实时风险监控,快速响应紧急情况
  • 分级处理:根据风险等级制定相应的响应策略
  • 专业支持:连接专业心理支持资源,提供有效帮助

风险评估体系

风险等级定义

0级 - 无风险 (No Risk)

特征

  • 日常情绪表达、正常心理状态
  • 无任何自伤或他伤意图
  • 积极或中性的表达内容

判断标准

  • 不包含任何风险关键词
  • 情绪状态正常或轻微负面
  • 有明确的支持系统和应对策略

响应策略

  • 正常对话流程
  • 提供常规心理支持
  • 无需特殊干预

1级 - 轻度风险 (Mild Risk)

特征

  • 偶发负面情绪表达
  • 轻微的压力或困扰
  • 有清晰的保护因素

判断标准

  • 包含轻微负面词汇但无具体伤害意图
  • 有明确的支持来源(家人、朋友等)
  • 表达寻求帮助的意愿

示例表达

  • "最近有点压力大"
  • "心情不太好,但会过去的"
  • "和朋友聊聊就好了"

响应策略

  • 提供情绪支持建议
  • 鼓励寻求社会支持
  • 监控对话发展

2级 - 中度风险 (Moderate Risk)

特征

  • 反复出现的负面情绪
  • 绝望、无助感表达
  • 存在部分保护因素

判断标准

  • 多次表达负面情绪但无具体计划
  • 提及绝望、无意义感但缺乏行动意图
  • 有一定的支持系统但利用不足

示例表达

  • "活着没什么意思"
  • "感觉做什么都没用"
  • "没有人理解我"

响应策略

  • 主动提供专业资源
  • 增加关注频率
  • 建议寻求专业帮助

3级 - 高度风险 (High Risk)

特征

  • 强烈的自伤意图
  • 有模糊的行动计划
  • 自我保护能力不足

判断标准

  • 明确表达自伤想法
  • 提及方法、时间或地点(模糊)
  • 缺乏有效的保护因素

示例表达

  • "我想结束这一切"
  • "有时候觉得死了算了"
  • "不知道还能撑多久"

响应策略

  • 立即启动危机干预流程
  • 提供紧急联系方式
  • 建议立即寻求专业帮助

4级 - 紧急危机 (Emergency Crisis)

特征

  • 明确的行动计划
  • 即将实施或正在实施
  • 严重威胁生命安全

判断标准

  • 详细描述自伤方法
  • 明确的时间计划(今晚、现在)
  • 有实施工具或条件

示例表达

  • "今晚我就要这样做"
  • "我已经准备好了"
  • "再见了,谢谢你们"

响应策略

  • 立即触发SOS紧急流程
  • 联系紧急联系人或专业机构
  • 持续关注直到安全确认

风险识别算法

多层次分析模型

用户输入消息

实时风险扫描
    ├── 关键词匹配分析
    ├── 语义理解分析
    ├── 情绪状态评估
    ├── 行为意图分析
    └── 历史行为模式

风险评估引擎
    ├── 风险等级计算
    ├── 紧急程度评估
    ├── 保护因素识别
    └── 干预策略制定

响应执行系统
    ├── 自动响应机制
    ├── 人工介入触发
    ├── 紧急联系激活
    └── 后续跟踪计划

风险关键词库

自伤相关关键词

javascript
const selfHarmKeywords = {
  // 紧急级 (4级)
  emergency: [
    '自杀', '死', '结束生命', '了结', '自杀了', '想死',
    '今晚死', '现在死', '准备好了', '计划', '方法'
  ],

  // 高危级 (3级)
  high: [
    '自残', '自伤', '伤害自己', '了断', '解脱', '放弃',
    '撑不下去', '受不了了', '崩溃', '绝望死了'
  ],

  // 中危级 (2级)
  moderate: [
    '没意思', '无意义', '活着累', '想消失', '不如死了',
    '多余', '负担', '累赘', '解脱了'
  ],

  // 轻危级 (1级)
  mild: [
    '难过', '痛苦', '绝望', '无助', '崩溃', '撑不住',
    '累了', '想放弃', '坚持不下去了'
  ]
};

风险行为关键词

javascript
const riskBehaviorKeywords = {
  planning: [
    '计划', '准备', '安排', '决定', '选择', '方法',
    '工具', '药', '刀', '楼顶', '时间', '地点'
  ],

  timeframe: [
    '今晚', '现在', '马上', '立即', '就', '已', '正在',
    '明天', '下周', '近期', '很快'
  ],

  finality: [
    '再见', '永别', '拜拜', '结束了', '最后', '再也',
    '不会再', '再也不', '最后一次', '告别'
  ]
};

保护因素关键词

javascript
const protectiveFactorKeywords = {
  social_support: [
    '家人', '朋友', '老师', '同学', '支持', '帮助',
    '陪伴', '理解', '关心', '在乎'
  ],

  future_orientation: [
    '明天', '未来', '希望', '计划', '梦想', '目标',
    '期待', '想见', '想做', '还来得及'
  ],

  help_seeking: [
    '求助', '帮助', '支持', '咨询', '心理医生', '专业',
    '打电话', '联系', '告诉', '分享'
  ]
};

风险评分算法

javascript
class RiskAssessmentEngine {
  constructor() {
    this.riskKeywords = this.loadRiskKeywords();
    this.protectiveFactors = this.loadProtectiveFactors();
    this.weightConfig = this.loadWeightConfig();
  }

  assessRisk(message, context = {}) {
    // 1. 文本预处理
    const processedMessage = this.preprocessMessage(message);

    // 2. 关键词匹配
    const keywordMatches = this.matchKeywords(processedMessage);

    // 3. 语义分析
    const semanticScore = this.analyzeSemantics(processedMessage);

    // 4. 上下文分析
    const contextScore = this.analyzeContext(context);

    // 5. 保护因素评估
    const protectiveScore = this.assessProtectiveFactors(processedMessage);

    // 6. 综合风险计算
    const riskScore = this.calculateRiskScore(
      keywordMatches,
      semanticScore,
      contextScore,
      protectiveScore
    );

    // 7. 风险等级确定
    const riskLevel = this.determineRiskLevel(riskScore);

    return {
      risk_level: riskLevel,
      risk_score: riskScore,
      confidence: this.calculateConfidence(keywordMatches),
      detected_signals: keywordMatches,
      protective_factors: protectiveScore,
      recommendations: this.generateRecommendations(riskLevel)
    };
  }

  calculateRiskScore(keywords, semantics, context, protective) {
    let score = 0;

    // 关键词风险评分 (0-40分)
    const keywordScore = this.calculateKeywordScore(keywords);
    score += keywordScore * this.weightConfig.keywords;

    // 语义风险评分 (0-30分)
    score += semantics * this.weightConfig.semantics;

    // 上下文风险评分 (0-20分)
    score += context * this.weightConfig.context;

    // 保护因素调整 (-10到0分)
    score -= protective * this.weightConfig.protective;

    return Math.max(0, Math.min(100, score));
  }

  determineRiskLevel(score) {
    if (score >= 80) return 4;  // 紧急危机
    if (score >= 60) return 3;  // 高度风险
    if (score >= 40) return 2;  // 中度风险
    if (score >= 20) return 1;  // 轻度风险
    return 0;  // 无风险
  }

  analyzeTrend(currentRisk, historicalRisks) {
    if (historicalRisks.length < 2) return 'stable';

    const recentRisks = historicalRisks.slice(-5);
    const trend = this.calculateTrend(recentRisks);

    if (trend > 0.2) return 'increasing';
    if (trend < -0.2) return 'decreasing';
    return 'stable';
  }
}

响应机制设计

自动响应策略

0级响应 - 常规支持

javascript
const level0Response = {
  message: "我在这里倾听你的心声,有什么想要分享的吗?",
  actions: [],
  followUp: {
    timing: 'normal',
    frequency: 'standard'
  }
};

1级响应 - 增强关注

javascript
const level1Response = {
  message: "听起来你最近遇到了一些挑战。我在这里支持你,也建议你可以和信任的朋友或家人聊聊。",
  actions: [
    '提供情绪调节建议',
    '建议寻求社会支持',
    '增加关注频率'
  ],
  followUp: {
    timing: 'enhanced',
    frequency: 'increased'
  }
};

2级响应 - 主动干预

javascript
const level2Response = {
  message: "我理解你现在的心情可能很沉重。虽然情况看起来困难,但请记住你并不孤单。有一些专业资源可以为你提供支持。",
  actions: [
    '提供专业心理资源',
    '建议立即寻求帮助',
    '启动关注机制'
  ],
  resources: [
    {
      name: '心理援助热线',
      phone: '400-161-9995',
      description: '24小时专业心理支持'
    },
    {
      name: '在线心理咨询',
      url: 'https://www.xinli001.com',
      description: '专业心理咨询师在线服务'
    }
  ],
  followUp: {
    timing: 'immediate',
    frequency: 'continuous'
  }
};

3级响应 - 紧急干预

javascript
const level3Response = {
  message: "我非常关心你的安全。你现在的感受需要立即得到专业的关注。请不要独自承受这一切。",
  actions: [
    '立即提供紧急联系方式',
    '建议联系信任的人',
    '启动危机干预流程'
  ],
  emergencyContacts: [
    {
      name: '全国心理援助热线',
      phone: '400-161-9995',
      available: '24小时'
    },
    {
      name: '北京心理危机干预中心',
      phone: '010-82951332',
      available: '24小时'
    }
  ],
  immediateActions: [
    '保持对话连接',
    '评估即时安全性',
    '准备升级到4级响应'
  ]
};

4级响应 - SOS紧急流程

javascript
const level4Response = {
  message: "我现在非常担心你的安全。请不要挂断,我立即为你联系帮助。",
  actions: [
    '立即触发SOS流程',
    '联系紧急服务',
    '通知紧急联系人'
  ],
  sosProtocol: {
    step1: '保持用户在线',
    step2: '收集位置信息',
    step3: '联系专业机构',
    step4: '通知紧急联系人',
    step5: '持续跟踪确认'
  },
  emergencyServices: [
    {
      name: '110',
      type: 'police',
      description: '紧急警务服务'
    },
    {
      name: '120',
      type: 'medical',
      description: '医疗急救服务'
    }
  ]
};

危机干预流程

SOS触发机制

javascript
class SOSProtocol {
  constructor() {
    this.emergencyContacts = [];
    this.professionalServices = [];
    this.isActive = false;
  }

  async triggerSOS(userId, riskAssessment) {
    this.isActive = true;

    try {
      // 第一步:保持用户在线
      await this.keepUserOnline(userId);

      // 第二步:评估即时安全性
      const safetyStatus = await this.assessImmediateSafety(userId);

      // 第三步:联系专业机构
      if (safetyStatus.requiresImmediateHelp) {
        await this.contactProfessionalServices(userId);
      }

      // 第四步:通知紧急联系人
      await this.notifyEmergencyContacts(userId);

      // 第五步:持续跟踪确认
      await this.initiateContinuousMonitoring(userId);

    } catch (error) {
      console.error('SOS protocol error:', error);
      // 备用响应机制
      await this.activateBackupProtocol(userId);
    }
  }

  async keepUserOnline(userId) {
    // 发送保持连接的消息
    // 启动定时检查机制
    // 准备人工介入
  }

  async assessImmediateSafety(userId) {
    // 评估用户当前安全状态
    // 确定是否需要立即介入
    // 收集关键安全信息
  }

  async contactProfessionalServices(userId) {
    // 联系心理危机干预中心
    // 通知相关医疗机构
    // 启动紧急响应程序
  }

  async notifyEmergencyContacts(userId) {
    // 联系预设的紧急联系人
    // 通知学校心理中心
    // 联系当地心理健康服务机构
  }
}

界面展示设计

风险状态指示器

0级 - 正常状态

┌─────────────────────────────────┐
│ 😊 状态良好                      │
│ 继续保持积极心态                 │
└─────────────────────────────────┘

1级 - 轻度关注

┌─────────────────────────────────┐
│ 😐 值得关注                      │
│ 建议与朋友聊聊,寻求支持          │
│ 💡 获取建议 →                    │
└─────────────────────────────────┘

2级 - 中度风险

┌─────────────────────────────────┐
│ 😟 需要关怀                      │
│ 建议寻求专业心理支持             │
│ 📞 心理热线:400-161-9995       │
│ 🏥 专业帮助 →                    │
└─────────────────────────────────┘

3级 - 高度风险

┌─────────────────────────────────┐
│ 😨 紧急关注                      │
│ 立即寻求专业帮助                 │
│ 🚨 紧急热线:400-161-9995       │
│ 🆘 立即联系帮助                  │
│ 📍 分享位置 →                    │
└─────────────────────────────────┘

4级 - 危机状态

┌─────────────────────────────────┐
│ 🆘 危机干预                      │
│ 正在为你联系紧急帮助             │
│ 📞 保持通话中...                 │
│ 🚑 已联系专业机构                │
│ 👥 已通知紧急联系人              │
│ ⏱️ 请保持联系,帮助在路上         │
└─────────────────────────────────┘

紧急支持面板

快速联系功能

javascript
const EmergencySupportPanel = {
  quickContacts: [
    {
      name: '心理援助热线',
      phone: '400-161-9995',
      icon: '📞',
      available: '24小时'
    },
    {
      name: '危机干预热线',
      phone: '010-82951332',
      icon: '🆘',
      available: '24小时'
    },
    {
      name: '紧急服务',
      phone: '110',
      icon: '🚨',
      available: '24小时'
    }
  ],

  quickActions: [
    {
      label: '联系信任的人',
      action: 'contact_trusted_person',
      icon: '👥'
    },
    {
      label: '分享我的位置',
      action: 'share_location',
      icon: '📍'
    },
    {
      label: '发送求助信息',
      action: 'send_help_message',
      icon: '💬'
    }
  ],

  calmingResources: [
    {
      title: '呼吸练习',
      duration: '5分钟',
      action: 'start_breathing_exercise'
    },
    {
      title: '正念冥想',
      duration: '10分钟',
      action: 'start_mindfulness'
    },
    {
      title: '安全计划',
      action: 'create_safety_plan'
    }
  ]
};

数据安全与隐私

敏感信息处理

javascript
class SecureRiskDataHandler {
  constructor() {
    this.encryptionKey = this.loadEncryptionKey();
    this.accessControl = new AccessControl();
  }

  async storeRiskAssessment(userId, assessment) {
    // 加密敏感数据
    const encryptedData = await this.encryptData(assessment);

    // 访问控制记录
    const accessRecord = {
      user_id: userId,
      data_type: 'risk_assessment',
      access_level: 'high_security',
      timestamp: new Date().toISOString(),
      purpose: 'safety_monitoring'
    };

    // 存储加密数据
    await this.secureStorage.store(encryptedData, accessRecord);

    // 触发安全监控(如果需要)
    if (assessment.risk_level >= 3) {
      await this.triggerSafetyProtocol(userId, assessment);
    }
  }

  async triggerSafetyProtocol(userId, assessment) {
    // 验证触发条件
    const isValidTrigger = await this.validateSafetyTrigger(userId, assessment);

    if (isValidTrigger) {
      // 启动安全协议
      await this.safetyProtocol.activate(userId, assessment);

      // 记录安全事件
      await this.logSafetyEvent(userId, assessment);

      // 通知相关人员(需要授权)
      await this.notifyAuthorizedPersonnel(userId, assessment);
    }
  }
}

合规要求

  • 数据最小化:仅收集必要的安全相关信息
  • 访问控制:严格的权限管理和访问记录
  • 数据加密:敏感数据全程加密存储和传输
  • 审计追踪:完整的数据访问和操作日志
  • 用户授权:明确的用户授权和知情同意

性能监控

关键指标

javascript
const riskAssessmentMetrics = {
  // 响应时间指标
  responseTime: {
    target: '< 100ms',
    current: 85,
    trend: 'stable'
  },

  // 准确性指标
  accuracy: {
    truePositiveRate: 0.95,
    falsePositiveRate: 0.08,
    overallAccuracy: 0.92
  },

  // 覆盖率指标
  coverage: {
    messageAnalysisRate: 0.98,
    riskDetectionRate: 0.96,
    interventionSuccessRate: 0.89
  },

  // 可用性指标
  availability: {
    uptime: 0.999,
    errorRate: 0.001,
    responseSuccessRate: 0.998
  }
};

持续监控

javascript
class RiskAssessmentMonitor {
  constructor() {
    this.metrics = new MetricsCollector();
    this.alertSystem = new AlertSystem();
  }

  async monitorPerformance() {
    const metrics = await this.collectMetrics();

    // 检查响应时间
    if (metrics.responseTime > 100) {
      await this.alertSystem.trigger('slow_response', metrics);
    }

    // 检查准确性
    if (metrics.accuracy < 0.85) {
      await this.alertSystem.trigger('accuracy_degradation', metrics);
    }

    // 检查可用性
    if (metrics.availability < 0.99) {
      await this.alertSystem.trigger('availability_issue', metrics);
    }
  }
}

测试验证

风险识别测试

javascript
describe('RiskAssessmentEngine', () => {
  test('should correctly identify emergency risk level', () => {
    const message = "今晚我准备结束这一切";
    const assessment = engine.assessRisk(message);

    expect(assessment.risk_level).toBe(4);
    expect(assessment.detected_signals).toContain('emergency');
  });

  test('should identify protective factors', () => {
    const message = "虽然很难过,但我会联系朋友的";
    const assessment = engine.assessRisk(message);

    expect(assessment.protective_factors.social_support).toBeGreaterThan(0.5);
  });

  test('should provide appropriate response recommendations', () => {
    const assessment = { risk_level: 3 };
    const recommendations = engine.generateRecommendations(assessment);

    expect(recommendations).toContain('immediate_professional_help');
  });
});

响应机制测试

javascript
describe('SOSProtocol', () => {
  test('should trigger emergency protocol for level 4 risk', async () => {
    const mockUserId = 'test_user_123';
    const riskAssessment = { risk_level: 4, user_id: mockUserId };

    await sosProtocol.triggerSOS(mockUserId, riskAssessment);

    expect(sosProtocol.isActive).toBe(true);
    expect(emergencyService.contactCount).toBeGreaterThan(0);
  });

  test('should maintain user connection during crisis', async () => {
    const mockUserId = 'test_user_456';

    await sosProtocol.keepUserOnline(mockUserId);

    expect(connectionMonitor.isActive(mockUserId)).toBe(true);
    expect(connectionMonitor.checkInterval).toBeLessThan(5000); // 5秒内检查
  });
});

相关文档

版本记录

版本日期变更内容作者
v1.0.02025-10-08初始版本,完成实时风险评估核心功能设计哈雷酱

贡献者

The avatar of contributor named as Cai Hongyu Cai Hongyu

文件历史

撰写