从规则输入到反馈回流的完整流程,以及还缺什么。
下图展示从"规则进入"到"建议回流"的 5 个阶段。绿色=已上线,橙色=部分/半成品,红框虚线=未建。
| 能力 | 状态 | 说明 |
|---|---|---|
| 8+ 种规则输入入口 | 已上线 | 文字 / 文件 / URL / 拍照 / 语音 / 引导 / persona 教学 / WeChat 命令 / 编辑→KB |
| LLM 结构化抽取 | 已上线 | voice_to_rule / 文件 / URL 各有 prompt |
| KB 全量检索(非 RAG) | 已上线 | 30 候选 × jieba × 来源权重,top 5,字符上限 6000 |
| [KB-N] 引用标注 | 已上线 | 前端点击可弹窗看原文 |
| 引用次数统计 | 已上线 | reference_count + usage_log 流水(LLM 输出时计数) |
| 编辑→KB 桥(草稿) | 已上线 | teaching_handlers.py:25 + "保存为规则"按钮。注意:teaching.py:107 写入时 source="teaching",在检索打分里走 0.2 权重(非 doctor 的 0.5),排序上会低于手动添加的规则 |
| 编辑→KB 桥(诊断) | 已上线 2026-04-16 | ReviewPage.handleDecide 读取 teach_prompt,Snackbar 提示保存;后端 diagnosis_handlers.py:244 原本的 teach_prompt 现在有 UI 接收 |
| 草稿编辑→人格学习(仅风格) | 已上线 | draft_handlers.py:424 触发 process_edit_for_persona |
| 人格候选卡片审核 | 已上线 | pattern_hash 去重 + 90 天拒绝悬挂 |
| 事实类编辑的学习路径 | 已上线 2026-04-16 | process_edit_for_learning 路由 type=factual → kb_pending_items;审核通过写入 doctor_knowledge_items |
| 幻觉引用暴露给医生 | 已上线 2026-04-16 | hallucinated_citations 表 + /api/manage/kb/hallucinations 端点 + Knowledge 页 banner |
| 拒绝→KB 归因 | 已上线 2026-04-16 | AISuggestion.cited_knowledge_ids 列 + rule_health 聚合 decision 分布 |
| 规则健康仪表盘 | 已上线 2026-04-16 | GET /api/manage/knowledge/{id}/health + KnowledgeDetailSubpage 四列统计 |
| 冷启动加权 | 未建 | 候选<5 条时 source_weight 总是拿 top 5,无相关性阈值 |
| 规则过期 / 冲突检测 | 未建 | 无 expires_at,两条矛盾规则都会被引用 |
| 危险信号检测 | 未建 | 规划中:患者消息异常 → 自动置顶 |
persona-classify.md 中已被明确告知将临床事实修正归为 factual/context_specific。persona_learning.py:27-34 随即 early-return,信号进垃圾桶。这是整条闭环里最严重、成本最低、收益最大的缺口 — LLM 已经做了分类,只是下游没人接。persona_learning.py 重构为 process_edit_for_learning,新增 kb_pending_items 表 + KbPendingItem ORM,_route_to_kb_pending 在 type=factual 时路由并执行 PII 脱敏。审核 UI 在 /settings/knowledge/pending。FACT_LEARNING_ENABLED 环境变量可关闭。
diagnosis_handlers.py:244-270 已经为诊断编辑发 teach_prompt,但 ReviewPage.jsx:267-282 忽略这个字段,UI 没"保存为规则"按钮。reference_count 记录的是被引用次数(LLM 输出时就 +1),不是被采纳次数。AISuggestion 新增 cited_knowledge_ids 列并在 diagnosis_pipeline 创建建议时填充。新增 GET /api/manage/knowledge/{id}/health,聚合 ai_suggestions + message_drafts 两侧的 cited / accepted / edited / rejected 四元组(含最近 30 天窗口)。KnowledgeDetailSubpage 渲染四列统计条(采纳绿 / 编辑黄 / 拒绝红),仅在 cited_count > 0 时显示。
citation_parser.py:55 检测到 AI 引用了不存在的 [KB-N] 时只 warn。医生看不到这个信号,无法纠正 prompt。hallucinated_citations 表 + log_hallucinations helper;draft_reply 和 diagnosis_pipeline 两条路径都会持久化。新增 GET /api/manage/kb/hallucinations?days=7,Knowledge 页顶部出现橙色 banner "AI 最近 7 天引用了 N 条不存在的规则"。
| 步骤 | 行动 | 改造量 | 为什么这个顺序 |
|---|---|---|---|
| 1 | 修 persona_learning.py:32 的 fact 分支丢弃(缺口 ①)已完成 2026-04-16 | 小 | LLM 分类已经能用,只差路由;复用现有 pattern_hash + 90 天抑制基础设施 |
| 2 | 把诊断审核编辑接入 teach_prompt UI(缺口 ②)已完成 2026-04-16 | 小 | 后端已发信号,前端几行的工作;先完成半成品再扩面 |
| 3 | 幻觉引用暴露(缺口 ④)已完成 2026-04-16 | 小 | 独立于其它步骤,安全相关收益快;citation_parser.py:55 信号已存在 |
| 4 | 规则健康仪表盘(缺口 ③)已完成 2026-04-16 | 中 | 前置:在 AISuggestion 加 cited_knowledge_ids,把 reparse-free-text 改成结构化;否则诊断侧归因做不出来 |
decide → edit → classify → pending → accept → render。LLM 步骤当前失败时只打日志,回归会无声无息。此外建议把 cited KB ids 结构化存在 AISuggestion 上,避免在多个地方反复从文本里正则抽取。