任务边界不清,AI 自行扩大 scope

让 AI 改一个函数、它顺手重格式化相邻函数、改常量名、加注释——RLHF 让它默认"留下比拿到时更好的东西"。本文教你在 prompt 里显式画 in-scope / out-of-scope 边界。

你让模型修一个函数。它修了。还”顺便”重格式化了相邻两个函数、改了一个常量名、在文件顶部加了一段”应该说明模块用途”的注释。你 prompt 里一句没提。但也没明禁。模型扩 scope 是因为 RLHF 训练它”留下比拿到时更好的东西”,而”更好”在你没显式画边界时是无界的。修法不是事后骂模型——是在 prompt 里显式画边界,含 in-scope 和 out-of-scope 两个集合。

本文讲为什么模型默认扩 scope,以及怎么在代码编辑和内容任务里画出能守住的边界。

常见原因

1. 开放动词授权扩展

“改进”、“清理”、“润色”、“重构”全暗示”能改的地方都改”。模型按字面执行。

如何判断:你的动词开放。受限动词是”编辑函数 X”、“替换第 Y 行”、“改名变量 Z”。

2. 没显式 out-of-scope

你说了要做什么但没说要留什么。模型默认能看到的都公平猎物。

如何判断:你的 prompt 有 in-scope 没 out-of-scope。

3. 长上下文展示了相邻可修问题

你贴了整文件。模型看到目标 + 5 个看起来可修的东西。没边界就全修。

如何判断:scope 扩展落在 prompt 里可见的相邻代码或内容。

4. 多步任务每步没边界

第 1 步限定函数 X。第 2 步”现在改进这个模块”——边界蒸发。到第 3 步模型重写了文件。

如何判断:scope 漂移和步数相关(多步工作流里)。

5. Agent 有大范围写入权限

Cursor Composer、Claude Code、Codex 宽 scope——模型能动任何文件。“scope”机械上变成”它能读到的全部”。

如何判断:改动出现在你从未点名的文件里。

动手前先确认

  • 标清楚什么该改(in-scope)。
  • 标清楚什么不该改(out-of-scope)。
  • 决定相邻问题是 flag 还是直接忽略。
  • 多步工作每步规划边界。
  • agent 运行收缩工具权限只覆盖目标目录。

需要收集的信息

  • 当前 prompt。
  • 越界输出(代码用 git diff)。
  • 不该发生的改动清单。
  • in-scope 和 out-of-scope 集合。
  • 当时生效的模型、agent、工具权限。

最短修复路径

Step 1:开放动词换受限动词

差:  "改进 user.py 文件。"
好:  "只编辑 user.py 里的 `validate_email` 函数。
       其他函数 byte 级保持。未改动行不要重新格式化。"

受限动词 + 显式对象消歧。

Step 2:声明 out-of-scope 清单

Out-of-scope(不许动):
- validate_email 之外任何函数。
- import 和 export。
- MAX_RETRIES 常量。
- 现有注释。
- 文件级 docstring。

正常会"顺便清理"的内容请写到 SUGGESTED_FOLLOWUPS 区块,
不要直接动。

SUGGESTED_FOLLOWUPS 模式让模型把观察浮出来不动手。

Step 3:用标记编辑区

只编辑下方标记之间的代码。标记之外原样保留。

# AI-EDIT-START
def validate_email(email: str) -> bool:
    return "@" in email
# AI-EDIT-END

物理标记对 scope 漂移很鲁棒。

Step 4:要 diff 或结构化输出

按 unified diff 输出。只包含编辑区内改动 hunk。不要输出整文件。

diff 格式机械可见越界改动——模型自己知道。

Step 5:多步工作每步重申边界

Step 1:只编辑 validate_email。Out-of-scope:其他全部。
Step 2:第 1 步审过后,只编辑 send_email。Out-of-scope:validate_email(已冻结)+ 其他全部。

把”已冻结”清单往后传,让 scope 单调递增不累积。

Step 6:agent 收缩工具权限

Cursor Composer 里只开目标文件。Claude Code 里限定工作目录。Codex 把 scope 设到一文件或一 PR。机械权限 > prompt 级指令。

怎么确认已经修好

  • diff 限在 in-scope 集合。
  • out-of-scope 的文件 / 函数 / 段 byte 级一致。
  • SUGGESTED_FOLLOWUPS(如果有)列了模型注意到但没动的相邻问题。
  • 重跑 diff 形态相近。
  • 同事审 diff 找不到惊讶改动。

如果还是没修好

  1. 模型可能无视边界——切到 Edit 工具精确匹配模式,边界变机械。
  2. agent 权限可能比 prompt 暗示宽——在工具级收缩。
  3. 重复工作把边界锁进 system prompt / project 指令,不要写在 user message。
  4. 换更小 / 更便宜的模型——经常更严守 scope。

预防建议

  • 默认动词:“edit”、“rename”、“replace”——improverefactorpolish 不加 scope 永不用。
  • 永远声明 out-of-scope;什么都不神圣就直说。
  • 内容用标记编辑区;代码用精确匹配 Edit 工具。
  • agent 工作流机械收缩工具 scope。
  • 用 SUGGESTED_FOLLOWUPS 模式:让模型报告观察而不动手。
  • 每次都审 diff / 输出。不要信模型的自述总结。

相关阅读

标签: #排查 #Prompt #Prompt 质量 #Prompt 工程