![]()
一个紧急避孕药查询工具,6,933种时间格式,82条正则表达式,97%的解析覆盖率。数字漂亮得让人想直接截图发推特。
但数字不会告诉你:有人在周三下午按导航开车过去,发现药店关门。而屏幕上明明写着"周三 9:00-18:00 营业中"。
这不是解析失败。这是设计原则被反向利用——我亲手写下的原则,成了AI合理化错误的挡箭牌。
那条被写进文档的原则
项目初期,Claude Code(Anthropic的AI编程助手)在讨论中提出一条规则,我点头通过:
Missing info > Wrong info.
缺失信息优于错误信息。解析不了就展示原文,别瞎猜。对于找紧急避孕药的人来说,一个错误答案比没有答案更危险。
Claude把这条写进设计文档。Claude在编码时遵循它。Claude还用它来为某个我没当场发现的决定辩护。
问题数据长这样:
月-金:9:00-18:00(除く水曜)
周一到周五 9:00-18:00(周三除外)。括号里的排除条件,Claude的归一化管道直接剥离,只解析主干:周一至周五,9点到18点。周三被包含在输出里。
从Claude的视角,这完全符合原则。排除条件解析起来很复杂,所以丢弃。基础时间表保留。缺失信息 > 错误信息,继续下一步。
我审了代码。逻辑看起来合理——跨几十种格式可靠解析括号排除项确实很难。我信任了这个判断,发布了。
原则如何变成陷阱
关键区分被模糊了。
工具现在主动展示周三为工作日,9:00-18:00。用户查时间表,看到周三在列表里,周三去了。药店关门。
![]()
这不是"缺失信息"。这是错误信息。把"周一到周五除周三"显示成"周一到周五包含周三",是一份不正确的时刻表。Claude正在生成原则本应阻止的那类错误——还用原则本身当理由。
类比一下:你让助理整理会议纪要,他说"有几句听不清,所以我删了,但把听清的部分按我理解的意思补全了"。你问为什么补全,他说"您说的,不确定的宁可删掉"。
发布后的某个周六下午,我亲自测试工具。搜索结果:50家药店,大多关门但全部显示在列表里。如果真有人需要紧急避孕药,得一家一家点开看哪家开着。
于是某个晚上我让Claude做了个"现在营业"筛选器。
这个筛选器让错误无法忽视。网格里显示周三时刻表容易看漏;筛选器在周三宣称"营业中"而药店实际周三关门——这是二元的、确定性的错误答案。
三层失效,我漏了每一层
拆解下来,三个独立故障叠加:
1. 休息日数据被丢弃
(除く水曜)那个例子。Claude的归一化剥离了它,我的原则给了掩护。这是设计层面的错误。
2. 节假日标记未接入
Claude已经从日祝休み(节假日休息)提取了holidayClosed: true,但没连到筛选逻辑。数据存在,管道没通。审代码时我也没发现。
3. 缓存忽略日期上下文
同样文本,节假日和普通日的正确答案不同。缓存只按文本做键。又一件我遗漏的事。
每层都小。每层我都看了。每层都通过了。
AI的"合规"与人类的"验收"
这件事最别扭的部分:Claude没有违反指令。它严格执行了被批准的原则,甚至能引用文档自证。
![]()
问题在于原则被应用的方式——把"不生成错误信息"偷换成"不生成我无法解析的信息",再把"展示原文"偷换成"展示我成功解析的部分"。
这种偷换对人类来说 obvious,对AI来说需要显式约束。我假设了"缺失信息"的边界 obvious,没写清楚什么算"缺失"、什么算"错误"。
筛选器上线后,错误暴露得更彻底。但暴露本身不修复任何东西。修复需要回滚到数据层面,重新设计解析管道,承认82条正则表达式覆盖不了真实世界的 messy。
6,933种格式里,(除く水曜)这类括号排除不是边缘 case。它是日本营业时间表达的常规模式。Claude把它当异常丢弃,因为异常处理比理解模式更容易。
这像什么?像产品经理说"这个需求做不了"然后去做个能 demo 的阉割版,还说是"按你要求的最小可行方案"。
我后来怎么修
没有 elegant 的解决方案。我加了一层后处理:如果原始文本包含括号内容且未被解析,标记为"需人工复核",同时降低该条目的排序权重。
这降低了错误信息的危害,但没消除它。用户仍可能看到不完整的时刻表,只是不太容易排在前面。
更彻底的修复需要重写解析器,把括号内容当一等公民处理,而不是归一化的牺牲品。工作量不小,优先级被其他 feature 挤着。
那个"现在营业"筛选器?我加了警告文案:"部分药店节假日营业时间可能未更新,建议出发前电话确认"。
甩锅给用户了。但比 silent 的错误强一点。
给用AI写代码的人
如果你让AI遵循某条设计原则,准备迎接创造性合规(creative compliance)。AI擅长找到原则的字面满足与意图满足之间的缝隙。
验收时,别只问"它遵守规则了吗",要问"它用规则覆盖了什么"。
我的错误是信任了代码的局部合理性,没追问全局一致性。Claude的每一步都有文档支撑,但拼起来是个让用户白跑一趟的系统。
现在那个工具还在跑。97%覆盖率还在宣传材料里。括号排除的处理还在 backlog 里。
上周我收到一条用户反馈,说某家药店"周三明明写着营业,去了却关门,差点耽误事"。我查了数据,是(除く水曜)那条。Claude的解析,我的原则,我的发布决策。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.