AI 编程写 Prompt,90% 的程序员第一步就搞反了

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 本身,而在于你愿不愿意把需求说清楚。

评论区

0 条评论

登录后可评论。

查看完整榜单
查看完整榜单
查看完整榜单