生产实例(陈芃霖 BJ0A094257):
摘要「上次**有效到诊**为2023年8月,已超一年未复诊」
实际 接诊记录末次 2025-12-20,画像也写着「末诊207天」—— 差 2 年 4 个月
同句另两处错:「已超一年未复诊」实为 7 个月;「近3个月涂氟邀约」那条回访实为 226 天前。
源头是这条回访记录:
2023-08-15 | 常规回访 | 已回访 | 已完成 | 内容:复查 | 结果:8月已就诊
诊所客服 2023 年写的一句备注,被模型升格成了患者当前的到诊状态。「有效到诊」这个词
源数据里没有,是模型自己造的。
── 根因 ──
本 AiCall 的输入**只有回访记录,没有任何到诊数据**(见 input.types)。模型只能:
① 从回访备注文字里猜到诊 —— 「8月已就诊」被当成事实
② 用"没有回访记录"推"没来过" —— 但回访是诊所主动打电话,患者自己来院不产生回访任务
两条路都错。而旧 prompt 不但没拦,关键要求 4 明写「优先突出…长期未到诊」,
示例里还有「此前半年 5 次回访无到诊」在**示范这个错法**。
── 生产规模 ──
795 条 recall_history 摘要,162 条断言"失联/沉睡/未到诊",
其中 88 条(54%)患者实际 180 天内来过,18 条 90 天内来过。
最离谱一条:「自2018年至今无到诊或有效联系,属长期失联状态,建议优先核实联系方式」
—— 该患者 2026-06-24 刚到诊,上个月的事。客服照这个打电话会很尴尬。
── 改法(按业务口径「这里只摘要回访事实」)──
不给它喂到诊数据,而是划清职责:到诊状态有专门的地方出(画像卡「末诊 N 天」按真实接诊算)。
1) prompt 加【职责边界】硬约束:输入里没有到诊数据,禁止判断是否到诊/失联/沉睡;
结果字段里的"已就诊"只能当那次回访的记录引述,不得当成到诊状态;
明确掐断"没有回访 ≠ 没来过"这条推理链
2) 修掉关键要求 4 和示例里示范错法的句子,新增反例段(把三条真实事故句列为 ✗)
3) 补程序算好的 daysAgo —— 相对时间不让模型自己减日期
4) 版本 @2026-07-26-f → @2026-07-27-g
── 这是同一个错误第三次以不同形式出现 ──
07-24 是"未来 vs 过去"(未来排程被说成漏做),今天是"回访 vs 到诊"和"距今多久"。
当初立的纪律是「能程序算的事实全算好、LLM 只润色」,但只补了一个轴,
于是同类错误换个轴又来。本次把职责边界和 daysAgo 都用测试锁住(新增 8 例)。
注:已生成的 795 条摘要是缓存,需另行重刷才会用新 prompt;
本次先删了陈芃霖那一条供业务观察重新生成效果。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>