代码生成提示词最佳实践:让 AI 写出生产级代码

HTMLPAGE 团队
12 分钟阅读

掌握特定语言的 Prompt 技巧,学会生成单元测试、文档与重构建议,提升 AI 编程效率。

#Prompt Engineering #AI Coding #GitHub Copilot

代码生成提示词最佳实践:让 AI 写出生产级代码

AI 辅助编程(AI Coding)已经成为开发者的标配。但很多人发现,有时候 AI 写的代码“一眼假”,或者充满了细微的 Bug。这往往不是模型不够聪明,而是我们的**提示词(Prompt)**不够精准。

本文将深入探讨如何编写高质量的代码生成提示词,从上下文提供到特定任务的优化,助你让 AI 写出真正的生产级代码。

核心原则:Context is King(上下文为王)

AI 不会读心术。它只能根据你提供的信息进行推理。一个好的代码生成 Prompt 必须包含三个要素:

  1. 明确的目标:你要做什么?(写函数、修 Bug、写测试?)
  2. 必要的上下文:相关的类型定义、依赖库版本、现有代码结构。
  3. 约束条件:代码风格、命名规范、错误处理方式。

❌ 糟糕的 Prompt

"写一个登录页面。"

✅ 优秀的 Prompt

"使用 React 19 和 Tailwind CSS 编写一个登录组件。需包含邮箱和密码输入框,使用 react-hook-form 进行验证。登录成功后调用 useAuth hook 的 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 框架。 请包含以下测试用例:

  1. 正常情况(Happy Path)。
  2. 边界情况(空输入、负数、超大数值)。
  3. 异常处理(网络错误、无效 ID)。

粘贴代码"

场景三:生成技术文档

让 AI 解释复杂的正则表达式或遗留代码(Legacy Code)是它的强项。

Prompt 示例:

"请解释这段代码的作用,特别是第 15-20 行的算法逻辑。并为它生成符合 JSDoc 标准的文档注释,说明参数、返回值和可能抛出的异常。"

场景四:代码重构

不要只说“优化这段代码”。要具体指出优化的方向。

Prompt 选项:

  • 性能优化: "请优化这段代码的时间复杂度,当前的嵌套循环在数据量大时太慢。"
  • 可读性优化: "请重构这段代码,提取复杂的逻辑为独立的小函数,并使用更有意义的变量名。"
  • 现代化改造: "请将这段使用了 var 和回调地狱的旧 JavaScript 代码重构为使用 cost/letasync/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 一遍你的代码。