功能-实时风险评估
字数
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.0 | 2025-10-08 | 初始版本,完成实时风险评估核心功能设计 | 哈雷酱 |