昨天用 Claude Code 时踩了个坑,事后复盘才发现,问题不在 AI,而在我给它加的“限制”上。

事情很简单:我让它实现一个功能,顺手加了几句限制条件。心里想着这样能更精准地控制输出,结果它给了我一套复杂的方案。我当时觉得奇怪——这明明是个简单需求,怎么搞得这么绕?

后来一问才发现,那个复杂的方案,恰恰是因为我的限制条件导致的。而它默认了我的指令是深思熟虑的,二话不说就照做了,完全没有提醒我“老板,你这个限制会让事情变复杂”。

这个经历让我重新审视了和 AI 编程工具的协作方式。

Agent 只会执行指令,不会质疑指令

这是 Claude Code、Cursor 这类 AI 编程工具的一个核心特点:它们是被设计来“完成任务”的,而不是“挑战需求”的。

你告诉它“必须用递归”,它就用递归。即使那个场景下递归会导致栈溢出、可读性极差,它也不会主动跳出来说:“这个需求用循环更合适。”

就像一个极其听话的初级程序员——你让他绕远路,他二话不说就绕。不是他笨,是他默认你的指令是深思熟虑过的。

这对使用者的要求其实更高了。 你需要清楚地表达意图,还要预判你的表达方式会不会把 Agent 引向歧途。

从“下命令”转变为“对齐目标”

想明白这点后,我总结了几条实用原则。

1. 主动要求它“说出你的理解”

下达复杂指令后,加一句:

“在执行前,先复述一遍你对我的要求和限制的理解,并评估这些限制是否会增加不必要的复杂度。”

这能让 Agent 在动手前先和你“对焦”。如果它理解了限制但预见到会导致复杂方案,就会提前告诉你。

2. 把限制变成“权衡”而非“死命令”

试试把表述方式从“必须如何”改成“我想要什么,但可以讨论”。

· ❌ 死命令:“必须用递归实现,不能写循环。”
· ✅ 解释目标:“我想学习递归思维,请用递归实现。但如果你发现递归会导致代码难以理解或有栈溢出风险,请指出并推荐更合适的方案。”

这样 Agent 会优先实现递归,但遇到问题时,会像同事一样提醒你:“老板,递归在这里会让内存暴增,换成循环更稳,你看行吗?”

3. 多用“为什么”来追问

当得到一个复杂方案时,养成追问的习惯:

“这个方案好像挺复杂,是不是因为我的某个要求导致的?有没有更简洁的替代方案?”

这个简单的提问可以直接点破那层窗户纸。Agent 会回溯你的限制条件,分析哪些是“复杂度元凶”。

4. 在项目里放一个 CLAUDE.md

Claude Code 支持在项目根目录放置 CLAUDE.md 文件,作为长期生效的协作指南。这是我的文件内容:

```markdown
# 项目协作原则
- 简洁优先:如果我的某个限制导致方案明显变复杂,请立即指出并建议替代方案。
- 解释决策:给出方案时,简要说明为什么这么做。
- 遇到歧义先提问,别猜。
```

每次启动时它都会读取这份“协作风格指南”,从根源上减少类似问题。

5. 分步验证,别一步到位

对于关键任务,让 Agent 先做计划而非直接执行:

“先别写代码,列出实现步骤,并标出哪一步是因为我的XX限制而额外增加的。”

这样你就能在代码产出前,直观地看到限制带来的成本,随时叫停或修改。

总结

这次经历让我意识到,AI 编程工具的本质是推理-行动循环系统——它忠实执行指令,不会主动质疑指令的合理性。这既是它的能力边界,也是我们需要适应的协作模式。

用好它的关键,不是写出更精确的指令,而是建立一种允许它“温和质疑”的对话机制。下次遇到类似情况,试试这句关键咒语:

“在执行前,先评估这些限制是否会带来不必要的复杂度。”

省下的时间,可能比你想象的多。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