选 hook 还是 prompt 有三个轴:失败后果、程序可验证性和主观性。数据隐私规则 99% 的合规率仍然需要 hook(1% = 数据泄露)。打招呼称呼名字 85% 的合规率作为 prompt 就行(遗漏 = 轻微体验瑕疵)。
三轴分类
- 后果:失败有法律、金融或安全影响吗?如果有 → hook 候选。
- 可验证性:代码能确定性地检查合规吗?正则、列表匹配、阈值比较?如果能 → hook 可行。
- 主观性:需求需要模型的判断吗?“要有同理心”、“呈现平衡观点”、“使用专业语言”?如果是 → 只能用 prompt,不管后果多严重。
| 需求 | 后果 | 可验证 | 主观 | 机制 |
|---|---|---|---|---|
| 阻止 >$500 退款 | 金融 | 是(金额检查) | 否 | Hook |
| 制裁实体清单 | 法律 | 是(字符串匹配) | 否 | Hook |
| 电话 E.164 格式 | 集成 | 是(正则) | 否 | Hook |
| 平衡的观点 | 质量 | 否 | 是 | Prompt |
| 专业语言 | 质量 | 否 | 是 | Prompt |
| 称呼名字打招呼 | 体验 | 部分 | 否 | Prompt |
”故意覆盖”的证明
折扣层级限制 11% 的不合规。拆解:5% 是层级识别错误(可修 bug),但 6% 是故意覆盖——模型正确识别了层级,然后推理”这个受挫的客户值得额外照顾”并超了限制。
这证明了根本限制:prompt 合规是概率性的,因为模型运用上下文判断来覆盖指令。更强的措辞(“MANDATORY”、“NO EXCEPTIONS”)只有边际改善,因为模型不是没理解——它是选择了偏离。
按后果选择,不是按合规率
5 条规则,全用 prompt 执行:
| 规则 | 合规率 | 后果 | 应该是 |
|---|---|---|---|
| 称呼名字 | 96% | 外观 | Prompt ✓ |
| 验证身份 | 91% | 安全(未授权访问) | Hook ✗ |
| 不分享他人数据 | 99% | 法律(数据隐私) | Hook ✗ |
| 记录修改 | 88% | 合规(审计痕迹) | Hook ✗ |
| 推荐调查 | 93% | 体验偏好 | Prompt ✓ |
规则 3 在 99% 仍然需要 hook——1% 的数据隐私失败在法律上不可接受。规则 1 在 96% 作为 prompt 就行——4% 的遗漏打招呼零法律/金融影响。
迁移的成本收益分析
决定是否把规则从 prompt 迁移到 hook 时,比较预期损失 vs hook 成本:
| 规则 | 合规率 | 遗漏成本 | 预期损失(1K 交互) | Hook 成本 |
|---|---|---|---|---|
| 推荐追加销售 | 89% | $0 | $0 | 不值得 |
| 验证物流 | 92% | $15 | $120 | 边际 |
| 应用会员折扣 | 85% | $8 | $120 | 边际 |
| 确认邮箱 | 87% | $500 | $6,500 | 值得 |
规则 D 每月 $6,500 的预期损失远超约 $500/月的 hook 开发成本。规则 A-C 不值得这个开销。
过度 hook 反模式
几次事故后,一个团队对所有事都实施了 hook:来源验证、字数、格式、引用风格、段落长度、词汇复杂度。结果:每份报告 12 次 hook 拒绝,8 次是风格偏好。产出时间 3 倍。
501 个词的段落触发拒绝。强制重写破坏自然流畅度。系统变得过于僵化。
修复:合规要求保留 hook(来源验证、引用准确性)。风格/质量偏好(字数、段落长度)迁回 prompt 引导。Agent 在风格上需要判断灵活性,不是刚性执行。
上下文感知执行
一条编码标准(“所有公开 API 函数必须有输入校验”)对面向客户的代码是安全关键的,对内部工具只是建议性的。
上下文感知 hook:检查文件路径。面向客户的目录(/src/api/public/)→ 没有校验就阻止写入(确定性)。内部目录 → 允许并带 prompt 提醒(建议性)。后果水平取决于上下文,执行也应该如此。
纵深防御:prompt + hook 一起用
一个 hook 阻止生产部署。同事加了一条 prompt:“没有人工审批绝不部署到生产。“另一个同事说这是多余的。
两者都有价值。 Hook 是安全网(确定性阻止)。Prompt 是行为引导(减少尝试部署的次数)。更少的被阻止尝试 → 更顺畅的体验,模型主动寻求审批而不是撞墙。一条指令的 token 开销可以忽略。
迁移前先诊断
提交前跑测试的合规率从 97% 降到 82%。实施 hook 之前,先诊断为什么:
- 如果模型做了上下文判断(“这个小改动不需要测试”)→ 需要 hook(根本性的 prompt 限制)
- 如果指令在拥挤的上下文窗口中丢失 → prompt 重组可能就够了(更简单的修复)
正确的第一步永远是理解失败模式,不是直接跳到最强的执行方式。
确定性转换 vs 上下文判断
日期和货币 → PostToolUse hook(存在确定性转换规则)。度量单位 → prompt 引导(是否把”30 英尺游艇市场”转成公制取决于上下文——美国市场报告可能故意用英制)。
分界线:如果转换规则是客观且通用的 → hook。如果转换需要上下文判断 → prompt。
一句话总结: 按后果(法律/金融 → hook)+ 可验证性(代码能检查 → hook 可行)+ 主观性(需要判断 → 只能 prompt)选择执行方式——不是按合规率。警惕过度 hook(风格 hook 让产出时间 3 倍),迁移决策用成本收益分析。