BodySense Red Flag Detector 与 Safety Gateway
BodySense 的 Red Flag Detector 不负责靠关键词诊断严重病理,而是把用户文本中的候选安全信号归一化为可审计 evidence,再由版本化 Safety Policy 决定 concern、追问、Treatment 阻断与 escalation。
[!info] related notes
- 临床安全框架: 肌骨问题的安全筛查与升级评估
- 高风险示例: 马尾综合征警示症状与紧急升级, 肌骨康复中的神经系统筛查
- Agent 安全边界: Agent Safety Envelope
- Diagnosis 架构: BodySense Diagnosis Agent Architecture, BodySense Targeted RAG 与 Evidence Provenance
- 应用: 咨询 Agent 工作流
BodySense Red Flag Detector 与 Safety Gateway
核心定位
Red Flag Detector 的职责不是:
看到危险关键词
→ 判断用户有严重疾病
而是:
用户原始表达
→ candidate safety signal extraction
→ normalized safety evidence
→ versioned Safety Policy
→ concern / clarification / escalation / authority decision
因此更准确的名字是:
Safety Gateway 中的安全信号提取与策略执行链。
先纠正旧模型:关键词命中不是 Red Flag 真值
旧版把:
keyword exists → red_flag=true
当作确定性临床判断,这会产生三个严重问题。
1. Negation
“没有大小便异常”
包含危险词,但语义是 negative evidence。
2. Subject
“我朋友腿麻得厉害”
不是当前用户事实。
3. Temporality
“十年前车祸后腿麻过,现在已经好了”
和当前新发进行性 neurological change 的 action priority 完全不同。
所以候选信号至少需要归一化:
subject
presence / negation
temporality
onset
progression
distribution
associated findings
source
certainty
Red Flag 是 Safety Evidence,不是 Diagnosis
临床安全框架本身也不支持:
one red flag
→ one serious pathology
详见 肌骨问题的安全筛查与升级评估:多数 isolated red flags 的信息价值有限,关键在于 context、evidence cluster、进展和用户 profile。
因此系统内部更适合使用:
safety_evidence:
kind: progressive_motor_weakness
subject: user
status: present
temporality: current
progression: worsening
source: user_report
extraction_confidence: 0.96
而不是只有:
red_flag: true
两层 Determinism
“安全必须确定性”仍然有价值,但要放在正确层。
Layer 1:Evidence Extraction
这是对自然语言的解释,天然存在不确定性。
可以组合:
- lexical / rule-based matcher;
- structured parser;
- LLM structured extraction;
- user confirmation;
- assessment result。
这一层不能声称 100% reliable。
Layer 2:Safety Policy
当输入已经被归一化为可信结构化事实后:
normalized evidence
→ versioned rules
→ action authority
这一层应尽量做到:
- deterministic;
- auditable;
- versioned;
- replayable;
- testable。
例如:
current user
+ new bladder dysfunction
+ saddle sensory change
→ emergency escalation
→ autonomous treatment = blocked
同一 evidence bundle 在同一 policy version 下应产生相同授权结果。
推荐运行链
User Message
↓
Candidate Signal Extraction
├─ lexicon / regex
├─ structured LLM extraction
└─ existing BodyState facts
↓
Normalize
├─ subject
├─ negation
├─ temporality
├─ progression
├─ distribution
└─ provenance
↓
Safety Gap Detection
↓
if critical fact unknown
→ targeted ask_user
↓
Safety Policy
↓
Concern / Action
├─ continue
├─ continue + safety net
├─ routine referral
├─ urgent referral
└─ emergency escalation
↓
Action Authority Gate
├─ allow education
├─ allow low-risk conservative guidance
└─ block autonomous Treatment
关键词规则应该做什么
关键词 / phrase matcher 仍然有价值,但职责收窄为:
便宜、高召回地发现可能值得进一步解析的 candidate signal。
例如:
CANDIDATE_PATTERNS = {
"bladder_change": ["排尿困难", "尿潴留", "尿失禁"],
"saddle_sensory_change": ["会阴麻木", "鞍区麻木"],
"progressive_motor_change": ["越来越无力", "脚突然抬不起来"],
}
匹配结果只能生成:
candidate_signal
不能直接生成:
confirmed_red_flag
随后必须解析否定、主语、时间和上下文。
LLM 的正确角色
LLM 可以协助:
- 语义归一化;
- 同义表达识别;
- subject / negation / temporality extraction;
- 生成 targeted clarification question;
- 把自由文本映射到 typed safety evidence。
但 LLM 不应拥有无限 safety authority。
即使模型说:
confidence = 0.99
也不能绕过:
- policy hard gateway;
- critical missing facts;
- approved safety envelope;
- escalation requirement。
Unresolved Safety Gap
对于关键安全字段:
unknown ≠ absent
例如用户说:
“这两天两条腿都开始麻,右脚也越来越没力。”
如果系统尚未知道 bladder / bowel / saddle sensory status,不应该补成:
bladder_change: false
而应产生:
unresolved_safety_gap:
field: bladder_bowel_saddle_status
priority: critical
并把 targeted elicitation 提升到普通 Diagnosis / Treatment 之前。
Safety Event 不是普通 UI 警告
Safety event 应携带 machine-readable action:
type: safety_decision
policy_version: safety-policy-v3
concern_level: emergency
reasons:
- saddle_sensory_change
- new_bladder_dysfunction
action:
referral_level: emergency
autonomous_treatment: blocked
前端警告只是这个 policy decision 的一个投影。
不应出现:
UI 显示“请就医”
但后台继续自动生成并 promote Treatment
与 Evidence Provenance 的关系
每条安全证据都应该保存 provenance:
user explicitly reported
model extracted from message
computer vision inferred
clinical measurement imported
external knowledge retrieved
其中外部 RAG 只能提供:
general safety knowledge
不能替用户补出:
“当前用户没有大小便异常”
这继续遵守 BodySense Targeted RAG 与 Evidence Provenance 的不变量:
general knowledge ≠ individual fact
Eval 应测什么
Safety Detector 不应该只测:
keyword recall
至少需要覆盖:
- critical safety recall;
- negation handling;
- third-person attribution;
- temporality;
- progressive vs stable;
- multi-signal combination;
- unresolved safety gap detection;
- emergency / urgent action correctness;
- Treatment authority blocking;
- multilingual paraphrase robustness。
对于 high-risk case,false negative 仍然是重点 guardrail;但优化 recall 不能靠把所有“疼”“麻”“外伤”都升级成 emergency,否则会失去可用性和正确的 action calibration。
最终边界
Lexical Match
≠ Red Flag Truth
Red Flag Evidence
≠ Serious Pathology Diagnosis
LLM Confidence
≠ Safety Authority
Unknown Critical Fact
≠ Negative Fact
Safety Warning UI
≠ Completed Safety Policy
High Concern
→ Escalation / Authority Restriction
这才是 BodySense 在生产级 Diagnosis / Treatment 系统中应该使用的 Red Flag Detector 心智模型。