目录

06Prompt Engineering 的常见策略及适用场景

Prompt Engineering:如何让 LLM 说出你真正想要的话

模型还是那个模型,但问法不同,答案天差地别。 这就是 Prompt Engineering——学会和大语言模型“好好说话”。


引言:同样是问路,结果不同

你问路人:“怎么去车站?” 对方可能随手一指:“那边。”

你换一种问法:“你好,请问去火车南站怎么走?我走路,大概要走多久?” 对方会停下来,认真给你指路,还提醒你哪个路口有红绿灯。

LLM 也是这样。 你给的提示词(Prompt)越清晰,它的回答就越有用。

Prompt Engineering 不是“编程”,而是设计输入,让模型按照你想要的方式输出。


1. 为什么需要 Prompt Engineering?

LLM 的训练目标是“预测下一个词”,不是“理解你的真实意图”。

模型会猜,但猜的不一定是你想要的:

你问模型可能猜
“写一篇关于环保的文章”2000 字学术论文?还是 50 字口号?
“帮我总结一下”总结成一句话?三个要点?还是带小标题?
“这个代码有问题吗?”只说“有”,还是逐行指出问题 + 给出修改建议?

Prompt Engineering = 消除歧义,缩小模型的“猜测空间”。


2. 八大核心策略(附场景与示例)

策略 1:清晰明确的指令

核心:直接告诉模型要做什么,不要让它猜。

不推荐

“写点关于机器学习的。”

推荐

“用 50 个字以内,向一个初中生解释什么是机器学习。”

适用场景:✅ 所有场景的“第一原则”


策略 2:设置角色(System Prompt / Persona)

核心:给模型一个“身份”,它会自动调整语气和知识范围。

graph LR A["你是一位资深儿科医生"] --> B["回答会专业、温和"] C["你是一位毒舌脱口秀演员"] --> D["回答会犀利、有梗"] E["你是一个 5 岁小孩"] --> F["回答会用简单词汇、充满好奇"]

示例

“你是一位资深财务顾问,用通俗易懂的语言解释什么是通货膨胀,并举例说明它对普通人的影响。”

适用场景:✅ 客服机器人 ✅ 角色扮演 ✅ 风格化写作


策略 3:提供示例(Few-shot Prompting)

核心:给 1~3 个例子,模型就能跟着“照葫芦画瓢”。

graph TD A["示例1: 苹果 → 水果"] --> B["示例2: 麻雀 → 鸟类"] B --> C["示例3: 鲫鱼 → 鱼类"] C --> D["模型学会了: 狮子 → 哺乳动物"]

示例

将以下产品名称分类为【电子产品】、【家居用品】、【服装】:

洗衣机 → 家居用品
iPhone → 电子产品
羊毛大衣 → 服装
空气炸锅 → ?

适用场景:✅ 分类 ✅ 信息抽取 ✅ 格式转换 ✅ 需要输出特定结构的任务


策略 4:结构化输出(JSON / Markdown / 列表)

核心:明确指定输出格式,方便程序解析。

示例

