代码生成提示词最佳实践:让 AI 写出生产级代码
AI 辅助编程(AI Coding)已经成为开发者的标配。但很多人发现,有时候 AI 写的代码“一眼假”,或者充满了细微的 Bug。这往往不是模型不够聪明,而是我们的**提示词(Prompt)**不够精准。
本文将深入探讨如何编写高质量的代码生成提示词,从上下文提供到特定任务的优化,助你让 AI 写出真正的生产级代码。
核心原则:Context is King(上下文为王)
AI 不会读心术。它只能根据你提供的信息进行推理。一个好的代码生成 Prompt 必须包含三个要素:
- 明确的目标:你要做什么?(写函数、修 Bug、写测试?)
- 必要的上下文:相关的类型定义、依赖库版本、现有代码结构。
- 约束条件:代码风格、命名规范、错误处理方式。
❌ 糟糕的 Prompt
"写一个登录页面。"
✅ 优秀的 Prompt
"使用 React 19 和 Tailwind CSS 编写一个登录组件。需包含邮箱和密码输入框,使用
react-hook-form进行验证。登录成功后调用useAuthhook 的login方法。请确保组件也是响应式的,在移动端全宽显示。"
场景一:生成业务逻辑代码
在生成复杂的业务逻辑时,采用 "Chain of Thought"(思维链) 策略非常有效。
技巧:先写注释,再写代码
不仅是你写注释,而是要求 AI 先生成注释规划,再生成代码。
Prompt 示例:
请用 Python 编写一个处理订单退款的函数 `process_refund`。
输入:order_id, amount
逻辑:
1. 检查订单状态是否为 'completed'。
2. 检查退款金额是否超过订单总额。
3. 调用支付网关 API(假设为 stripe.refund)。
4. 更新数据库状态为 'refunded'。
5. 发送邮件通知用户。
请先在代码中用注释写出步骤,然后一步步实现代码。
AI 输出示例(Python):
def process_refund(order_id: str, amount: float):
# 1. 获取订单并检查状态
order = get_order(order_id)
if order.status != 'completed':
raise ValueError("只有完成的订单才能退款")
# 2. 检查退款金额
if amount > order.total_amount:
raise ValueError("退款金额不能超过订单总金额")
try:
# 3. 调用支付网关 API
stripe.refund(order.payment_intent_id, amount)
# 4. 更新数据库状态
order.status = 'refunded'
order.save()
# 5. 发送邮件通知
send_email(order.user_email, "您的退款已处理")
except Exception as e:
log_error(f"退款失败: {e}")
raise e
场景二:生成单元测试
AI 是编写单元测试的神器。关键在于告诉它测试框架和覆盖场景。
Prompt 模板:
"为下面的 TypeScript 函数编写单元测试。使用 Jest 框架。 请包含以下测试用例:
- 正常情况(Happy Path)。
- 边界情况(空输入、负数、超大数值)。
- 异常处理(网络错误、无效 ID)。
粘贴代码"
场景三:生成技术文档
让 AI 解释复杂的正则表达式或遗留代码(Legacy Code)是它的强项。
Prompt 示例:
"请解释这段代码的作用,特别是第 15-20 行的算法逻辑。并为它生成符合 JSDoc 标准的文档注释,说明参数、返回值和可能抛出的异常。"
场景四:代码重构
不要只说“优化这段代码”。要具体指出优化的方向。
Prompt 选项:
- 性能优化: "请优化这段代码的时间复杂度,当前的嵌套循环在数据量大时太慢。"
- 可读性优化: "请重构这段代码,提取复杂的逻辑为独立的小函数,并使用更有意义的变量名。"
- 现代化改造: "请将这段使用了
var和回调地狱的旧 JavaScript 代码重构为使用cost/let和async/await的现代 ES6+ 风格。"
高级技巧:Few-Shot Prompting(少样本提示)
如果你有特定的代码风格要求,最好的办法是给 AI 看一个例子。
Prompt 示例:
请按照以下风格编写一个新的 API 接口 `/api/users`。
参考风格(Existing Code):
app.get('/api/posts', async (req, res) => {
try {
const posts = await db.posts.findMany();
res.json({ success: true, data: posts });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
});
任务:编写获取用户列表的接口,支持分页查询。
总结
编写代码生成 Prompt 的过程,其实就是明确需求的过程。当你对其说话越像个资深技术 Lead(清晰、具体、关注边界),它表现得就越像个资深工程师;反之,如果你说得含糊不清,它也就是个刚入门的实习生。
下一步行动:
- 在你的 IDE(如 VS Code 或 Cursor)中配置常用的 Prompt 模板。
- 尝试使用 "Explain this code" 功能来理解陌生的库。
- 在 Code Review 中,尝试让 AI 先 Review 一遍你的代码。


