AI 编程最佳实践:如何让 AI 写出高质量代码

0 阅读7分钟

过去几周,我们聊了 Cursor 的安装、基础操作和高级技巧。但有一个问题一直没深入:如何让 AI 真正写出高质量代码? 今天,我们来聊聊 AI 编程的核心方法论。

AI 编程最佳实践


先泼一盆冷水

在开始之前,先说一个残酷的现实:

AI 不是银弹,你仍然需要懂代码。

如果你完全不懂编程,AI 写的代码你无法判断对错、无法调试、无法优化。AI 能帮你写代码,但不能替你承担责任

所以,本文的前提是:你已经有一定的编程基础。在这个基础上,我们讨论如何最大化 AI 的价值。


核心原则:你是架构师,AI 是施工队

用 AI 编程的正确姿势:

角色职责
定义需求、设计架构、审查代码、测试验证
AI生成代码、解释逻辑、重构优化、编写测试

你负责"做什么",AI 负责"怎么做"。

这就像建筑行业:建筑师画图纸,施工队盖房子。建筑师不需要亲自砌砖,但必须懂结构、材料、安全规范。


实践一:写好 Prompt,事半功倍

AI 写代码的质量,80% 取决于你的 Prompt。

坏 Prompt

写一个登录功能

AI 会给你一个通用的登录代码,可能:

  • 用了你不用框架
  • 数据库结构不匹配
  • 没考虑安全性
  • 没有错误处理

好 Prompt

