Skip to main content

Prompt 工程最佳实践:写出高质量 AI 指令的 7 个原则

·3407 words·7 mins

一个真实案例
#

上周,团队里两个实习生用同一个 AI 工具写代码。

实习生 A 的 Prompt:

“帮我写一个 Python 函数,从 API 获取数据。”

AI 的回答:

def fetch_data():
    import requests
    response = requests.get("https://api.example.com")
    return response.json()

实习生 B 的 Prompt:

写一个 Python 函数,要求:

  1. 从指定 API 获取用户数据
  2. 处理错误(超时、404、500)
  3. 添加重试逻辑(最多 3 次,指数退避)
  4. 返回结构化数据(dict)
  5. 添加类型注解和文档字符串

API 端点:https://api.example.com/users/{user_id}

AI 的回答:

from typing import Dict, Optional
import requests
from requests.exceptions import RequestException, Timeout, HTTPError
import time

def fetch_user_data(user_id: int, timeout: int = 30, max_retries: int = 3) -> Optional[Dict]:
    """
    从 API 获取用户数据,带错误处理和重试逻辑。
    
    Args:
        user_id: 用户 ID
        timeout: 请求超时时间(秒)
        max_retries: 最大重试次数
    
    Returns:
        用户数据字典,失败返回 None
    """
    url = f"https://api.example.com/users/{user_id}"
    
    for attempt in range(max_retries):
        try:
            response = requests.get(url, timeout=timeout)
            response.raise_for_status()
            return response.json()
        
        except Timeout:
            if attempt == max_retries - 1:
                print(f"请求超时,已重试{max_retries}次")
                return None
            wait_time = 2 ** attempt  # 指数退避
            time.sleep(wait_time)
        
        except HTTPError as e:
            if e.response.status_code == 404:
                print(f"用户{user_id}不存在")
                return None
            if attempt == max_retries - 1:
                raise
            time.sleep(2 ** attempt)
        
        except RequestException as e:
            print(f"请求失败:{e}")
            return None
    
    return None

同样的 AI 工具,输出质量差了 10 倍。

问题不在 AI。问题在于:Prompt 的质量决定了 AI 输出的质量。


原则 1:明确角色(给 AI 一个身份)
#

❌ 错误示范
#

“帮我写一篇文章。”

✅ 正确示范
#

你是一位有 10 年经验的技术博客作者,擅长用通俗易懂的语言解释复杂概念。

请写一篇关于"AI 自动化工作流"的文章,读者是初级开发者。

为什么有效

  • AI 知道自己是"技术博客作者"
  • 知道读者是"初级开发者"
  • 会自动调整语言风格(通俗、有例子)

常用角色

场景 推荐角色
写代码 资深软件工程师
写文章 技术博客作者
做分析 数据分析师
写文案 营销专家
改 Bug 调试专家

原则 2:提供上下文(让 AI 知道背景)
#

❌ 错误示范
#

“这个函数有什么問題?”

✅ 正确示范
#

我在开发一个电商网站,这是用户登录函数:

def login(username, password):
    user = db.query("SELECT * FROM users WHERE username=?", username)
    if user and user.password == password:
        return True
    return False

这个函数有什么安全问题?如何改进?

为什么有效

  • AI 知道是"电商网站"(敏感数据)
  • 知道是"用户登录"(安全关键)
  • 能针对性地指出问题(SQL 注入、明文密码)

原则 3:分步骤(把复杂任务拆解)
#

❌ 错误示范
#

“帮我做一个数据分析。”

✅ 正确示范
#

请帮我分析这个销售数据,按以下步骤:

  1. 数据清洗:处理缺失值和异常值
  2. 描述统计:计算均值、中位数、标准差
  3. 趋势分析:按月绘制销售趋势图
  4. 异常检测:找出销售异常波动的月份
  5. 结论总结:用 3 句话总结关键发现

数据:[粘贴数据]

为什么有效

  • AI 知道具体要做什么
  • 每一步都有明确要求
  • 输出结构化,容易阅读

原则 4:给示例(让 AI 知道你想要什么格式)
#

❌ 错误示范
#

“帮我生成一些测试数据。”

✅ 正确示范
#

生成 5 条用户测试数据,格式如下:

{
  "id": 1,
  "name": "张三",
  "email": "zhangsan@example.com",
  "age": 25,
  "created_at": "2026-03-10"
}

为什么有效

  • AI 知道 exact 格式(JSON)
  • 知道字段名称和类型
  • 输出可以直接使用

示例的力量

一个示例胜过千言万语。—— AI 训练数据里的每一篇教程


原则 5:设约束(告诉 AI 什么不要做)
#

❌ 错误示范
#

“解释一下什么是机器学习。”

✅ 正确示范
#

用 300 字以内解释什么是机器学习,要求:

  • 不要使用专业术语
  • 用生活中的例子说明
  • 不要讲历史和发展
  • 只讲核心概念

为什么有效

  • AI 知道长度限制(300 字)
  • 知道避免什么(专业术语、历史)
  • 知道聚焦什么(核心概念、例子)

常用约束

- 不要超过 500 字
- 不要用专业术语
- 不要讲 XXX
- 只关注 XXX
- 用中文回答
- 用 Markdown 格式

原则 6:指定输出格式(让 AI 按你的格式输出)
#

❌ 错误示范
#

