Prompt工程实战:同一个需求换3种写法,效果差10倍

写AI应用到现在,我一直有个尴尬的发现:代码写得再好,Prompt写得烂,AI一样输出垃圾。

第3篇RAG,知识库检索到了正确内容,但AI回答还是偏------因为Prompt没告诉它"只基于检索结果回答"。第6篇Agent,AI调错了工具------因为Prompt没说清楚什么问题用什么工具。第10篇多Agent协作,写作Agent只会复制粘贴------因为Prompt没规定输出格式。

Prompt是AI应用的"接口文档"。 你给AI的指令越清楚,AI的输出越靠谱。但写好Prompt不是靠灵感,是有套路的。

我把自己踩过的Prompt坑整理成4个实战技巧,每个技巧都有"烂写法"和"好写法"的对比。同一个需求,换种写法,效果能差10倍。


先说结论

技巧 核心思路 效果提升
角色设定 让AI知道"你是谁" 输出专业度提升3倍
示例驱动 给AI看1-2个正确输出样例 格式正确率从60%→95%
约束边界 明确告诉AI"不要做什么" 减少幻觉和跑题50%+
思维链 让AI"先想后答" 复杂推理准确率提升5倍

用Java人的理解:Prompt ≈ 给一个新来的实习生布置任务。你不会只说"帮我处理一下订单"------你会说角色(你是客服)、格式(用这个模板)、约束(不能透露价格)、思路(先查库再回复)。AI也一样。


坑1:没有角色设定,AI像一个没有岗位说明的实习生

翻车现场

python

ini 复制代码
# 烂写法:没有角色
prompt = "请分析一下新能源汽车行业的竞争格局。"

result = llm.invoke(prompt)

输出:

复制代码
新能源汽车行业竞争格局分析

随着全球对环境保护意识的不断增强......(200字宏观背景)
主要竞争对手包括特斯拉、比亚迪等......(300字泛泛介绍)
未来展望:行业将朝着智能化方向发展......(100字空话)

像百度百科------什么都说了一点,但没有深度、没有观点、没有数据支撑。 因为AI不知道你是要写给谁看的、什么深度、什么角度。

正确写法:给角色+受众+风格

python

ini 复制代码
# 好写法:角色设定
prompt = """你是一位有10年经验的证券分析师,擅长新能源汽车赛道。

受众:投资决策委员会(资深投资人,不需要基础概念科普)

要求:
- 用数据说话,引用具体市占率、增长率
- 给出明确的投资建议,不要"既要又要"
- 控制在500字以内

请分析新能源汽车行业的竞争格局。"""

输出:

erlang 复制代码
新能源车竞争格局(2025年)

头部集中:比亚迪(市占率28%)+特斯拉(18%)合计占46%,二线品牌(蔚来、小鹏、理想)合计仅15%,行业马太效应显著。

关键变量:智能化。L3渗透率从8%→25%是未来2年最大增量,比亚迪自研芯片+特斯拉FSD是核心壁垒,二线品牌依赖供应商方案,差异化不足。

投资建议:超配比亚迪,标配特斯拉供应链,回避二线品牌。

风险:价格战持续,比亚迪2025年单车利润同比-12%,若L3渗透不及预期,估值承压。

同一个问题,输出质量天差地别。 关键差异:

要素 烂写法 好写法
角色 "10年经验证券分析师"
受众 无(默认大众) "投资决策委员会"
深度 浅层科普 数据+观点+建议
格式约束 "500字以内"
风格 百科体 投资研报体

角色设定模板:

复制代码
你是一位{角色描述},{经验/特长}。
你的受众是{目标读者},{他们的背景}。
你的风格:{写作风格要求}。

坑2:光描述要求不给示例,AI自由发挥跑偏

翻车现场

需求:让AI从用户评论中提取情感标签。

python