Python Flask 写一个用户登录 API1. 接收 JSON:{"email": "xxx", "password": "xxx"}
2. 用 bcrypt 验证密码(用户表在 PostgreSQL3. 成功返回 JWT token,有效期 74. 失败返回 401 和错误信息
5. 添加请求日志和错误处理

这个 Prompt 包含了:

  • 技术栈:Python Flask
  • 输入格式:JSON 结构
  • 核心逻辑:bcrypt 验证 + JWT
  • 数据源:PostgreSQL
  • 边界条件:成功/失败的处理
  • 非功能需求:日志、错误处理

Prompt 模板

总结一个实用的模板:

【任务描述】用一句话说明要做什么
【技术栈】使用的语言、框架、库
【输入输出】数据格式、接口定义
【核心逻辑】关键业务规则
【约束条件】性能要求、安全要求
【参考代码】(可选)现有代码片段

实践二:分步迭代,不要一口吃成胖子

很多新手犯的错误:试图让 AI 一次写出完整功能。

错误示范

帮我写一个完整的电商购物车模块,包括:
添加商品、删除商品、修改数量、计算价格、
应用优惠券、库存检查、结算支付...

结果往往:

  • 代码过长,难以审查
  • 逻辑复杂,容易出错
  • 难以调试,出了问题不知道在哪里

正确做法:分步迭代

第一步:核心功能

写一个简单的购物车类:
- add_item(product_id, quantity)
- remove_item(product_id)
- get_total_price()

第二步:添加功能

给购物车添加优惠券功能:
- apply_coupon(code)
- 支持百分比折扣和固定金额

第三步:边界检查

添加边界检查:
- 数量不能为负数
- 商品不存在时报错
- 优惠券过期检查

第四步:测试用例

写单元测试覆盖所有场景

每一步的代码量可控,你可以:

  • 仔细审查每一步
  • 及时发现问题
  • 理解代码结构

实践三:审查代码,不要盲信

AI 生成的代码,必须审查。审查重点:

1. 安全性检查

# ❌ AI 可能生成的危险代码
query = f"SELECT * FROM users WHERE id = {user_input}"

# ✅ 应该改成参数化查询
query = "SELECT * FROM users WHERE id = %s"
cursor.execute(query, (user_input,))

常见安全问题:

  • SQL 注入:检查所有数据库查询
  • XSS:检查用户输入的渲染
  • 敏感信息泄露:检查日志、错误信息

2. 性能问题

# ❌ N+1 查询问题
for user in users:
    orders = get_orders(user.id)  # 每次循环都查询

# ✅ 批量查询
user_ids = [u.id for u in users]
orders = get_orders_by_user_ids(user_ids)

3. 错误处理

# ❌ AI 可能忽略错误处理
def get_user(id):
    return db.query(User).get(id)

# ✅ 完善的错误处理
def get_user(id):
    try:
        user = db.query(User).get(id)
        if not user:
            raise NotFoundError(f"User {id} not found")
        return user
    except DatabaseError as e:
        logger.error(f"Database error: {e}")
        raise

4. 边界条件

  • 空值处理
  • 数值溢出
  • 数组越界
  • 并发问题

实践四:让 AI 解释代码

在审查时,如果不确定某段代码的作用,直接问 AI:

请解释这段代码的逻辑,以及可能的边界问题

或者更具体:

这段代码在高并发场景下会有什么问题?

让 AI 自己审查自己,往往能发现问题。


实践五:善用上下文

在 Cursor 中,善用上下文可以大幅提高代码质量:

使用 @符号

  • @file main.py:引用特定文件
  • @folder src/:引用整个文件夹
  • @code:引用选中的代码
  • @docs:引用项目文档

示例

参考 @file models/user.py 中的 User 模型,
写一个用户注册 API,字段要和模型保持一致

这样 AI 会:

  1. 读取 models/user.py
  2. 理解字段定义
  3. 生成匹配的 API

实践六:写测试,再让 AI 改代码

一个高效的流程:

1. 写测试用例

def test_login_success():
    response = client.post("/login", json={
        "email": "test@example.com",
        "password": "correct_password"
    })
    assert response.status_code == 200
    assert "token" in response.json

2. 让 AI 实现功能

实现登录 API,让它能通过上面的测试

3. 运行测试,发现问题

测试失败,错误是密码验证不通过,请检查

4. 让 AI 修复

这个流程的好处:

  • 测试即文档
  • 回归有保障
  • AI 有明确的"正确答案"

实践七:建立代码规范

让 AI 遵循你的代码规范:

创建规范文件

在项目中创建 .cursorrules 文件:

# 项目代码规范

## 命名约定
- 函数:snake_case
- 类:PascalCase
- 常量:UPPER_SNAKE_CASE

## 注释要求
- 所有公开函数必须有 docstring
- 复杂逻辑添加行内注释

## 错误处理
- 所有 API 必须有 try-except
- 使用自定义异常类

## 日志
- 使用 structlog
- 记录请求 ID

在 Prompt 中引用

遵循 .cursorrules 中的代码规范,写一个用户服务类

实践八:保持代码简洁

AI 有时会过度设计。你要做减法:

过度设计的信号

  • 不需要的抽象层
  • 过早的优化
  • 用不到的设计模式
  • 过于复杂的配置

简化的原则

  1. YAGNI(You Aren't Gonna Need It):不需要的功能不要提前写
  2. KISS(Keep It Simple, Stupid):保持简单
  3. 最小可行方案:先跑起来,再优化

让 AI 重构:

这段代码过于复杂,请简化:
1. 去掉不需要的抽象
2. 使用更直接的实现
3. 保持功能不变

实践九:版本控制

使用 Git,为 AI 写的代码负责:

推荐流程

# 1. 创建功能分支
git checkout -b feature/user-login

# 2. AI 写代码...

# 3. 仔细审查后提交
git add .
git commit -m "feat: 添加用户登录 API"

# 4. 运行测试
pytest

# 5. 合并到主分支
git checkout main
git merge feature/user-login

Commit 规范

建议使用 Conventional Commits:

  • feat: 新功能
  • fix: 修复 bug
  • refactor: 重构
  • docs: 文档更新
  • test: 测试相关

实践十:持续学习

AI 编程不是一劳永逸,需要持续学习:

学习路径

  1. 基础:编程语言、数据结构、算法
  2. 框架:主流框架的设计理念和最佳实践
  3. 架构:设计模式、系统设计、性能优化
  4. AI 协作:Prompt 技巧、工具使用、效率提升

学习资源

  • 官方文档:永远是第一选择
  • 开源项目:学习优秀代码
  • 技术博客:了解前沿实践
  • AI 辅助:让 AI 解释概念、写示例

总结:AI 编程的黄金法则

法则说明
你负责需求、架构、审查、测试
AI 负责生成、解释、重构、优化
Prompt 决定上限花 5 分钟写好 Prompt,省 1 小时调试
分步迭代小步快跑,及时验证
必须审查AI 会犯错,你要兜底
测试为王有测试,才敢重构
保持简洁简单的代码是最好的代码
版本控制Git 是你的安全网

结语

AI 编程不是魔法,而是一门手艺。

好的工匠会用最好的工具,但工具不能替代工匠的技艺。

AI 让编程更快,但不会让编程更简单。 你仍然需要思考、设计、审查。

如果你能做到这几点,AI 就是你最强大的编程伙伴。