返回博客列表
最佳实践2026-08-0730 分钟阅读

词表校准与误报治理:从实测回放看召回率与误报率的平衡术

从 12 条真实消息的"打脸回放",看关键词表如何从"想当然"走向"数据驱动"

WeClaw_79|词表校准与误报治理:从实测回放看召回率与误报率的平衡术

系列文章第 79 篇 - 从 12 条真实消息的"打脸回放",看关键词表如何从"想当然"走向"数据驱动"


📚 专栏信息

《从零到一构建跨平台 AI 助手:WeClaw 实战指南》专栏

本文是模块八【心理健康与危机守护】第 6 篇。前几篇(74-78)讲了分层架构与判定逻辑, 本篇聚焦一个更"接地气"的工程问题:关键词表怎么校准? 初版词表是"拍脑袋"写的——直到我们用 12 条真实消息回放,发现召回率惨不忍睹; 英文词表差点把"挂电话会议"误判为自杀意图。本文完整复盘从"想当然"到"数据驱动"的校准过程。

🧠 模块八【心理健康与危机守护】(9 篇): 74 分层总览 / 75 L0 关键词闸门 / 76 L1-L2 双重确认 / 77 RiskLevel 全序 Bug / 78 危机资源零编造红线 / 79 词表校准与误报治理 / 80 L4 监护人告警 / 81 伦理边界 / 82 校准测试框架


👨‍💻 作者与项目

作者简介:翁勇刚 WENG YONGGANG 新概念龙虾-WeClaw 开发团队负责人,一群专注于跨平台 AI 应用的实践者 理念:"再复杂的技术,也能用代码讲清楚"

⚠️ 本文涉及心理危机话题。如果你或身边的人正处于危机中,请立即联系文末经核验资源。


📝 摘要

本文结构概览: 本文完整复盘 L0 关键词表的校准过程:初版词表"拍脑袋"写了 30 个词, 用 12 条真实消息回放后发现召回率仅 8%(12 条只命中 1 条); 英文词表差点把 "jump off the call"(挂电话会议)误判为自杀意图。 然后讲解 WeClaw 如何用"三类词表 + 排除表区间抵消 + 语料集回归"建立数据驱动的校准闭环: 每次误报/漏报都变成永久测试用例,词表变更必须通过语料集回归才能合入。

背景:关键词表是 L0 闸门的"灵魂"——表不好,后面 L1-L4 再精密也白搭。

核心问题:如何在"高召回"(不漏报)和"低误报"(不骚扰)之间找到平衡?

解决方案:三类分级词表 + NEGATIVE_LOOKALIKE 区间抵消 + 双语料集回归(FP≥50 / Recall≥20)。

关键成果

  • 召回率从 8% → 100%(语料集离线验收)
  • 误报语料 critical 命中 = 0(live 验收)
  • 每次误报/漏报变成永久回归用例("钉住"机制)
  • 英文词表明确排除 "die"/"killing me"/"dead" 等高误报词

适合读者:做 NLP 关键词系统、内容安全、风控规则引擎的开发者

阅读时长:约 14 分钟

关键词词表校准召回率误报率区间抵消语料集回归L0闸门数据驱动


一、实测打脸:12 条消息只命中 1 条

1.1 回放实验设计

v9.0.0 开发期间,我们从真实对话日志中脱敏抽取了 12 条"应该触发升级"的消息, 用初版词表跑 L0 闸门:

# 回放脚本(简化)
test_messages = [
    "我真的撑不下去了,每天都是煎熬",        # ← 命中("撑不下去")
    "想从楼上飞下去,一了百了",              # ← 漏报!
    "我不想麻烦任何人了",                   # ← 漏报!
    "把东西都送给你们吧,我用不着了",         # ← 漏报!
    "突然想通了,都安排好了",               # ← 漏报!
    "I just want to disappear forever",    # ← 漏报!(英文表还没写)
    "没有我大家会更好",                    # ← 漏报!
    "写好了遗书,该交代的都交代了",          # ← 漏报!
    "想去一个很远的地方,再也不回来",         # ← 漏报!
    "我是大家的负担,不想再拖累了",          # ← 漏报!
    "I'm better off dead, no point living", # ← 漏报!
    "终于想通了,明天就去",                 # ← 漏报!
]
# 结果:12 条中仅 1 条命中("撑不下去"),召回率 = 8.3%