ini 复制代码
# 烂写法:只描述要求,不给示例
prompt = """请从以下用户评论中提取情感标签。

用户评论:这个耳机音质不错,但戴久了耳朵疼,降噪效果一般。

请提取情感标签,包含维度和极性。"""

result = llm.invoke(prompt)

输出(3次运行3种格式):

bash 复制代码
# 第1次
情感标签:
- 音质:正面
- 舒适度:负面
- 降噪:中性

# 第2次
{
  "sentiments": [
    {"aspect": "sound quality", "polarity": "positive"},
    {"aspect": "comfort", "polarity": "negative"},
    {"aspect": "noise cancellation", "polarity": "neutral"}
  ]
}

# 第3次
该用户对音质表示满意,对舒适度不满意,对降噪效果持中性态度。

3次输出3种格式。 因为我只说了"提取情感标签",但没说用什么格式输出。

正确写法:给1-2个示例(Few-shot)

python

makefile 复制代码
# 好写法:给示例
prompt = """请从用户评论中提取情感标签,输出JSON数组格式。

示例1:
评论:手机拍照很清晰,续航也给力,就是屏幕有点小。
输出:
```json
[
  {"aspect": "拍照", "polarity": "正面"},
  {"aspect": "续航", "polarity": "正面"},
  {"aspect": "屏幕", "polarity": "负面"}
]

示例2: 评论:物流快,包装好,产品一般。 输出:

json

css 复制代码
[  {"aspect": "物流", "polarity": "正面"},  {"aspect": "包装", "polarity": "正面"},  {"aspect": "产品", "polarity": "负面"}]

现在请处理: 评论:这个耳机音质不错,但戴久了耳朵疼,降噪效果一般。 输出:"""

result = llm.invoke(prompt)

css 复制代码
输出(10次运行全部一致):

