AI 提示词

面向编码智能体的提示词工程:把 Claude Code / Codex 调教成可靠协作者

让编码智能体一次写对的秘诀不在模型,而在指令质量。本文讲清楚上下文约束、最小修改原则、测试优先与代码审查提示的写法,教你写出高可复现、少幻觉的编码提示词。

作者:巧匠团队·8 分钟阅读·更新于 2026-09-06

把"目标"和"约束"分开写,别只给一句话需求

一句话需求是大多数翻车的根源:"优化这段代码"会导致工具自由发挥。给定心智模型是把提示拆成 目标(要实现的最终行为)+ 约束(不变式、不允许动的东西、必须通过的测试)+ 验收(怎样算完成)。

约束是防幻觉的主力:明确"不引入新依赖""只改 src/foo.ts""保持现有函数签名""不得破坏已存在测试"。约束给得越具体,工具越不会越权重构。

验收标准也很重要——"跑 pnpm typecheck 返回 0、eslint 无误、相关测试全绿",让 agent 有一个可以自检的终点,而不是"看起来改好了"。

## 目标
把 orders 列表改为服务端分页,保留现有 API 返回结构。
## 约束
- 只改 server/ 与对应的接口层文件,不碰前端展示
- 不引入新依赖;复用已有 SQLhelper
- 保持现有函数签名与错误码
## 验收
- pnpm typecheck 返回 0
- 相关接口测试全绿

喂够上下文,但别倾倒整个仓库

智能体只能基于你喂给它的信息做判断,上下文太少会开始猜。但把几千行文件全贴进去又会稀释注意力、提高幻觉率。技巧是给"索引 + 关键片段":告诉它项目结构、数据流入口、你要它动的那个文件的路径和大致职责。

约定一套"项目速览",如一页 CONTEXT.md 说明:目录作用、构建命令、测试入口、常用类型定义位置。每次任务下发时引用它,能显著降低 agent 误入错误文件的概率。

若依赖某个特殊领域知识(缓存策略、鉴权流程),单拎出来说明而不是让模型去搜索,搜索式的召往往更不可控。

# CONTEXT.md(团队维护的单页速览)
## 目录
- src/api/   请求层,签服务用 http-client
- src/domain/ 业务规则,含 order 状态机
## 命令
- test: pnpm vitest run
- typecheck: pnpm run typecheck
下发任务时开头引用:
"先读 CONTEXT.md 了解结构,再实现 X。"

用"测试优先"指令约束行为,而不是口头强调

想让 agent 写出的代码站得住,最有效的指令不是"请认真写",而是把验证机制写进去:"先为这个函数写单元测试,再实现到测试通过为止"。测试优先同时约束了行为边界与验收标准。

给出明确的测试入口命令与期望断言风格。例如 Nuxt/Vite 项目用 vitest,就说请用 describe/it 组织,断言优先用 expect(..).toEqual。这样产出的测试风格统一,也方便后续维护。

当任务大时,让 agent 拆解:先给一个实现计划(要创建/修改哪些文件、依赖顺序),你确认后再执行。这份计划本身就是一次"提前对齐",比在下半程返工便宜得多。

"先为 src/domain/discount.ts 的 applyDiscount 写单测
(describe/it,断言用 toEqual),当前先跑出失败;
再实现到全绿。最后贴出测试输出。"

给"错误示范 vs 修复"的对照,训练得准而不是试错

当你要它避免某种常见坏味道时,抽象说法传递有限,具体反例才有力。把"正确 vs 错误"两个片段都喂进去,明确标注哪段是坏的、为什么坏,agent 就更能判别边界。

这个方法也适用于风格约束:给它一份"本项目认可的做法"的真实代码样例作为锚点,让它照着锚点落地,而非泛泛的"保持风格一致"。

一份带修订标注的示例,往往胜过一页抽象规范。理由是智能体能从例子的具体性里还原出你的偏好,而不是靠猜测。

# 错误示范:在回调里同步读环境变量,导致测试切不到值
const onReady = () => doLogic(process.env.FLAG === "1");
# 修复示范:把 flag 作为参数注入,便于测试与替换
const onReady = (flag: boolean) => doLogic(flag);
# 指令:"避免示范 A 的写法,采用示范 B 的模式。"

用验收自检与"最小修改"做交付关口,跑完才算完

交付不是看代码量,而是过验收关。标准交付指令里应包含让 agent 自己跑的那套命令:typecheck、lint、test,并要求它把结果原样回贴,避免它自我欺骗说"应该没问题"。

同时死死压住"最小修改":查看 diff 时出现无关重构、删除的可疑代码、大面积格式重排,就要它回退并限定范围重来。要求 agent 用一句话解释每处改动,能顺便暴露"为了感动而改"的冗余。

最后一关是变更说明/release note:让它补一行"为什么这样改、影响哪些模块、是否需要文档更新"。这条主线贯穿始终,确保不是一次孤立的修改。

"完成后按验收跑一遍:pnpm typecheck、pnpm lint、pnpm test,
贴原始输出。逐条列改动 + 一句原因;
确认 diff 最小化,剔除无关重构。
补一行:影响模块 + 是否需要更新文档。"

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。