你用AI写代码,是"让我帮你写个函数",还是"这是我的项目结构,我需要..."?同样的AI,有人用来写脚手架代码,有人用来解决复杂架构问题。差距不在AI,在你怎么跟它说话。
作为一个每天用AI编程超过6小时的人,我把过去几个月踩过的坑和总结的经验整理成了8个实用技巧。每个技巧都有 Before/After 对比,看完就能直接用。
技巧1:给足上下文(最重要的一条)
AI不是读心术大师。你给的信息越少,它猜的越多,猜的越多,错的越多。
❌ Before(模糊提问)
帮我写一个用户登录的函数
AI会给你一个"通用版"登录函数——没有你的技术栈、没有你的数据库、没有你的认证方式。
✅ After(结构化上下文)
技术栈:Python + FastAPI + SQLAlchemy + PostgreSQL
当前项目结构:
- models/user.py:已有User模型,字段包括id, email, hashed_password, is_active
- auth/: 认证相关模块
- 我使用bcrypt做密码哈希,JWT做token
请帮我写一个登录接口 /auth/login:
- 接收email和password
- 验证密码(用passlib的verify)
- 返回JWT token(有效期24小时)
- 处理用户未激活的情况,返回403
结果?AI直接给出和项目完美匹配的代码,包括正确的import、错误处理、状态码。
关键原则:告诉AI它需要知道的一切,包括你"以为它知道"的信息。
技巧2:分步拆解(不要一次提大需求)
很多人喜欢把一个大需求一口气扔给AI,然后发现结果一塌糊涂。
❌ Before(一次性大需求)
帮我做一个电商系统的后台管理,包括商品管理、订单管理、用户管理、权限管理、数据统计
AI会给你一个四不像——每个模块都只有骨架,哪个都不能用。
✅ After(分步拆解)
第1轮:
我要做一个电商后台管理系统,使用 React + TypeScript + Ant Design + Express。
请帮我规划一下数据库表结构,先从商品模块开始:
- 商品(名称、价格、库存、分类、状态)
- 商品分类(树形结构)
- 商品图片(多图关联)
第2轮:
好的,数据库设计没问题。现在帮我写商品分类的后端API:
- GET /api/categories:获取分类树
- POST /api/categories:创建分类
- PUT /api/categories/:id:更新分类
- DELETE /api/categories/:id:删除分类(有子分类时不允许删除)
第3轮:
现在帮我写前端页面。商品分类管理页面需要:
- 左侧树形菜单展示分类
- 右侧表格展示当前分类下的商品
- 支持拖拽排序
- 支持搜索和筛选
每一步的结果都成为下一步的输入,AI的理解越来越精确。
技巧3:错误驱动(贴报错信息让AI修)
这是最高效的debug方式——AI见过无数人的错误,你的报错它大概率认识。
❌ Before(描述问题)
我的代码报错了,登录功能不能用,帮我看看哪里有问题
✅ After(贴完整报错)
运行以下代码时报错:
```python
@app.post("/login")
async def login(email: str, password: str):
user = await User.filter(email=email).first()
if not user:
raise HTTPException(404, "用户不存在")
if not verify_password(password, user.password):
raise HTTPException(401, "密码错误")
return {"token": create_token(user.id)}
报错信息:
TypeError: verify_password() missing 1 required positional argument: 'hashed_password'
User模型的password字段定义:
password = Column(String(255), nullable=False)
环境:passlib==1.7.4, bcrypt==4.0.1
贴报错信息的三个要素:
1. **代码片段**(出问题的那部分)
2. **完整报错信息**(不要只说"报错了")
3. **相关上下文**(环境版本、模型定义等)
---
## 技巧4:先写测试,再让AI实现(TDD式AI编程)
这个技巧来自测试驱动开发(TDD),用在AI编程上效果奇好。
### ❌ Before(直接让AI实现)
帮我写一个字符串工具类,包含驼峰转下划线、下划线转驼峰、首字母大写等功能
AI写的代码可能有问题,但你不知道。
### ✅ After(先写测试用例)
请帮我写以下函数的测试用例(使用pytest):
函数1:camel_to_snake("helloWorld") → "hello_world" 函数2:camel_to_snake("HTTPResponseCode") → "http_response_code" 函数3:camel_to_snake("already_snake") → "already_snake" 函数4:snake_to_camel("hello_world") → "helloWorld" 函数5:snake_to_camel("http_response_code") → "HttpResponseCode" 函数6:to_title_case("hello world") → "Hello World"
边界情况:
- 空字符串
- 全大写缩写(XMLHttpRequest → xml_http_request)
- 连续下划线(hello__world → hello_world)
测试通过后,你就有信心了。测试没通过?AI自己就能根据测试结果修正代码。
**更高级的用法:让AI同时写实现和测试,然后让它自己跑测试。**
请实现上面的字符串工具类,同时写完整的pytest测试。 要求:
- 先写测试,再写实现
- 运行测试,确保全部通过
- 测试覆盖所有边界情况
---
## 技巧5:用 @file 引用代码(不要复制粘贴)
当你的项目代码很长时,直接粘贴不仅麻烦,还会超出上下文窗口。现代AI工具都支持文件引用。
### ❌ Before(复制粘贴)
这是我的 user_service.py 的全部代码(500行): [粘贴500行代码]
请帮我优化数据库查询性能
### ✅ After(文件引用)
**在 Cursor / Cline / Claude Code 中:**
@models/user.py @services/user_service.py @tests/test_user.py
帮我优化 user_service.py 中的数据库查询:
- N+1查询问题
- 不必要的字段加载
- 缺少索引的查询条件
注意:这是Django项目,使用ORM
文件引用的优势:
- **不浪费token**:AI只读取需要的文件
- **保持格式**:不会因为复制粘贴丢失缩进
- **可以引用多个文件**:让AI看到完整上下文
- **随时更新**:AI读取的是最新版本
---
## 技巧6:角色扮演(让AI进入专家模式)
给AI设定一个角色,它的回答质量会显著提升。这不是玄学——系统提示词确实会引导模型的输出风格和专业度。
### ❌ Before(无角色)
帮我设计一个微服务架构
### ✅ After(专家角色)
你是一位有15年经验的后端架构师,擅长高并发系统设计,主导过日活千万的互联网产品架构。
我需要设计一个外卖平台的订单系统:
- 预期QPS:5000
- 需要支持:下单、支付、退款、评价
- 第三方集成:微信支付、支付宝
- 数据一致性要求:不能超卖
请给出:
- 整体架构图(用文字描述组件关系)
- 服务拆分方案
- 数据库设计
- 关键技术选型及理由
- 需要特别注意的坑
常用的专家角色:
- **"资深Go工程师"** → 写出地道的Go代码
- **"安全审计专家"** → 发现代码中的安全漏洞
- **"性能优化专家"** → 给出高效的算法和数据结构
- **"技术Leader"** → 从架构角度给出建议
- **"代码洁癖的工程师"** → 写出最干净整洁的代码
---
## 技巧7:否定指令(告诉AI"不要做什么")
有时候"不要做什么"比"要做什么"更重要。
### ❌ Before(只说要做的事)
帮我写一个Python爬虫,抓取豆瓣电影Top250
AI可能给你用 requests + BeautifulSoup,但你的项目用的是 Scrapy。
### ✅ After(加上约束条件)
帮我写一个爬虫抓取豆瓣电影Top250,要求:
✅ 必须做的:
- 使用 Scrapy 框架
- 支持断点续爬
- 数据保存到MongoDB
- 每个请求间隔2-5秒随机延迟
❌ 不要做的:
- 不要使用 requests 或 BeautifulSoup(项目统一用Scrapy)
- 不要硬编码URL,用settings配置
- 不要在pipeline中做数据清洗(交给单独的pipeline处理)
- 不要使用同步方式写入MongoDB(用motor异步驱动)
**否定指令的核心原则:排除你知道的"错误答案",缩小AI的选择空间。**
---
## 技巧8:迭代优化(第一版 → Review → 第二版)
不要指望AI一次给你完美答案。好的做法是:快速出第一版 → 自己Review → 反馈给AI优化 → 第二版。
### 实战演示
**第1轮:快速出初稿**
帮我写一个中间件,记录所有API请求的日志,包括:请求时间、响应时间、状态码、请求路径
**Review初稿后,发现几个问题:**
- 没有记录请求参数
- 没有记录用户信息
- 性能敏感的路径也需要记录(比如健康检查)
**第2轮:精准反馈**
初稿不错,但需要以下改进:
- 加上请求参数的记录(GET的query params和POST的body,但密码字段要脱敏)
- 加上当前用户ID(从JWT token中提取)
- 排除 /health 和 /metrics 路径,不需要记录
- 日志格式改为JSON,方便ELK收集
- 响应时间超过1秒的标记为WARN级别
**第3轮:最终打磨(可选)**
再加两个功能:
- 请求ID追踪(X-Request-ID header)
- 敏感字段列表做成配置,不要硬编码
**迭代的关键:每一轮的反馈越具体,AI的改进越精准。**
---
## 8个技巧速查表
| 技巧 | 一句话总结 | 收益 |
|------|-----------|------|
| 1. 给足上下文 | 告诉AI你的技术栈、项目结构、已有代码 | 代码可用率 60% → 90% |
| 2. 分步拆解 | 大需求拆成小任务,逐个击破 | 复杂任务成功率翻倍 |
| 3. 错误驱动 | 贴报错信息,让AI精准修复 | Debug效率提升10倍 |
| 4. 先写测试 | 用测试用例定义预期行为 | 代码质量有保障 |
| 5. @file引用 | 引用文件代替复制粘贴 | 节省token,保持上下文完整 |
| 6. 角色扮演 | 给AI设定专家角色 | 回答专业度和深度提升 |
| 7. 否定指令 | 明确告诉AI"不要做什么" | 避免方向性错误 |
| 8. 迭代优化 | 快速初稿 → Review → 精准反馈 | 最终代码质量接近手写 |
---
## 我的终极Prompt模板
把以上技巧组合起来,这是我日常用的高质量Prompt模板:
角色
你是一位资深 [语言/框架] 工程师,有10年开发经验。
任务
[具体要做什么,一句话说明]
技术栈
- 语言:[Python/Java/Go/...]
- 框架:[FastAPI/Spring Boot/Gin/...]
- 数据库:[PostgreSQL/MySQL/Redis/...]
- 其他:[Docker/Kubernetes/...]
项目上下文
[相关文件引用或代码片段]
具体要求
✅ 必须满足:
- [要求1]
- [要求2]
❌ 不要做:
- [禁止1]
- [禁止2]
输出格式
[期望的输出格式:纯代码/带注释/带测试/带文档]
---
## 写在最后
AI编程不是"把需求扔给AI然后等结果"。**Prompt的质量直接决定了代码的质量。**
这8个技巧的本质其实就一句话:**把AI当作一个能力很强但完全不了解你项目的同事——你需要给它足够的上下文、明确的方向、及时的反馈。**
当你的Prompt水平上来了,你会发现AI编程的效率真的能翻倍。不只是写代码快了,更重要的是写出来的代码质量更高、bug更少、更符合项目规范。
**试试把这些技巧用在你的下一次AI编程中,效果立竿见影。**
---
> 📌 **关注我,「AI工具提效实战指南」系列持续更新中。明天聊:API费用从500降到20——AI编程省钱完全指南。**