```json
[  {"aspect": "音质", "polarity": "正面"},  {"aspect": "舒适度", "polarity": "负面"},  {"aspect": "降噪", "polarity": "中性"}]

Few-shot的威力:

方式 格式一致率 字段准确率 适用场景
Zero-shot(不给示例) 30-60% 70% 简单任务,输出格式不敏感
1-shot(给1个示例) 85%+ 90% 大多数场景推荐
2-3 shot(给2-3个示例) 95%+ 95% 格式要求严格的场景
5+ shot 97%+ 95% 边际收益递减,Token浪费

用Java人的理解:Few-shot ≈ 给实习生看一个完成的案例。"照着这个格式做"比"你自由发挥"靠谱100倍。

示例选择原则:

原则 说明
示例要有代表性 覆盖最常见的输入模式
示例要有差异性 两个示例不要太像,覆盖不同情况
示例要简短 每个示例5-10行,别写太多浪费Token
输出格式和示例一致 示例用什么格式,AI就会用什么格式

坑3:只说"要做什么"不说"不要做什么",AI疯狂幻觉

翻车现场

需求:做一个客服AI,只回答公司产品相关的问题。

python

ini 复制代码
# 烂写法:只说了要做什么
prompt = """你是XX公司的客服助手,请回答用户的问题。"""

result = llm.invoke("今天北京天气怎么样?")
# "今天北京晴转多云,最高温度32度......"(瞎编的,还回答了)

result = llm.invoke("你们公司的退货政策是什么?")
# "退货政策:7天无理由退货,15天换货......"(编造的政策,不是公司的)

AI不知道"不该做什么",就会什么都答------包括编造答案。

正确写法:加约束边界

python

ini 复制代码
# 好写法:要做什么 + 不要做什么
prompt = """你是XX公司的客服助手。

## 你的职责
- 回答用户关于公司产品功能、价格、使用方法的问题
- 处理退货、换货等售后问题

## 你必须遵守的规则
- 只回答与公司产品和服务相关的问题
- 不确定的信息,说"我需要帮您确认,请稍等"
- 不要编造任何产品信息、价格、政策
- 不在知识库中的信息,说"抱歉,我暂时无法回答该问题"

## 遇到以下情况的处理方式
- 非公司相关问题 → "抱歉,我只能回答与公司产品和服务相关的问题"
- 你不知道答案 → "我需要帮您确认,请稍等"或"建议您联系人工客服"
- 用户情绪激动 → 语气更温和,优先安抚,然后解决问题"""

result = llm.invoke("今天北京天气怎么样?")
# "抱歉,我只能回答与公司产品和服务相关的问题。"

result = llm.invoke("你们公司的退货政策是什么?")
# 根据知识库回答准确的退货政策

约束边界的4个维度:

维度 对应的"不要" 示例
范围约束 不要回答范围外的问题 "只回答公司产品相关问题"
事实约束 不要编造不确定的信息 "不确定时说'我帮您确认'"
格式约束 不要用错误格式输出 "输出JSON,不要输出Markdown"
语气约束 不要用不当语气 "不要使用绝对性表述"

约束模板:

markdown 复制代码
## 你必须遵守的规则
- {规则1:范围}
- {规则2:事实}
- {规则3:格式}

## 遇到以下情况的处理方式
- {异常情况1} → {处理方式}
- {异常情况2} → {处理方式}

用Java人的理解:这和异常处理一个道理------不仅要写正常流程(try),还要写异常流程(catch)。Prompt里只写正常流程不给异常处理,AI遇到边界情况就会乱来。


坑4:复杂推理题AI直接给答案,错得离谱

翻车现场

需求:AI判断订单是否可以退货(需要多步推理)。

python

ini 复制代码
# 烂写法:直接问结果
prompt = """退货规则:
1. 收货后7天内可退货
2. 定制商品不可退货
3. 已使用商品不可退货(拆封不等于使用)
4. 会员可延长至15天

订单信息:用户张三,非会员,6月1日收货,购买的是标准款耳机(非定制),已拆封未使用,今天6月10日。

该订单可以退货吗?请回答可以或不可以。"""

result = llm.invoke(prompt)
# "不可以"(错误!拆封≠使用,且6月10日-6月1日=9天,但等等......让我再算算)

AI直接跳到结论,中间的推理步骤跳过了。 结果经常出错------因为复杂推理需要一步步判断,AI一步想太多就容易漏。

正确写法:思维链(Chain of Thought)------让AI先想后答

python

ini 复制代码
# 好写法:要求AI展示推理过程
prompt = """退货规则:
1. 收货后7天内可退货
2. 定制商品不可退货
3. 已使用商品不可退货(拆封不等于使用)
4. 会员可延长至15天

订单信息:用户张三,非会员,6月1日收货,购买的是标准款耳机(非定制),已拆封未使用,今天6月10日。

请按以下步骤推理,最后给出结论:

步骤1:判断是否在退货时限内
- 用户是否会员?
- 退货时限是多少天?
- 收货至今多少天?
- 是否在时限内?

步骤2:判断商品是否符合退货条件
- 是否定制商品?
- 是否已使用?
- 拆封是否等于使用?

步骤3:综合判断
- 时限条件是否满足?
- 商品条件是否满足?
- 最终结论:可以/不可以退货"""

result = llm.invoke(prompt)

输出:

diff 复制代码
步骤1:判断是否在退货时限内
- 用户是否会员?非会员
- 退货时限是多少天?7天(非会员)
- 收货至今多少天?6月10日 - 6月1日 = 9天
- 是否在时限内?否,9天 > 7天

步骤2:判断商品是否符合退货条件
- 是否定制商品?否,标准款耳机
- 是否已使用?否,已拆封未使用
- 拆封是否等于使用?否,规则3明确说明拆封≠使用

步骤3:综合判断
- 时限条件:不满足(9天超过7天时限)
- 商品条件:满足(非定制、未使用)
- 最终结论:不可以退货(时限已过)

一步步推理,结论正确且可验证。 如果AI跳步直接给结论,9天>7天这种计算很容易搞错。

思维链的3种用法:

用法 怎么做 适用场景
显式要求 Prompt里写"请一步步推理" 复杂推理题
步骤模板 Prompt里给出推理步骤框架 推荐,效果最稳定
自发CoT 让AI自己想,不加约束 简单问题,别浪费Token

步骤模板就是上面用的方法------你在Prompt里写好推理步骤,AI按步骤填空。 这比"请一步步想"可靠10倍,因为你控制了推理的方向。

用Java人的理解:思维链 ≈ 断点调试。AI直接给答案 ≈ 不调试直接运行,对了也不知道为什么对,错了也不知道错在哪。思维链 ≈ 逐步执行+打印中间变量,每一步都能检查。


4个技巧的完整Prompt模板

python

ini 复制代码
# 综合运用4个技巧的Prompt模板

SYSTEM_PROMPT = """你是一位{角色},{经验/特长描述}。
你的受众是{目标读者}。

## 你的职责
- {职责1}
- {职责2}

## 你必须遵守的规则
- {规则1:范围约束}
- {规则2:事实约束}
- {规则3:格式约束}

## 遇到以下情况的处理方式
- {异常情况1} → {处理方式}
- {异常情况2} → {处理方式}

## 输出格式
{给出1-2个示例}

## 推理步骤(适用于复杂判断)
步骤1:{第一步要判断什么}
步骤2:{第二步要判断什么}
步骤3:{综合判断}

先按步骤推理,再给出最终结论。"""

这个模板覆盖了4个技巧:

技巧 在模板中的位置
角色设定 第1-2行
约束边界 "遵守的规则"+"异常处理"
示例驱动 "输出格式"
思维链 "推理步骤"

不同场景的Prompt速查表

场景 角色设定 关键约束 示例要求 是否需要CoT
客服AI "XX公司客服" 只回答公司相关 对话格式示例
知识库问答 "文档分析专家" 只基于检索结果 Q&A格式示例
数据提取 "数据分析师" 输出JSON,不编造 输入→JSON示例
意图判断 "意图识别引擎" 只返回预定义意图 5种意图示例
订单判断 "退货审核员" 按规则逐步判断 判断流程示例 ✅ 必须
投资分析 "证券分析师" 用数据说话,给明确建议 研报格式示例 ✅ 必须
多Agent调度 "项目经理" 先分解再分配 任务分配示例 ✅ 必须

4个技巧的总结

# 技巧 核心思路 一句话
1 角色设定 告诉AI"你是谁" 没角色的AI = 没岗位的实习生
2 示例驱动 给1-2个正确输出样例 示例 > 描述,1个示例胜过100字说明
3 约束边界 明确"不要做什么" 只说"要做什么"= 给AI开空白支票
4 思维链 让AI先想后答 复杂推理必须拆步骤,别让AI一步到位

你写Prompt踩过什么坑?有什么独门技巧?评论区聊聊 👇

点赞关注「荣码」,大模型转型系列持续更新~

相关推荐
想会飞的蒲公英1 小时前
集成学习入门:Bagging、Boosting 到底在组合什么
人工智能·python·机器学习·集成学习·boosting
努力努力再努力搬砖1 小时前
批量下载ERA5数据
python
_老码1 小时前
AI-reader阅读助手开发过程
人工智能·python·ai
_Jimmy_1 小时前
python性能分析工具
python
weixin_422329311 小时前
AgentScope Java ReActAgent 核心循环深度解析
java·开发语言·人工智能
952361 小时前
RabbitMQ - 高级特性
java·spring boot·分布式·后端·rabbitmq
尽兴-2 小时前
传统 Java/Vue 系统如何一步步接入 AI 维护
java·vue.js·人工智能·ai·大模型
shuoshuohaohao2 小时前
《HTTP协议》
java·web
zzz_23682 小时前
【Java实习面试算法冲刺】图论
java·算法·面试