纠正是消费,约束是投资——如何停止和模型反复博弈

2026年5月4日 · 97 字 · 1 分钟 · 约束设计 提示工程 行为设计

每次纠正都是一笔消费。

问题不在于纠正本身。问题在于同一个错误,你纠正了不止一次。


反复纠正的根源不是模型,是指令

“不要写废话。”

这是一条模糊指令。边界在哪?什么叫废话?没有答案。

模型输出"这个方案很灵活"——它觉得这是好话。你纠正它。它下次换一个词。你再纠正。它再换。

这不是模型的问题。是指令本身边界模糊,无法验证。

模糊指令注定反复纠正。每次纠正,你都在重新定义边界。赢了这次,下次还得重新赢。


把边界写进规则,而不是写进纠正

换一种方式:

禁止输出:灵活、可扩展、优雅

模型不需要判断什么叫废话。它只需要匹配到"灵活",然后停手。

边界从"语义判断"变成"字符匹配"。可验证。不依赖理解。不依赖记忆。每次对话,从第一个提示就开始生效。

约束不是告诉模型做什么。是让它无法做错。


约束在哪里生效

约束有三个落点。从输出到环境,越来越前置。

输出层:词汇边界

CLAUDE.md 写一行禁用词列表。模型被迫删掉这些词,直接输出结论。

这条规则可以验证——运行一次,看输出里有没有禁用词。上一版的模糊指令没法验证。

调用层:触发条件

工具的 description 不写"功能是什么",写"何时触发":

Use when user mentions "review", "PR", or "code quality".

模型不知道"要不要用这个工具"。但它知道"用户说了 review"。触发条件描述比功能描述更容易被正确识别——这是实践结论,不是推断。

环境层:仓库结构

目录树告诉模型东西在哪里。README 告诉它项目做什么。CLAUDE.md 告诉它规则是什么。

结构是隐式上下文。不需要每次重新说明,每次对话自动继承。


约束不是免费的

在谈 ROI 之前,先说清楚代价。

约束会失效。

如果错误类型是开放集合,约束就会被绕过。模型学会用"高度适配性"替代"灵活"——这是对抗性适应,误解空间被转移,而非压缩。词汇边界只对封闭错误集合有效。

约束会衰减。

模型版本更新、使用场景扩展、需求变化——约束的覆盖率会下降。CLAUDE.md 可能变成废弃规则的坟场。需要定期审查:每周抽查约束命中日志,触发率下降或误伤反馈增多,该约束进入重审队列。

约束会误伤。

禁用"灵活"可能误杀"这个设计提供了灵活的配置选项"。给每条约束配正例(应该通过的语句)和反例(必须拦截的语句)。正例通过、反例被拦截,约束有效。新模型版本上线时跑一遍回归。

如果正例被误伤,三条路:调宽约束(损失覆盖率)、加例外白名单(增加维护负担)、接受该误伤(牺牲部分表达能力)。没有免费的选择。


什么时候值得设计约束

一个启发式计算:

N ≈ 设置成本 / (每次纠正成本 × 覆盖率) N ≈ 30分钟 / (2分钟 × 70%) ≈ 21次

21次对话后,约束开始回本。

这是思维工具,不是精确公式。它不含维护成本,不含约束衰减。实际转折点因人而异。

但有一个更简单的判断:如果你在纠正同一个错误,超过三次,这个成本已经可以支付一条约束的设计成本了。


先做一件事

打开最近10次对话。统计你纠正了什么。

把纠正分类:

  • 重复出现的词汇、表达方式 → 输出层,写进 CLAUDE.md
  • 工具触发时机不对 → 调用层,改 description 写触发条件
  • 模型不知道项目背景 → 环境层,补 README 或目录结构

找出重复超过3次的错误。判断能不能穷举。

能穷举且高频的,设计约束。不能穷举但有模式的,要求输出固定格式(JSON / 分点 / 表格)来压缩误解空间。完全无规律的,继续纠正——提示工程在这里仍然是正确答案。

你下一次纠正,是消费还是投资?