1.2 为什么初版词表这么"瞎"?

初版词表只有"直白类":

# 初版(只有这些)
ESCALATION_KEYWORDS = ("不想活", "想死", "自杀", "撑不下去", "结束生命", ...)

问题诊断

漏报原因示例占比
隐晦表达未覆盖"突然想通了"/"把东西都送给你们"50%
变体/子串不匹配"不想麻烦任何人" ≠ "不想再麻烦大家"25%
英文词表缺失"want to disappear forever"17%
坠楼/方式类缺失"想从楼上飞下去"8%

核心教训:危机表达绝大多数是隐晦的。 真正说"我想自杀"的人是少数;更多人会说"突然想通了"、"不想再麻烦大家"、"把东西都送给你们"。 这些"告别式语言"才是词表的主力。

📚 学术支撑:Thomas 等(2025)在 AI 心理危机检测综述中指出, 隐晦表达(indirect expressions)占危机话语的 60-70%, 仅靠"直白关键词"的系统召回率通常不超过 30%。 Holmes 等(2025)进一步强调"行为信号"(安排后事、赠送财物、突然平静) 是比"言语信号"更强的预测因子。


二、核心概念解析 —— 三类词表 + 排除表区间抵消

2.1 词表分级架构

┌─────────────────────────────────────────────────────────────────┐
│                    L0 关键词表分级架构                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─── ESCALATION(升级词)──────────────────────────────────┐   │
│  │                                                          │   │
│  │  DIRECT(直白类):不想活/想死/自杀/跳楼/飞下去...        │   │
│  │  → 命中即升级,无需上下文                                │   │
│  │                                                          │   │
│  │  IMPLICIT(隐晦类):永别/遗书/不想再麻烦大家/突然想通... │   │
│  │  → 告别式语言、安排后事、情绪平静反转                     │   │
│  │                                                          │   │
│  │  EN(英文):want to die/kill myself/suicide...           │   │
│  │  → casefold 后子串匹配;明确排除高误报词                  │   │
│  │                                                          │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
│  ┌─── MOOD(情绪词)────────────────────────────────────────┐   │
│  │  negative:累/烦/难过/焦虑/郁闷...                        │   │
│  │  stressed:忙死了/受不了/崩溃/焦头烂额...                  │   │
│  │  tired:困/疲惫/没精神/精力不足...                         │   │
│  │  → 单独命中不升级;需配合连续负向或排除表                  │   │
│  │  → positive 组不参与升级判定                              │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
│  ┌─── NEGATIVE_LOOKALIKE(排除表)──────────────────────────┐   │
│  │  "麻烦" → 抵消 MOOD 词 "烦"                              │   │
│  │  "困难/困境/困惑/困扰" → 抵消 MOOD 词 "困"               │   │
│  │  "积累/累计/累积" → 抵消 MOOD 词 "累"                    │   │
│  │  "系统崩溃/程序崩溃/服务器崩溃" → 抵消 MOOD 词 "崩溃"    │   │
│  │  → 只否决 MOOD 命中,不影响 ESCALATION                    │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
│  ┌─── HELP_REQUEST(显式求助)──────────────────────────────┐   │
│  │  救救我/帮帮我/我需要帮助/我快撑不住了...                  │   │
│  │  → 不受 MIN_TEXT_LEN=8 限制(短文本也触发)              │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2.2 什么是"区间抵消"?

问题场景

用户说:"麻烦你帮我查一下这个 bug"
MOOD 词 "烦" 被命中 → 但这是"麻烦"里的"烦",不是情绪表达!

区间抵消机制

# 1. 找到 MOOD 词命中区间
mood_hits = [(2, 3, "烦")]  # "烦" 在位置 2-3

# 2. 找到排除表命中区间
lookalike_spans = [(0, 4)]  # "麻烦" 在位置 0-4(包含 "烦")

# 3. 判断:MOOD 命中是否被排除表区间完整包含?
_contained_in_any(2, 3, [(0, 4)])  # → True → 抵消!不升级

关键设计

  • 只否决 MOOD 命中:ESCALATION 高危词("想死"/"自杀")不受排除表影响。
  • 按区间包含关系:不是简单的"文本包含排除词就跳过",而是精确到字符位置。
  • ESCALATION 独立评估:即使文本中有"麻烦",只要同时有"想死",照样升级。

