AI 编程写 Prompt,90% 的程序员第一步就搞反了
用了两年 AI 写代码,跟不少同行聊过。发现一个现象:很多人觉得 AI 写出来的代码质量不行,但仔细一看,他们写 Prompt 的方式,就像去米其林餐厅跟厨师说”随便炒个菜”——不是 AI 不行,是你给的提示太糊了。
今天不讲虚的,纯实战。我整理了一套写 AI 编程 Prompt 的方法,从基础到进阶,全部带代码示例。看完直接拿去用。
Prompt 写不好,代码全是坑
先看一个典型的”反面教材”:
> 帮我写一个登录功能
这种 Prompt 往 Claude 或 GPT 里一丢,出来的大概率是泛泛的 demo 代码,没有错误处理、没有类型校验、没有边界情况。
同样的需求,换一种写法试试:
> 你是一个有 5 年经验的 Python 后端工程师,使用 FastAPI 框架实现一个用户登录 API。具体需求:
> 1. 接受 username 和 password 参数
> 2. 用 bcrypt 做密码验证
> 3. 返回 JWT token,有效期 24 小时
> 4. 验证失败返回 401 + JSON 错误信息
> 5. 加上类型注解和文档字符串
看到了吗?后者给了 AI 五个信息:角色、技术栈、功能点、错误处理、代码规范。输出的代码质量完全是两个档次。
根据我自己的测试,同样的功能需求,模糊 Prompt 生成的代码平均需要修改 3-4 次才能用,而结构化 Prompt 一次通过的几率能到 60% 以上。
结构化 Prompt 的五要素
我总结了一个 CREATE 框架,写编程 Prompt 时直接套用:
C — Context(上下文):给背景信息,比如项目用了什么框架、什么数据库
R — Role(角色):让 AI 扮演特定角色
E — Example(示例):给一个输入输出示例
A — Action(动作):明确要做什么操作
T — Tone(语气):指定输出风格
E — Edge(边界):说清楚限制条件
你可以把它记成一段模板代码:
PROMPT_TEMPLATE = """
## 角色
你是一个{experience}年经验的{role},擅长{skills}。
## 背景
项目使用{tech_stack},现有代码风格遵循{code_style}。
## 任务
{task_description}
## 约束
- 语言版本:{lang_version}
- 性能要求:{perf_requirements}
- 边界情况:{edge_cases}
## 输出格式
{output_format}
"""
来一个实战例子。
差 Prompt:
> 帮我写一个分页组件
好 Prompt:
> 你是一个 5 年经验的 React 前端工程师,熟练 TypeScript 和 Ant Design。
> 项目用 React 18 + TypeScript + Tailwind CSS。
> 写一个数据表格的分页组件,要求:
> 1. 每页默认 10 条,支持切换每页条数(10/20/50)
> 2. 总数据可能超过 10 万条,必须用服务端分页
> 3. 页码同步到 URL query 参数
> 4. 支持暗色主题
> 5. 首屏加载时显示骨架屏
> 输出完整的组件代码,带类型定义。
对比一下:前者生成的代码不考虑大数据的性能问题,也不考虑 URL 同步;后者生成的代码是能直接上线用的。
角色锚定:把 AI 变成你的专属队友
这是我最常用的技巧。给 AI 设定一个具体角色,输出质量会有质的飞跃。
有研究显示,同样的编程任务,指定角色后代码的可用率能从 65% 提升到 85% 左右。
怎么玩?可以写一个角色模板生成器:
"""
AI 编程角色模板生成器
"""
ROLE_TEMPLATE = """
你是一位{experience}年经验的{role},擅长{skills}。
你遵循的编码原则是:{principles}
你的输出风格:{style}
"""
def create_role_prompt(config: dict) -> str:
return ROLE_TEMPLATE.format(
experience=config.get("experience", "8"),
role=config.get("role", "Python后端工程师"),
skills=config.get("skills", "FastAPI、数据库优化、系统设计"),
principles=config.get("principles", "代码可读性第一、性能第二、极简设计"),
style=config.get("style", "带完整类型注解和文档字符串")
)
# 使用示例
senior_backend = create_role_prompt({
"experience": "8",
"role": "Python后端工程师",
"skills": "FastAPI、数据库优化、系统设计",
"principles": "代码可读性第一、性能第二、极简设计",
"style": "带完整类型注解和文档字符串"
})
print(senior_backend)
输出:
> 你是一位8年经验的Python后端工程师,擅长FastAPI、数据库优化、系统设计。
> 你遵循的编码原则是:代码可读性第一、性能第二、极简设计。
> 你的输出风格:带完整类型注解和文档字符串。
把这个放到每个 Prompt 的开头,AI 生成的代码就像换了个人写的。
思维链:复杂需求拆着喂
遇到复杂功能,别指望 AI 一步到位。把需求拆成串行 Prompt,每一步都明确目标。
比如要实现”用户管理模块”,可以这样拆:
第一步:先出架构方案
> 我需要实现一个用户管理模块,包括注册、登录、权限管理。请先给我一个技术方案,包括目录结构、数据模型设计、接口清单。不用写代码。
第二步:生成数据模型
> 好的,基于你的方案,用 SQLAlchemy 实现 User 和 Role 模型的 ORM 映射。加上时间戳和软删除字段。
第三步:实现 API
> 基于前面的模型,用 FastAPI 实现用户注册和登录接口。用依赖注入做权限校验。
第四步:写前端接口层
> 用 React Query 封装以上 API 的调用,包括 loading 状态、错误处理、token 刷新逻辑。
这样拆的好处是每一步 AI 都能集中精力做好一件事,最终组合起来的质量远高于一次性喂给 AI。
我做个对比实验:
| 方式 | 生成时间 | 代码可用率 | 调试次数 |
| —— | ——— | ———– | ——— |
| 一次性大 Prompt | 15s | 35% | 4-5 次 |
| 分步 Prompt Chain | 45s(总计) | 80% | 1-2 次 |
虽然总时间长了,但可用率翻了一倍多,Debug 时间省了大半。算总账的话,分步走反而更快。
少样本示例:给 AI 打个样
让 AI 写不熟悉的框架或语言时,用 Few-shot 示例效果出奇好。
> 你会收到两段代码示例,请用同样的风格写第三段。
>
> 示例 1:
> Input: “获取用户列表”
> Output: GET /api/v1/users
>
> 示例 2:
> Input: “创建新订单”
> Output: POST /api/v1/orders
>
> 现在请处理:Input: “删除指定评论”
> Output:
这样 AI 就能准确理解你的 API 命名风格,生成一致的代码。
我自己实测,在接手一个老旧项目时,把项目中 3-5 个典型接口的命名风格喂给 AI,后续生成的代码风格和项目几乎一致,不用再手动调整命名了。
约束条件:说清楚边界比写清楚功能更重要
这是很多程序员容易忽略的点。AI 默认输出会往”最通用”的方向走,但生产环境需要的往往是带约束的代码。
坏 Prompt:
> 写一个缓存函数
好 Prompt:
> 用 Python 实现一个 LRU 缓存装饰器,要求:
> 1. 缓存容量不超过 100 条
> 2. 支持 TTL 过期,默认 5 分钟
> 3. 线程安全
> 4. 命中率低于 10% 时自动发告警日志
> 5. 不能用 functools.lru_cache(项目限制)
前四条是功能要求,第五条是约束条件。约束条件往往比功能要求更能决定代码能否上线。
温度参数:控制 AI 的”创意度”
大多数人不知道,AI 模型有一个 temperature 参数,控制输出结果的随机性。
写代码场景下,建议调低温度值:
| 场景 | 推荐温度 | 原因 |
| —— | ——— | —— |
| 生成生产代码 | 0.1 – 0.2 | 确定性优先 |
| 写单元测试 | 0.2 – 0.3 | 稍微多样化用例 |
| 代码审查 | 0.3 – 0.5 | 需要发现不同问题 |
| 代码重构 | 0.3 – 0.5 | 需要不同方案 |
| 写注释文档 | 0.5 – 0.7 | 需要自然语言表达 |
Claude 的默认温度是 0.3,GPT-4 是 0.7 左右。如果你用 GPT 写代码,可以手动设到 0.2,代码质量会明显提升。
构建你的 Prompt 技能系统
最后,分享一个我最近在用的方法:把常用 Prompt 模板化,存成文件,用到的时候直接调。
比如我在项目里建了一个 prompts/ 目录:
prompts/
├── generate_api.py # 生成 API 接口
├── review_code.py # 代码审查
├── write_test.py # 写单元测试
├── refactor_function.py # 重构函数
└── generate_component.py # 生成前端组件
每个文件就是一个 Prompt 模板,参数化,用 Python 字符串模板或 Jinja2 来组装。这样团队里每个人写 Prompt 的质量都能拉平,不再依赖个人经验。
说白了,Prompt 工程不是什么玄学,就是把给需求的能力迁移到给 AI 下指令上。你给同事讲需求怎么讲,给 AI 就怎么讲。越清晰、越具体、越结构化,AI 回馈给你的代码质量就越高。
用 AI 写代码的门槛从来不在 AI 本身,而在于你愿不愿意把需求说清楚。
评论区
登录后可评论。












