别让 AI 代码混进主分支:一份程序员真正用得上的避坑清单与配置模板
AI编程 使用避坑指南|附配置文件
AI 编程工具正在快速改变软件开发方式:它可以帮你补全代码、生成脚手架、解释报错、写单元测试、重构模块,甚至协助设计架构。但如果使用方式不当,它也可能带来“代码看起来能跑,实际上埋坑很多”的问题。本文将从实际开发视角出发,系统整理 AI 编程的常见误区、避坑方法、推荐工作流,并附上可直接参考的配置文件示例。
一、为什么需要 AI 编程避坑指南?
过去写代码,开发者主要依赖搜索引擎、官方文档、Stack Overflow、GitHub Issue 等资料来源。现在,AI 编程助手可以直接在编辑器里生成代码,甚至根据一句需求产出完整功能。
这确实提高了效率,但也带来了新的问题:
- AI 生成的代码不一定正确;
- AI 可能编造不存在的 API;
- AI 对项目上下文理解有限;
- AI 生成的方案可能不符合团队规范;
- AI 容易引入安全漏洞;
- 代码风格、依赖版本、架构边界可能被破坏;
- 初学者可能过度依赖 AI,导致基础能力退化。
因此,AI 编程不是“让 AI 替你写所有代码”,而是“让 AI 成为你的开发副驾驶”。真正高效的做法,是让 AI 参与重复性、探索性、辅助性工作,而不是把关键判断完全交出去。
二、AI 编程适合做什么?
在使用 AI 之前,首先要明确它适合承担哪些任务。
1. 适合 AI 处理的任务
AI 在以下场景中通常表现较好:
- 根据已有代码风格补全函数;
- 生成基础 CRUD 代码;
- 编写单元测试样例;
- 解释报错日志;
- 生成正则表达式并解释含义;
- 将代码从一种语言迁移到另一种语言;
- 为函数补充注释和文档;
- 根据接口定义生成类型;
- 编写简单脚本;
- 重构重复代码;
- 生成 Mock 数据;
- 根据 README 生成使用示例。
例如,你可以让 AI:
请根据这个 TypeScript 类型定义,为我生成 5 组 Mock 数据,并保证字段符合业务语义。
或者:
请帮我为这个函数编写 Jest 单元测试,覆盖正常情况、异常情况和边界情况。
这类任务边界清晰、验证成本低,适合交给 AI 辅助完成。
2. 不建议完全交给 AI 的任务
以下任务不建议完全依赖 AI:
- 核心业务架构设计;
- 数据库表结构设计;
- 权限系统设计;
- 支付、风控、认证、加密等安全敏感逻辑;
- 大规模重构;
- 线上故障修复;
- 性能瓶颈判断;
- 法务、合规、隐私相关处理;
- 复杂算法正确性证明;
- 关键业务规则实现。
这些任务需要结合真实业务背景、历史包袱、团队经验、线上数据和风险控制。AI 可以参与讨论和提供备选方案,但最终方案必须由开发者和团队审核决定。
三、AI 编程常见大坑
1. AI 会一本正经地胡说八道
AI 最大的问题之一,是它可能生成看似合理、实际上不存在的内容。
比如:
import { createFastCache } from "react-cache-plus";
这段代码看起来像真的,但你项目里可能根本没有这个库,甚至 npm 上也不存在这个包。
AI 可能会:
- 编造不存在的函数;
- 引用已经废弃的 API;
- 使用错误的参数;
- 混淆不同框架版本;
- 生成不能运行的示例;
- 忽略异步、异常和边界条件。
避坑建议
使用 AI 生成代码后,必须做三件事:
- 检查依赖是否真实存在;
- 检查 API 是否符合当前版本;
- 运行测试或最小 Demo 验证。
不要因为代码“看起来专业”就直接提交。
2. AI 不知道你的项目历史
很多项目不是从零开始的,而是经历过多次迭代,有自己的目录结构、编码规范、历史兼容逻辑和特殊约定。
AI 如果不了解上下文,很容易生成“理论上没错,但放到项目里不合适”的代码。
例如:
- 项目统一使用
axiosInstance,AI 却直接写fetch; - 团队规定接口错误统一走
handleApiError,AI 却在每个函数里单独try...catch; - 项目使用 Pinia,AI 却生成 Vuex 代码;
- 项目是 Next.js App Router,AI 却按 Pages Router 写;
- 后端统一使用 Repository 模式,AI 却直接在 Controller 里写 SQL。
避坑建议
使用 AI 前,先提供项目约束。例如:
请基于以下项目规范生成代码:
1. 前端框架:Vue 3 + TypeScript + Pinia;
2. 请求库:统一使用 src/utils/request.ts;
3. 代码风格:组合式 API;
4. 所有接口类型定义放在 src/types/api.ts;
5. 错误提示统一使用 ElMessage;
6. 不要直接使用 fetch 或 axios。
上下文越清晰,AI 输出越可靠。
3. AI 生成的代码可能有安全漏洞
AI 经常会为了“让代码跑起来”而忽略安全性。
常见问题包括:
- SQL 注入;
- XSS;
- 明文存储密码;
- JWT 不校验过期时间;
- Token 存在 localStorage 中且无防护;
- 文件上传不校验类型和大小;
- 接口缺少权限判断;
- 日志打印敏感信息;
- CORS 配置过宽;
- 使用弱加密算法;
- 直接拼接 Shell 命令。
例如,AI 可能生成这样的代码:
const sql = `SELECT * FROM users WHERE name = '${req.query.name}'`;
这显然存在 SQL 注入风险。
避坑建议
涉及以下内容时,一定要人工审查:
- 用户输入;
- 数据库查询;
- 登录认证;
- 权限控制;
- 文件上传;
- 加密解密;
- 第三方回调;
- 支付流程;
- 管理后台;
- 运维脚本。
并且要明确告诉 AI:
请注意安全性:
1. 不允许 SQL 拼接;
2. 必须使用参数化查询;
3. 不允许打印用户密码、Token、身份证号、手机号等敏感信息;
4. 所有用户输入都需要校验;
5. 请说明潜在安全风险。
4. AI 容易破坏代码一致性
团队开发中,代码一致性非常重要。一个项目里如果同时出现多种风格,会造成维护成本上升。
AI 可能会生成:
- 不同命名风格;
- 不同错误处理方式;
- 不同目录结构;
- 不同状态管理方式;
- 不同 CSS 写法;
- 不同组件拆分方式;
- 重复封装工具函数。
比如项目中已有 formatDate,AI 又生成一个 dateFormatter。功能差不多,但维护时容易混乱。
避坑建议
让 AI 优先复用已有代码:
请先检查我提供的已有工具函数和目录结构,不要重复创建功能相同的函数。
如果必须新增,请说明原因。
同时,可以在项目根目录维护一份 AI 使用说明文件,例如:
.ai-rules
.cursor/rules
.github/copilot-instructions.md
后文会提供示例配置。
5. AI 会让你忽视基础能力
AI 很强,但不能替代基本功。尤其是初学者,如果一遇到问题就让 AI 直接给答案,很容易变成“复制粘贴型开发”。
长期来看,这会导致:
- 看不懂自己提交的代码;
- 无法判断 AI 输出是否正确;
- 遇到复杂问题不会拆解;
- 缺乏调试能力;
- 对框架原理理解薄弱;
- 面试时无法解释项目实现。
避坑建议
使用 AI 时,尽量要求它解释原因:
请不要只给代码,请解释:
1. 为什么这样设计;
2. 关键逻辑是什么;
3. 有哪些边界情况;
4. 有没有其他实现方式;
5. 这段代码可能有什么问题。
AI 应该是学习加速器,而不是思考替代品。
四、推荐的 AI 编程工作流
1. 先让 AI 理解需求,不要直接写代码
很多人使用 AI 的方式是:
帮我写一个登录功能。
这个提示太粗糙,AI 只能凭空猜。
更好的方式是:
我需要实现一个后台管理系统登录功能。
技术栈:Vue 3 + TypeScript + Element Plus + Pinia。
登录接口:POST /api/login。
请求参数:username、password。
返回字段:token、userInfo。
要求:
1. 表单需要校验用户名和密码必填;
2. 登录成功后保存 token;
3. 获取用户信息后跳转到 /dashboard;
4. 请求错误时展示错误提示;
5. 请使用组合式 API;
6. 请先给出实现方案,再写代码。
这样 AI 输出的代码会更贴近真实需求。
2. 让 AI 先出方案,再生成代码
推荐流程:
- 描述需求;
- 让 AI 拆解任务;
- 审核方案;
- 修改不合理部分;
- 再让 AI 生成代码;
- 运行测试;
- 人工 Review;
- 提交。
示例提示词:
请先不要写代码。
请根据以下需求,给出技术方案、文件结构、关键数据流和风险点。
等我确认方案后,再开始生成代码。
这样可以避免 AI 一上来就生成一堆不适合项目的代码。
3. 小步提交,不要一次生成太多
AI 一次生成上千行代码,看起来很爽,但 Review 成本极高。代码越多,隐藏问题越多。
建议:
- 一次只生成一个函数;
- 一次只改一个模块;
- 一次只处理一个明确问题;
- 每次生成后立即运行;
- 每一步都提交 Git;
- 不要把未理解的代码混进主分支。
例如:
请只修改 userService.ts 中的 getUserList 方法,不要修改其他文件。
或者:
请只生成这个函数的单元测试,不要改业务代码。
4. 让 AI 写测试,而不是只写功能
很多开发者让 AI 写业务代码,却忽视测试。实际上,AI 非常适合写测试初稿。
你可以这样使用:
请为以下函数编写单元测试,要求:
1. 使用 Vitest;
2. 覆盖正常输入;
3. 覆盖空值;
4. 覆盖非法输入;
5. 覆盖边界值;
6. 不要修改原函数。
测试可以帮助你验证 AI 生成代码是否符合预期,也能减少后续维护风险。
5. 让 AI 做代码审查
AI 不仅能写代码,也能帮你检查代码。
示例提示词:
请作为资深代码审查者,检查以下代码:
1. 是否存在 bug;
2. 是否有安全风险;
3. 是否有性能问题;
4. 是否符合 TypeScript 最佳实践;
5. 是否有更好的重构方式;
6. 请按严重程度排序输出。
不过要注意,AI Review 不能替代人工 Review,尤其是核心业务代码。
五、高质量提示词模板
1. 需求实现模板
你是一个资深前端工程师。
请基于以下信息实现功能:
【技术栈】
- Vue 3
- TypeScript
- Vite
- Element Plus
- Pinia
【业务需求】
实现用户登录页面。
【接口信息】
POST /api/login
请求参数:
- username: string
- password: string
返回:
- token: string
- userInfo: {
id: number;
name: string;
roles: string[];
}
【实现要求】
1. 使用组合式 API;
2. 表单校验用户名和密码必填;
3. 登录成功后保存 token;
4. 登录失败展示错误提示;
5. 不要直接使用 fetch,请使用项目中的 request 工具;
6. 代码需要包含类型定义;
7. 请先给出实现方案,再输出代码。
【输出格式】
1. 文件结构;
2. 实现思路;
3. 完整代码;
4. 注意事项。
2. Bug 排查模板
你是一个资深后端工程师。
请帮我分析以下错误。
【技术栈】
- Node.js
- NestJS
- Prisma
- PostgreSQL
【问题现象】
接口偶尔返回 500。
【错误日志】
粘贴日志内容。
【相关代码】
粘贴代码内容。
【希望你输出】
1. 可能原因;
2. 排查步骤;
3. 最可能的问题;
4. 修复建议;
5. 如何增加日志和测试。
3. 代码重构模板
请帮我重构以下代码。
要求:
1. 不改变外部行为;
2. 保持函数签名不变;
3. 提高可读性;
4. 减少重复逻辑;
5. 保持现有错误处理方式;
6. 给出重构前后的差异说明;
7. 不要引入新的第三方依赖。
4. 安全审查模板
请从安全角度审查以下代码。
重点检查:
1. SQL 注入;
2. XSS;
3. CSRF;
4. 权限绕过;
5. 敏感信息泄露;
6. 文件上传风险;
7. SSRF;
8. 命令注入;
9. 日志泄露;
10. 依赖安全风险。
请按以下格式输出:
- 风险等级;
- 问题描述;
- 影响范围;
- 修复建议;
- 示例代码。
六、项目级 AI 配置文件示例
下面提供几份常见 AI 编程工具可参考的配置文件。不同工具名称略有差异,但核心思想一致:告诉 AI 项目的技术栈、代码规范、目录结构、禁止事项和输出要求。
1. .cursor/rules/project.mdc
如果你使用 Cursor,可以在项目中添加规则文件。
---
description: 项目通用开发规则
globs:
- "**/*"
alwaysApply: true
---
# 项目通用规则
## 技术栈
- 前端框架:Vue 3
- 开发语言:TypeScript
- 构建工具:Vite
- UI 组件库:Element Plus
- 状态管理:Pinia
- 请求库:统一使用 `src/utils/request.ts`
- 测试框架:Vitest
- 包管理器:pnpm
## 代码风格
1. 所有新代码必须使用 TypeScript。
2. Vue 组件必须使用 `