第五章:Prompt 才是新时代程序员的核心技能


为什么 Prompt 是核心技能?

以前大家说程序员的核心能力是算法、数据结构、框架经验。现在这些当然还重要,但在 AI 编程时代,多了一个非常现实的新能力:把问题讲清楚

注意,不是"会说话",而是:

  • 会提需求
  • 会给上下文
  • 会设边界
  • 会分步骤
  • 会定义验收标准

说白了,Prompt 写得好的人,本质上是"沟通成本极低的人"。 不只是和 AI 协作,和人协作也通常更强。

这也是为什么 Prompt Engineering 不只是一个 AI 技能,更是一种工程思维。


从"废 Prompt"到"有效 Prompt"

废 Prompt 的特征

最典型的废 Prompt:帮我写个电商系统

这个 Prompt 废在哪?

  • 范围无限大:电商系统有多少功能?商品管理、订单、支付、库存、用户、物流…
  • 没有技术栈:React 还是 Vue?FastAPI 还是 Spring Boot?
  • 没有阶段目标:要先做什么?MVP 是什么?
  • 没有优先级:什么是必须的,什么是可选的?
  • 没有验收标准:什么叫"写好了"?

AI 遇到这种需求,只能生成一堆"看起来很全、实际上不可落地"的内容——一堆文件结构、大量注释、看起来很完整但跑不起来的骨架。

有效 Prompt 的特征

把同一个需求重新描述:

请用 FastAPI + PostgreSQL + Redis 实现订单模块 MVP。

要求:
1. 支持创建订单、查询订单、取消订单
2. 订单状态包含:待支付、已支付、已取消
3. 取消订单仅允许待支付状态
4. 使用 SQLAlchemy 作为 ORM
5. 先给出数据库表设计,再实现 API
6. 输出代码时按文件分别展示
7. 每一步都说明为什么这样设计

这就从"空泛愿望"变成了"可以执行的工程任务"。


一个好 Prompt 的六要素

要素一:角色(可选)

给 AI 设定角色,不是必须,但有时有帮助。

你是资深后端工程师,专注 Python 和 FastAPI

或者:

你是一个代码审查专家,擅长发现安全漏洞和性能问题

这会帮助模型更快进入你希望的输出风格。

什么时候有用:你希望 AI 以某个特定视角来分析问题时。
什么时候没必要:简单的功能实现,任务已经很明确,角色设定意义不大。

要素二:上下文

告诉它你当前处在什么环境里:

背景:
- 这是一个 B2B SaaS 项目
- 技术栈:Next.js 14 + Prisma + PostgreSQL
- 当前正在开发订单管理模块
- 前端已完成,现在需要后端 API

上下文的关键点:只给相关的。把整个项目背景都讲一遍,反而会稀释重点。

要素三:目标

这次只要它干什么。

目标:实现订单创建接口

目标要唯一、明确、可验证。避免"优化、完善、处理好"这类模糊动词。

要素四:约束(最重要的部分之一)

这是帮助 AI 不乱跑的护栏:

约束:
- 不允许新增依赖(项目依赖已经固定)
- 只能修改指定的两个文件
- 保持现有接口的参数格式兼容
- 不要重构无关代码

约束不是限制 AI 的能力,而是让它的能力用在正确的地方。

要素五:输出格式

你想要它怎么交付:

输出格式:
1. 先分析实现方案(不超过 200 字)
2. 按文件分别输出代码
3. 每个文件开头注明文件路径
4. 最后给一个测试用的 curl 示例

明确输出格式,你就不用从一大段文字里去猜哪些是代码、哪些是解释。

要素六:分步执行

千万别一上来就"全部做完"。越大的任务,越要拆。

不要一次性做完所有功能,先只做:
1. 数据库表结构设计
等我确认表结构没问题,再进入 API 实现阶段

Prompt 写法进阶:七个实战技巧

技巧一:把 AI 当"刚加入团队的高级工程师"

为什么是这个心法?因为这样你天然会做对几件事:

  • 不会默认它知道你们业务
  • 会主动补背景
  • 会告诉它团队规范
  • 会给它具体任务而不是抽象口号
  • 会要求它解释关键决定

技巧二:要求先分析再执行

请先分析这个 bug 的可能原因(给 2-3 个假设),
不要写代码,等我选定方向后再修复

这样你可以用很少的 Token 先对齐方向,避免一个错误方向写了几百行代码。

技巧三:让 AI 列出前置假设

在写代码前,请先列出你的前置假设:
1. 你假设我的数据库用的是什么版本?
2. 你假设的认证方式是什么?
3. 你假设的错误处理策略是什么?

这样你能提前发现假设错误,而不是代码写完才发现方向不对。

技巧四:让 AI 检查自己的输出

写完代码后,请检查:
1. 是否有明显的 null 引用风险?
2. 是否有潜在的安全问题(SQL 注入、XSS)?
3. 是否有你不确定的 API 用法需要标注?

技巧五:给 AI 负面示例

我不想要这种写法:
fetch('/api/user').then(res => res.json()).then(data => setUser(data))

我想要这种写法:
try {
  const data = await api.getUser()
  setUser(data)
} catch (error) {
  handleApiError(error)
}

给对比示例,比只说"写得好一点"有效 10 倍。

