范围与边界
Scope & Boundary也常被叫作:改哪里不改哪里范围限定别乱动
「我只让他改一个小地方,结果他把整个页面都重写了。」
范围与边界 Scope & Boundary
在需求里写清「只改哪里」和「不许动什么」,是防止 AI 顺手重构的唯一有效手段。
先说我们真踩过的一个坑。给家用机器做启动脚本时,边界就一句话:改一行 IP 指向,其余逐行保持。为什么写得这么死?因为上一版家用包沿用了公司环境的启动脚本,首开就弹「示例不可用」——包里根本没带公司才有的演示图。复制脚本时最容易出事的,就是这种继承来的隐含前提:每一行看起来都没错,合起来默认了一个不存在的环境。
往大了说,AI 顺手改坏别处,几乎从不是它恶意,而是你的需求给了它自由。「帮我优化一下这个页面」这句话里,没有任何一处告诉它「不要动配色」「不要动下面的列表」,所以它必须自己决定——而它决定的依据是通用审美,不是你的项目。
所以边界这一句的价值高得离谱:它把「我要什么」补成了「我不要什么」。通用需求里,加上一句「不要改配色和布局」,能挡掉大约八成的意外破坏。更狠一点的写法是同时限定文件范围:「只改 src/app/page.tsx 里的顶部区域」。范围一旦落到具体文件,你验收时也变简单了——问一句「你改了哪些文件」,多出来的就是越界。
边界写不好也有两个典型反面:一种是边界写得像没有,比如「请优化一下体验」「按最佳实践处理」,这种话等于授权它自由发挥;另一种是边界密到任务推不动,每个参数都要你点头,AI 索性只做最小的事然后等指示。好的边界是「告诉它禁区在哪,禁区之外按现有惯例自由发挥」。
还有一条实战经验:边界要写「不许动什么」,不要只写「要改什么」。只写后者时,AI 会默认范围内外都能碰;写了前者,它才会在碰到禁区前停下来问你。两个都写,返工率会明显下降。
长什么样 真实可交互,不是截图
右边并没有变得更啰嗦,它只是把你脑子里本来就有的限制说出来了。
拆开看,里面有这几块
-
1
范围 Scope
改哪个页面、哪个文件、哪一块区域。越具体越好。
-
2
边界 Boundary
明确不许动什么。这一句是整段需求里性价比最高的。
-
3
越界处理 Escalation
遇到范围外必须改的东西时,让他先问你,而不是自己决定。
容易搞混?这样区分
什么时候用得上
越小的改动越要写边界。大改动你本来就会盯着,小改动最容易被顺手扩大。
先说「现在这几处我很满意,不要动」,再说要改什么。
问「你一共改了哪些文件」。清单外的每一项都要问原因。
你可以这样跟 AI 说
直接复制下面这段,把【】里的换成你的情况。它比一句「帮我加个 X」多说清楚了:改哪里、不许动啥、做完交什么。
【范围】只改 [具体文件 / 页面 / 区域] 【目标】[改完要达到的可观察效果] 【边界】以下内容一律不要动: - 配色、字体、整体布局 - [其他页面 / 其他组件] - 数据结构和接口 - 不要新增任何依赖 - 不要顺手"优化"我没提到的地方 【遇到冲突怎么办】如果你认为必须改动范围外的东西才能达成目标,先停下来告诉我原因,等我确认,不要自己决定。 【交付】列出你实际改动的每一个文件;如果清单里出现了范围外的文件,单独说明原因。
「不要顺手优化我没提到的地方」这一句看起来多余,实际非常有用——它把「善意的自作主张」也明确划到了边界外。
它说「做好了」,你怎么自己验
这是本站的重头戏。AI 最会的不是写代码,是说「已完成」。这一条,它通常最多做到「实现」这层:代码写完了,能读能改,但没被验证过。
要亲眼看到这些,才算数
- 问「你一共改了哪些文件」,逐个对照你给的范围。多出来的每一个都要问原因。
- 打开你说过「不要动」的那几处,亲眼确认它们没变(配色、布局、其他页面)。
- 确认没有新增依赖(问一句「有没有装新包」)。
- 如果他改了范围外的东西,确认他提前问过你,而不是事后解释。
它常这么糊弄你
- 「顺便帮你优化了一下其他地方」——这就是越界,即使改得不错。今天能顺手改好,明天就能顺手改坏。
- 「为了实现这个功能,必须调整一下结构」——可能是真的,但应该在动手前说,不是完成后通知。
- 只汇报了主要改动,没提附带改动。所以要问「一共」哪些文件,而不是「主要」改了什么。
- 文件数量对得上,但某个文件里被大段重写。可以顺手问一句「这个文件你改了几行」。
边界能验到「实现」层:对照文件清单和你标记为不许动的地方,不需要跑起来就能查。
考考你 选一个你觉得对的
你想让 AI 调整注册表单的间距。哪种说法最不容易出事?
A 同时给了范围(注册表单的间距)、具体目标(数字)和边界(不改字段、校验、配色、其他页面)。B、C、D 都把「改到什么程度」和「能动什么」的决定权交了出去——而 D 更危险,因为「参考主流产品」通常意味着整套视觉都会被换掉。