代码评审意见提示词优化:让AI先判断再输出更具体
很多AI提示从业者头疼的问题是,Claude在代码评审时总爱直接甩结论,比如冷不丁来一句“建议改用MapSet避免重复遍历”——你根本不知道它这个判断是怎么来的。要让它老老实实展示推理过程,关键是逼着它走“推理链”路径,不然它十有八九会跳过分析过程。
用三段式结构锁死推理顺序
第一步,明确指令。告诉它必须分阶段输出,而且阶段之间不能合并。直接在系统提示词或每次请求的开头写上:
【请严格按以下三阶段输出,不得合并或省略任何一阶段】→第一阶段:指出问题代码行号及原始片段→第二阶段:用「因为」开头说明该写法导致的具体后果(如CPU飙升、内存泄漏、竞态条件),引用你看到的上下文证据→第三阶段:给出可复制粘贴的修改后代码,含必要注释。
这个【】里的强制约束一旦漏掉,Claude就会自发压缩步骤,把“因为”藏在第三阶段里一带而过。实际测试显示,光去掉“不得合并”四个字,30%的响应会直接跳过第二阶段。
注入上下文锚点防止空泛分析
方法一:在提供待评审代码前,先插入一行锚点声明:
「当前代码运行环境:Node.js 18.17 + Express 4.18,数据库为PostgreSQL 15,ORM使用Prisma 5.12」
方法二:对高危模式加显式标记。在代码块内用注释标出可疑区域:// ⚠️ WARNING: 此处未处理req.body.id为空字符串的情况
没有这两类锚点,Claude很容易脱离实际环境泛泛而谈“应校验输入”,却完全忽略一个致命细节:Express中间件中req.body.id为空字符串时,会被Prisma当作有效值传入查询。
用错误示例反向约束输出格式
在提示词末尾附一个明确的错误示范和修正要求:
❌ 错误输出示例:“建议添加防抖”→这种回答不满足要求,因为没有说明触发场景、没有指出当前debounce实现缺失时间参数、没有给出适配Lodash 4.x的完整调用代码。
✅ 正确输出必须包含:① 触发场景(用户快速连点按钮导致重复提交)② 当前代码缺陷(debounce()调用未传入wait毫秒数)③ 可运行代码(【const handleClick = debounce(() => { submitForm(); }, 300);】)
这个对比能立刻拉齐Claude对“具体”的认知。测试发现,加入错误示例后,含行号+上下文证据的响应比例从42%直接飙升至89%。