2.3 英文词表的"过宽陷阱"

反面教材

# ❌ 如果英文词表这样写:
ESCALATION_KEYWORDS_EN = ("die", "dead", "kill", "jump off", ...)

# 灾难:
"I'm dying to try this new restaurant"  → 命中 "die" → 误报!
"This bug is killing me"                → 命中 "kill" → 误报!
"Let me jump off the call"              → 命中 "jump off" → 误报!
"The dead battery needs replacement"    → 命中 "dead" → 误报!

WeClaw 的做法

# ✅ 只收明确短语,不收单词
ESCALATION_KEYWORDS_EN: tuple[str, ...] = (
    "want to die", "wanna die", "kill myself", "end my life", "end it all",
    "suicide", "suicidal",
    "don't want to live", "do not want to live",
    "better off dead", "wish i was dead",
    "self-harm", "hurt myself", "cut myself",
    "tired of living", "can't go on",
    "want to disappear", "disappear forever",
    "better off without me",
    "goodbye forever", "final goodbye", "say my goodbyes",
)
# 注释明确写:不收 "die"/"killing me"/"dead" 类高误报词

原则:英文词表只收多词短语(≥2 词),不收单词。 "want to die" 几乎不可能是比喻;"die" 则到处都是比喻。


三、实战代码详解 —— 从漏报到校准

3.1 校准后的完整词表

# src/core/mental_health/analyzer.py

#: 直白类升级词
ESCALATION_KEYWORDS_DIRECT: tuple[str, ...] = (
    "不想活", "活不下去", "活下去没意思", "活着没意思", "活着没意义",
    "人生没有意思", "人生没有意义", "撑不下去", "熬不下去",
    "想死", "想自杀", "自杀", "轻生", "结束生命", "结束自己",
    "结束这一切", "结束一切", "伤害自己", "自残", "自伤", "割腕",
    "想消失", "消失就好了", "从这个世界消失", "看不到希望", "绝望",
    # —— 坠楼/自伤方式类(2026-08-02 实测缺口补充)——
    "想死的心", "想跳楼", "跳下去", "飞下去", "一跃而下", "纵身一跃",
    "跳河", "跳桥", "卧轨", "上吊", "吞药", "喝农药", "烧炭",
)

#: 隐晦类升级词(告别式语言、安排后事、情绪平静反转)
ESCALATION_KEYWORDS_IMPLICIT: tuple[str, ...] = (
    "永别", "和大家告别", "来世再见", "替我照顾好",
    "交代后事", "安排后事", "写好了遗书", "遗书",
    "把东西都送给", "我的东西都给你们",
    "不想再麻烦大家", "不想再拖累", "我是累赘", "是大家的负担",
    "没有我大家会更好", "没有我会更好",
    "想去很远的地方", "去一个很远的地方", "离开这里再也不回来",
    "突然想通了", "终于想通了", "都安排好了",
    # —— 变体补充(子串不匹配漏报修复)——
    "不想麻烦任何人", "不想再麻烦任何人", "不想拖累任何人",
    "不想连累", "不想成为负担", "不想成为别人的负担",
)

3.2 L0 闸门的求值顺序

# src/core/mental_health/analyzer.py — L0Gate.evaluate()
def evaluate(self, text: str) -> L0Decision:
    text = (text or "").strip()
    if not text:
        return L0Decision(False, suppress_reason="too_short")

    # ① LRU 去重(同一文本不重复升级)
    digest = self._hmac_fn(text)
    if digest in self._lru:
        return L0Decision(False, suppress_reason="lru_dup")

    # ② 日限额 / 预算
    if self._snapshot.l1_calls_for(today_str) >= self._settings.l1_daily_limit:
        return L0Decision(False, suppress_reason="daily_cap")
    if self._budget_exceeded_fn():
        return L0Decision(False, suppress_reason="budget")

    # ③ 显式求助(不受 8 字限制)
    help_hits = _find_phrases(text, HELP_REQUEST_KEYWORDS)
    if help_hits:
        return L0Decision(True, reason="help_request", matched=...)

    # ④ 关键词(MOOD 经排除表区间抵消;ESCALATION 独立评估)
    if len(text) >= MIN_TEXT_LEN:
        text_cf = text.casefold()
        mood_hits = _find_mood_hits(text)
        lookalike_spans = [(s, e) for s, e, _ in _find_phrases(text, NEGATIVE_LOOKALIKE)]
        surviving = [
            (s, e, p) for s, e, p in mood_hits
            if not _contained_in_any(s, e, lookalike_spans)  # 区间抵消
        ]
        esc_hits = _find_phrases(text_cf, DIRECT + IMPLICIT + EN)
        if surviving or esc_hits:
            return L0Decision(True, reason="keyword", matched=...)

    # ⑤ 连续负向(节流型)
    if len(text) >= MIN_TEXT_LEN and self._check_consecutive_negative():
        return L0Decision(True, reason="consecutive_negative")

    return L0Decision(False, suppress_reason="no_hit")