技巧六:用迭代而不是重写

在上一个版本的基础上,只做这一个改动:
在 handleSubmit 里加一个 loading 状态

不要重写整个函数,只添加必要的代码

技巧七:设置信息请求门槛

如果你需要看其他文件,请先说明:
1. 你需要看哪个文件
2. 你需要看这个文件的哪个部分
3. 为什么你需要这个信息

不要直接说"请贴出完整项目代码"

优秀 Prompt 示例库

示例一:修复 Bug

请帮我修复一个分页 bug。

背景:
- 技术栈:Vue 3 + Element Plus
- 问题页面:用户列表页
- 现象:切换筛选条件后,分页仍然停留在之前页码,导致结果为空

预期行为:
- 每次修改筛选条件时,页码自动重置到 1
- 不影响现有排序逻辑

约束:
- 只允许修改 UserList.vue
- 不要改接口参数结构
- 不要引入新的状态管理

[贴出 UserList.vue 的相关代码片段]

输出要求:
1. 先分析 bug 原因
2. 再给出最小改动方案
3. 最后给出修改后的关键代码

示例二:从零搭页面

请生成一个管理后台的仪表盘首页。

技术要求:
- React + TypeScript
- 使用现有的 Ant Design 组件
- 不新增第三方图表库,图表区域先用占位卡片

页面要求:
- 顶部显示欢迎语和日期
- 中间显示 4 个数据卡片:订单数、销售额、新用户、退款率
- 下方左右布局,左边是销售趋势占位区,右边是待处理事项列表
- 风格简洁、偏企业后台

输出要求:
1. 先给组件结构设计(不超过 10 个组件,每个说明职责)
2. 再输出完整 TSX
3. 保留 mock 数据,不接真实接口

示例三:Code Review

请从代码审查角度检查下面这段改动。

重点关注:
1. 是否有明显 bug(包括边界条件)
2. 是否有安全问题(注入、越权、信息泄露)
3. 是否有性能问题
4. 是否与原有代码风格冲突

不要泛泛而谈,请优先指出高风险问题(P0/P1),并说明原因和修复建议。
低风险的风格问题(P2)可以列出但简单说明即可。

[贴代码]

示例四:API 接口实现

请用 FastAPI 实现用户注册接口。

业务规则:
- 用户使用手机号注册
- 手机号必须唯一,重复注册返回 409
- 密码需要做哈希处理(使用 bcrypt)
- 注册成功后返回用户 id 和手机号,不返回密码

技术约束:
- 使用 SQLAlchemy(已有 User model,贴在下面)
- 使用 Pydantic 做请求和响应模型
- 不要实现短信验证码,预留 phone_verified 字段为 False
- 分层:router / service / model / schema

现有 User model:
[贴 User model 代码]

输出:
1. 先给接口的请求/响应格式
2. 再分别输出 schema.py、service.py、router.py 的代码
3. 最后给一个 curl 调用示例

示例五:数据库设计

请为一个待办事项 SaaS 设计数据库表。

实体:
- 用户(支持团队协作)
- 工作区(Workspace,团队的顶层组织单位)
- 待办事项

业务规则:
- 一个用户可以属于多个工作区
- 工作区内的待办支持分配给成员
- 待办有状态:todo / in_progress / done / archived
- 待办有优先级:low / medium / high / urgent
- 支持子任务(待办可以有父待办)
- 支持标签(多对多)
- 支持截止日期

请输出:
1. 表结构(字段、类型、约束)
2. 主外键关系说明
3. 推荐加索引的字段及原因
4. 需要特别注意的设计点(如软删除、时区处理等)

同一个需求,两种问法的差距

需求:做一个用户注册接口

低质量问法:

帮我写个注册接口

高质量问法:

请用 FastAPI 实现用户注册接口。

业务规则:
1. 用户使用手机号注册
2. 手机号必须唯一
3. 密码需要做哈希处理
4. 注册成功后返回用户 id 和手机号,不返回密码

技术约束:
1. 使用 SQLAlchemy
2. 使用 Pydantic 做请求和响应模型
3. 不要实现短信验证码,先预留字段
4. 请按 router / service / model / schema 分层

输出:
1. 先给目录结构
2. 再分别输出关键文件代码
3. 最后给一个 curl 调用示例

你会发现,后者不仅更容易得到好结果,也更容易发现它哪里理解错了(比如它漏掉了"手机号必须唯一"这个规则)。


建立你自己的 Prompt 模板库

随着你越用越多,你会积累出一套自己的 Prompt 模板。建议维护一个简单的文档或 Notion 页面,记录以下内容:

  • 修 bug 模板:固定格式,包含报错 / 触发步骤 / 预期 / 约束
  • 新功能模板:目标 / 约束 / 业务规则 / 输出格式
  • code review 模板:关注点清单
  • 数据库设计模板:实体列表 / 业务规则 / 输出要求
  • 你们项目的架构规则:每次必须带的技术约束

这套模板是你 AI 协作效率的核心资产。


一句话总结

Prompt 不是咒语,它更像一份高质量任务说明书,写得越清楚,AI 越像靠谱同事。


上一章:第四章 — 为什么 AI 写代码经常翻车
下一章:第六章 — 主流 Vibe Coding 工具大全

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