“比较一下 Python 和 JavaScript。”

✅ 正确示范
#

比较 Python 和 JavaScript,用表格格式:

维度 Python JavaScript
类型系统
主要用途
学习曲线
生态系统
薪资水平

为什么有效

  • AI 知道 exact 格式(表格)
  • 知道比较维度
  • 输出可以直接复制使用

常用格式

  • 表格
  • 列表
  • JSON
  • Markdown
  • 代码块
  • 大纲

原则 7:迭代优化(好 Prompt 是改出来的)
#

第一版
#

“帮我写一个网站。”

第二版
#

帮我用 HTML/CSS/JS 写一个个人博客网站,包含首页、文章列表、文章详情。

第三版
#

帮我用 HTML/CSS/JS 写一个极简风格的个人博客网站。

要求:

  • 响应式设计(支持手机)
  • 深色模式切换
  • 文章列表按时间排序
  • 代码注释清晰

参考网站:https://example.com

第四版(最终)
#

你是一位前端专家,擅长极简设计。

帮我用 HTML/CSS/JS 写一个个人博客网站,读者是技术人员。

要求:

  1. 设计:极简风格,黑白配色,大字体
  2. 功能
    • 首页(个人介绍 + 最新文章)
    • 文章列表(按时间排序)
    • 文章详情(Markdown 渲染)
    • 深色模式切换
  3. 技术
    • 纯 HTML/CSS/JS(不用框架)
    • 响应式设计
    • 代码注释清晰
  4. 性能
    • 首屏加载 < 1 秒
    • 无外部依赖

参考网站:https://yu-wenhao.com

输出:

  • 完整的 HTML/CSS/JS 代码
  • 部署说明

每一次迭代,输出质量提升 20%。


Prompt 模板(可直接复制)
#

写代码
#

你是一位资深 {语言} 工程师。

任务:{具体任务}

要求:
1. {要求 1}
2. {要求 2}
3. {要求 3}

约束:
- {约束 1}
- {约束 2}

示例:
{示例代码或期望输出}

输出格式:{代码块/文件结构/说明文档}

写文章
#

你是一位有 {X} 年经验的 {领域} 专家。

主题:{文章主题}
读者:{目标读者}
字数:{字数范围}

大纲:
1. {章节 1}
2. {章节 2}
3. {章节 3}

风格:{正式/轻松/幽默/专业}

要求:
- {要求 1}
- {要求 2}

做分析
#

你是一位 {领域} 分析师。

数据:{粘贴数据}

任务:
1. {分析步骤 1}
2. {分析步骤 2}
3. {分析步骤 3}

输出格式:
- 关键发现(3 条)
- 数据表格
- 可视化建议
- 行动建议

常见错误及修正
#

错误 1:太模糊
#

❌ “帮我优化一下代码。”

✅ “帮我优化这段 Python 代码的性能,目标是减少 50% 的执行时间。使用 profiling 工具找出瓶颈,然后优化。”

错误 2:缺少上下文
#

❌ “这个报错怎么修?”

✅ “我在运行 Django 项目时遇到这个错误:[粘贴错误信息]。Python 3.10,Django 4.2,数据库是 PostgreSQL。我已经尝试了 [方法 1]、[方法 2],但没用。”

错误 3:一次问太多
#

❌ “帮我做个完整的电商网站,包括用户系统、商品管理、订单处理、支付集成…”

✅ 分多次问:

  1. “帮我设计用户系统的数据库表结构”
  2. “帮我写用户注册登录功能”
  3. “帮我设计商品管理模块” …

错误 4:不指定格式
#

❌ “给我一些学习资源。”

✅ “给我 5 个 Python 学习资源,用表格格式:| 资源名称 | 类型(视频/书籍/网站)| 难度 | 链接 |”


高级技巧
#

1. 思维链(Chain of Thought)
#

让 AI 展示思考过程:

请逐步思考这个问题,展示你的推理过程:

  1. 首先…
  2. 然后…
  3. 最后…

效果:AI 的回答更准确、更可靠。

2. 角色扮演
#

你现在是面试官,我是求职者。请问我 5 个 Python 相关问题,然后评估我的回答。

效果:AI 进入角色,互动更真实。

3. 对比分析
#

对比方案 A 和方案 B 的优缺点,用表格格式,然后给出你的推荐。

效果:AI 提供全面分析,帮你做决策。

4. 反向提问
#

在开始之前,请问我 3 个问题,以便更好地理解我的需求。

效果:AI 主动获取信息,输出更精准。


总结
#

7 个核心原则

原则 关键词 效果
明确角色 “你是一位…” 调整语言风格
提供上下文 “我在开发…” 针对性回答
分步骤 “按以下步骤…” 结构化输出
给示例 “格式如下…” 格式正确
设约束 “不要超过…” 符合要求
指定格式 “用表格格式…” 直接使用
迭代优化 多次改进 质量提升

一个好 Prompt 的公式

好 Prompt = 角色 + 上下文 + 步骤 + 示例 + 约束 + 格式

最后一句

Prompt 工程不是"套路"AI,而是清晰地表达自己的需求

你越清楚自己要什么,AI 越能帮你实现。


练习作业
#

选一个你最近用 AI 的任务,用 7 个原则重新写 Prompt,对比输出质量。

欢迎在评论区分享你的改进案例。