“从以下文本中提取:患者姓名、年龄、诊断结果,以 JSON 格式输出: {“patient_name”: “”, “age”: 0, “diagnosis”: “"}”

适用场景:✅ API 集成 ✅ 自动化处理 ✅ 数据标注


策略 5:思维链(Chain-of-Thought, CoT)

核心:让模型一步一步想,而不是直接蹦答案。

不推荐(直接问):

“Roger 有 5 个网球,他买了 2 罐网球,每罐有 3 个网球,他现在有多少个?”

模型可能答错。

推荐(加一句“让我们一步步思考”):

“Roger 开始有 5 个网球。 2 罐网球,每罐 3 个,共 2 × 3 = 6 个。 5 + 6 = 11。 答案是 11。”

graph LR A["复杂问题"] --> B["思维链<br/>拆成多步"] B --> C["每步单独计算"] C --> D["准确率大幅提升"]

适用场景:✅ 数学推理 ✅ 逻辑题 ✅ 多跳问答 ✅ 需要解释的任务


策略 6:自我一致性(Self-Consistency)

核心:让模型多次回答同一个问题,然后投票选出现次数最多的答案。

这是思维链的增强版。

示例流程

Q: “某商店打 8 折后再减 20 元,最终价格是 100 元,原价是多少?”

生成 3 次带思维链的回答:
- 回答1:150 元
- 回答2:150 元  
- 回答3:135 元(可能算错了)

最终答案:150 元(2 票胜出)

适用场景:✅ 数学 ✅ 有确定答案的推理题 ✅ 敏感决策(增加置信度)


策略 7:要求模型承认不确定性

核心:告诉模型“不知道就说不知道”,减少胡编乱造(幻觉)。

不推荐

“世界上最冷的地方是哪里?”

模型可能会编一个。

推荐

“如果你确定,就回答;如果不确定,请说‘我不知道’。世界上最冷的地方是哪里?”

适用场景:✅ 需要高准确率的场景 ✅ 知识问答 ✅ 医疗/法律等严肃领域


策略 8:分隔符与结构化 Prompt

核心:用 ###---"""<tag> 等符号分隔不同部分,防止混淆。

示例

### 系统指令 ###
你是一个文本校对助手,只修正错别字,不改变原意。

### 用户输入 ###
这篇文章写的很好,但有个别错别字。

### 需要校对的文本 ###
人工智能正在改变世界,它能够处理大量讯息。

适用场景:✅ 复杂多轮 Prompt ✅ 系统指令 + 用户输入分离


3. 策略选择速查表

策略一句话总结最佳场景
清晰指令直接说要什么所有场景
设置角色给模型一个身份风格化对话
Few-shot给例子照抄分类、抽取
结构化输出指定格式API 对接
思维链 (CoT)一步步想数学、推理
自我一致性多次回答取多数高置信度推理
承认不确定不知道就说不知道防幻觉
分隔符用符号分区复杂 Prompt

4. 一个完整案例:从“差”到“好”的演变

差 Prompt

“写一篇关于健康的文章。”

模型输出:一段泛泛而谈、50~5000 字不等的随机内容。


好 Prompt

“你是一位营养学专家。请写一篇 300 字的短文,向上班族解释‘为什么早餐很重要’,包含以下三个要点:血糖稳定、代谢提升、注意力改善。用第二人称‘你’来写,语气亲和,不要用专业术语。”

模型输出:一篇 300 字、结构清晰、语气亲切的科普短文。


差距在哪里?

维度差 Prompt好 Prompt
角色营养学专家
长度300 字
受众上班族
核心要点3 个明确要点
语气/人称第二人称、亲和
限制条件不用专业术语

每多给一个约束,模型的“猜测空间”就缩小一圈,答案就更接近你的预期。


5. 进阶技巧

技巧 1:把复杂任务拆成多步

不要指望一步到位:

❌ “读这篇 10000 字的文档,然后写摘要、提取关键词、分析情感。”

✅ 步骤1:写 500 字摘要
✅ 步骤2:提取 10 个关键词
✅ 步骤3:判断整体情感倾向(正面/中性/负面)

技巧 2:使用“提示链”(Prompt Chaining)

上一个 Prompt 的输出作为下一个 Prompt 的输入:

graph LR A["第一轮: 写故事大纲"] --> B["第二轮: 根据大纲写第一章"] B --> C["第三轮: 根据第一章写第二章"]

技巧 3:添加“负向约束”

告诉模型不要做什么:

“不要使用‘首先、其次、最后’这类连接词” “不要在第一段就给出结论” “不要出现任何专业术语”


6. 不同模型对 Prompt 的敏感度

模型类型特点Prompt 策略
早期 GPT-3较“笨”,容易跑偏需要 Few-shot + 极清晰的指令
GPT-4 / Claude 3理解力强自然语言指令通常就够
开源模型(LLaMA 3)中等敏感度建议加角色 + 示例
小型模型(7B 以下)较脆弱尽量用 Few-shot,避免复杂推理

经验法则:模型越小、越老,越需要详细的 Few-shot 示例。


7. 一张图总结:Prompt Engineering 核心流程

flowchart TD A["原始需求"] --> B["分解任务"] B --> C{"选择策略"} C -- 需要格式化 --> D["结构化输出"] C -- 需要推理 --> E["思维链 (CoT)"] C -- 需要风格 --> F["设置角色"] C -- 需要样例 --> G["Few-shot"] D --> H["组合约束条件"] E --> H F --> H G --> H H --> I["编写最终 Prompt"] I --> J["测试 & 迭代优化"] J --> K["✅ 获得理想输出"]

写在最后

Prompt Engineering 的本质不是“魔法”,而是沟通技巧

你想要什么、你希望以什么形式拿到、你有什么限制——把这些明确告诉模型

很多时候,不是你用的模型不够强,而是你的 Prompt 给得不够好。

下次试试这个模板:

【角色】你是一位 [xxx]
【任务】请 [具体动作]
【要求】1. xxx  2. xxx  3. xxx
【格式】输出格式为 [JSON / Markdown / 列表]
【约束】不要 xxx,如果不知道请说“不知道”