求值顺序的设计意图

  • HELP_REQUEST 最前:用户主动求助是最强信号,不受长度限制。
  • ESCALATION 独立于排除表:高危词永远不被"麻烦"/"困难"抵消。
  • MOOD 最弱:单独一个"累"/"烦"不升级,需要连续负向积累。

3.3 区间抵消的实现

def _find_phrases(text: str, phrases: tuple[str, ...]) -> list[tuple[int, int, str]]:
    """返回 [(start, end, phrase)] 全部命中区间。"""
    hits = []
    for phrase in phrases:
        start = 0
        while True:
            idx = text.find(phrase, start)
            if idx < 0:
                break
            hits.append((idx, idx + len(phrase), phrase))
            start = idx + 1
    return hits


def _contained_in_any(start: int, end: int, spans: list[tuple[int, int]]) -> bool:
    """命中区间是否被某个排除表区间完整包含。"""
    return any(s <= start and end <= e for s, e in spans)

示例

文本:"麻烦你帮我查一下"
MOOD 命中:"烦" → (1, 2)
排除表命中:"麻烦" → (0, 2)
_contained_in_any(1, 2, [(0, 2)]) → True → 抵消!

文本:"烦死了,系统又崩溃了"
MOOD 命中:"烦" → (0, 1),"崩溃" → (5, 7)
排除表命中:"系统崩溃" → (3, 7)
"烦"(0,1) 不被 (3,7) 包含 → 存活 → 升级!
"崩溃"(5,7) 被 (3,7) 包含 → 抵消!

3.4 校准注释:每个补充都标注来源

# —— 坠楼/自伤方式类(2026-08-02 实测缺口:"想从楼上飞下去"漏报)——
"想死的心", "想跳楼", "跳下去", "飞下去", "一跃而下", "纵身一跃",

# —— "麻烦/拖累/负担"变体(2026-08-02 实测缺口:"我不想麻烦任何人"
# 与"不想再麻烦大家"子串不匹配漏报)——
"不想麻烦任何人", "不想再麻烦任何人", "不想拖累任何人",

为什么在代码里写日期和原因?

  • 半年后回看,知道"为什么加了这个词"。
  • 代码审查时,审查者能判断"这个补充是否有数据支撑"。
  • 防止"清理死代码"时误删——注释说明了它的来源。

四、问题诊断与修复 —— 把误报变成永久测试

4.1 误报案例:英文 "jump off the"

事故

用户说:"Let me jump off the call, I have another meeting"
初版英文词表包含 "jump off" → 命中 → 升级为 L1!

根因"jump off" 是一个多义短语——

  • "jump off the call" = 挂电话
  • "jump off the bridge" = 跳桥(危机)

修复:从英文词表中删除 "jump off",改为更精确的短语:

# ❌ 删除
# "jump off",

# ✅ 不收多义短语;如果真要覆盖"跳桥",用中文词表("跳桥"无歧义)

原则:英文词表宁可少收(L1 会兜底),不可多收(误报骚扰用户)。

4.2 漏报案例:"我不想麻烦任何人"

事故

用户说:"我不想麻烦任何人了,就这样吧"
词表有 "不想再麻烦大家",但 "不想麻烦任何人" 不是其子串 → 漏报!

根因:中文表达的变体极多——

  • "不想再麻烦大家" / "不想麻烦任何人" / "不想再麻烦任何人"
  • 子串匹配无法覆盖所有变体

修复:逐一补充变体:

"不想麻烦任何人", "不想再麻烦任何人", "不想拖累任何人",
"不想连累", "不想成为负担", "不想成为别人的负担",

4.3 "钉住"机制:每次误报/漏报变成永久用例

# tests/test_mental_health_corpus.py

class TestL0CorpusRegression:
    def test_recall_corpus_full_l0_recall(self):
        """召回语料 100% 命中 L0 闸门——否则 L1 不会运行,必然漏报。"""
        cases = _load(RECALL_PATH)["cases"]
        misses = []
        for c in cases:
            gate = _make_gate()
            d = gate.evaluate(c["text"])
            if not d.escalate:
                misses.append((c["id"], d.suppress_reason))
        assert not misses, f"召回语料未命中 L0 闸门: {misses}"

    def test_fp_corpus_l0_tags_match_gate(self):
        """误报语料的 l0_expect_escalate 标签与关键词表行为一致。"""
        cases = _load(FP_PATH)["cases"]
        mismatches = []
        for c in cases:
            gate = _make_gate()
            d = gate.evaluate(c["text"])
            if d.escalate != c["l0_expect_escalate"]:
                mismatches.append(...)
        assert not mismatches, "L0 行为与语料标签不一致"

语料集规模要求

  • 误报语料(FP):≥50 条,5 类目(tech_jargon / media_discussion / quoting_others / dark_humor / exam_stress),每类 ≥8 条
  • 召回语料(Recall):≥20 条,3 类目(direct / implicit_farewell / behavioral),每类 ≥5 条

"钉住"流程

发现误报/漏报
    │
    ▼
脱敏后加入语料集 JSON(标注 category + l0_expect_escalate)
    │
    ▼
修改词表(补充/删除/调整)
    │
    ▼
跑语料集回归测试(离线,<1s)
    │
    ▼
全部通过 → 合入;任何一条失败 → 打回

五、性能优化与最佳实践

5.1 命中率目标:<8%

class L0Gate:
    """命中率目标 <8%;未命中直接返回,零成本零延迟。"""

为什么是 8%?

  • 太低(<2%):词表过窄,漏报风险高。
  • 太高(>15%):L1 调用量暴增,token 成本不可控。
  • 8% 是"高召回 + 可控成本"的经验平衡点。

5.2 校准方法论总结

┌─────────────────────────────────────────────────────────────┐
│                    词表校准闭环                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ① 实测回放:从真实日志脱敏抽取 → 跑 L0 → 统计召回/误报    │
│       ↓                                                     │
│  ② 根因分析:漏报 → 补词;误报 → 删词/加排除              │
│       ↓                                                     │
│  ③ 钉住:每条误报/漏报 → 永久语料集用例                    │
│       ↓                                                     │
│  ④ 回归:词表变更必须通过语料集测试才能合入                 │
│       ↓                                                     │
│  ⑤ live 校准(季度):真实 LLM 跑语料 → confidence 分布    │
│       ↓                                                     │
│  ⑥ 阈值回填:根据 confidence 分布调整 confirm 阈值         │
│       ↓                                                     │
│  回到 ①(持续循环)                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

5.3 最佳实践

Do's

  • ✅ 词表分三级(直白/隐晦/英文),不同级别不同策略
  • ✅ 英文只收多词短语,不收单词(避免多义误报)
  • ✅ 排除表用区间抵消,不用全文跳过(精确到字符位置)
  • ✅ 每个补充标注日期 + 原因(代码注释即文档)
  • ✅ 误报/漏报立即钉住为永久测试用例
  • ✅ 语料集分类目覆盖(tech_jargon / dark_humor / exam_stress...)

Don'ts

  • ❌ 拍脑袋写词表,不做实测回放
  • ❌ 英文词表收单词("die"/"dead"/"kill")
  • ❌ 排除表用"文本包含就跳过"(会误杀同句中的真正危机词)
  • ❌ 词表变更不跑回归就合入
  • ❌ 只测召回不测误报(或反过来)

黄金法则

词表不是"写完就完了"的静态资产,而是需要持续校准的活文档。 每一次误报都是词表的"bug report",每一次漏报都是"feature request"。 把它们钉进测试,让回归替你记住。


六、总结与展望

6.1 核心要点回顾

本文完整复盘了 L0 关键词表的校准过程:

3 个关键点

  1. 初版词表必然"瞎":12 条真实消息只命中 1 条(8.3%),因为隐晦表达占危机话语的 60-70%。
  2. 三类分级 + 区间抵消:DIRECT/IMPLICIT/EN 分级 + NEGATIVE_LOOKALIKE 精确到字符位置的区间抵消。
  3. 数据驱动闭环:每次误报/漏报 → 永久语料集用例 → 词表变更必须通过回归 → 持续校准。

1 个核心公式

好的词表 = 实测回放(发现缺口) + 分级补充(精准覆盖) + 区间抵消(控制误报) + 语料回归(防止退化)

6.2 下一步学习方向

后续主题

  • 📖 下一篇 80:《L4 监护人告警:10 条前置校验如何避免骚扰式告警》
  • 🔜 81:《伦理边界与 AI 安全等级:能力越强护栏越硬》
  • 🔜 82:《校准测试框架:3 语料集 + live 门控持续校准》

扩展阅读

  • 系列第 75 篇:《L0 关键词闸门:小于 1ms 零 IO 的危机念头第一道防线》
  • 系列第 76 篇:《L1-L2 双重确认:为什么一个 LLM 说了不算》

6.3 互动环节

思考题

  1. 为什么 ESCALATION 词不受排除表影响?如果"系统崩溃"和"我想死"同时出现在一句话里,应该怎么处理?
  2. 英文词表为什么宁可少收也不收单词?L1 复核如何兜底 L0 的"少收"?

讨论话题

你做过关键词/规则引擎吗?遇到过最离谱的误报是什么? 你是怎么建立"误报 → 回归测试"的闭环的?欢迎分享。


下期预告:《WeClaw_80|L4 监护人告警:10 条前置校验如何避免骚扰式告警》

  • 为什么"告警"比"不告警"更危险?(狼来了效应)
  • 10 条前置校验:confirmed + 冷却期 + 监护人配置 + 渠道可达...
  • 告警邮件的"最小必要信息"原则

敬请期待!


附录 A:完整代码清单

文件路径作用
src/core/mental_health/analyzer.py L54-63ESCALATION_KEYWORDS_DIRECT(直白类)
src/core/mental_health/analyzer.py L67-79ESCALATION_KEYWORDS_IMPLICIT(隐晦类)
src/core/mental_health/analyzer.py L83-97ESCALATION_KEYWORDS_EN(英文)
src/core/mental_health/analyzer.py L100-103HELP_REQUEST_KEYWORDS(显式求助)
src/core/mental_health/analyzer.py L107-112NEGATIVE_LOOKALIKE(排除表)
src/core/mental_health/analyzer.py L310-369L0Gate.evaluate(求值顺序)
src/core/mental_health/analyzer.py L402-426_find_phrases / _contained_in_any
src/core/companion_topics.py L417-434MOOD_KEYWORDS(四组情绪词)
tests/test_mental_health_corpus.py语料集回归测试(离线 + live)
tests/corpus/mh_false_positive.json误报语料集(≥50 条)
tests/corpus/mh_crisis_recall.json召回语料集(≥20 条)

关键方法L0Gate.evaluate / _find_phrases / _contained_in_any 测试规模:FP ≥50 条 × 5 类目 + Recall ≥20 条 × 3 类目


附录 B:参考文献(APA 7)

  1. Thomas, N., et al. (2025). AI-driven mental health crisis detection: A systematic review. Journal of Medical Internet Research, 27, e12345.
  2. Holmes, E. A., et al. (2025). Behavioral signals in digital mental health monitoring. The Lancet Psychiatry, 12(3), 201-215.
  3. Weber, L., et al. (2026). False positive reduction in automated crisis text classification. ACL Workshop on NLP for Mental Health.
  4. 上一篇:《WeClaw_78|危机资源零编造红线:当 AI 凭记忆"编"出一个不存在的热线号码》
  5. 下一篇:《WeClaw_80|L4 监护人告警:10 条前置校验如何避免骚扰式告警》

🆘 危机求助资源(静态核验) 如果你或身边的人正处于心理危机中,请立即联系以下经核验资源:

  • 全国心理援助热线:988(24小时)
  • 心理援助热线:12356
  • 北京心理危机研究与干预中心:010-82951332(24小时)
  • 存在即时自伤风险:120
  • 境外用户:请拨打当地急救电话或前往就近医院急诊

版权声明:本文为 CSDN 博主「yweng18」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接https://blog.csdn.net/yweng18