前置知识

阅读本文前,建议先了解:


一、概述

本章介绍Prompt engineering的进阶技巧,包括OpenAI官方建议和一些高级技术。


二、OpenAI官方六大建议

来自OpenAI的Prompt最佳实践:

2.1 使用清晰具体的指令

❌ "关于太阳你知道什么?"
✅ "请解释太阳的构成成分,以及它产生能量的原理"

2.2 让模型扮演特定角色

"你是一位经验丰富的律师,请审查以下合同条款"
"作为物理学家,请解释这个现象"

2.3 使用分隔符清晰区分不同部分

请总结以下文章:

===
文章内容:{article}
===

要求:用3句话概括要点

2.4 指定完成任务所需的步骤

请按照以下步骤分析这段文本:
1. 识别文章的主题
2. 提取关键论点
3. 总结作者的观点
4. 评价文章的说服力

2.5 提供示例(Few-shot)

判断以下文本的情感:

文本:我今天升职了!太开心了! → 正面
文本:这个产品太差了,浪费钱 → 负面
文本:还行,中规中矩 → 中性

文本:终于完成了这个项目 →

2.6 控制输出的长度

"用100字以内解释..."
"用3个要点总结..."
"不超过5句话..."

三、进阶技巧

3.1 思维链(Chain of Thought, CoT)

让LLM”思考”后再给出答案,可以显著提升推理能力。

❌ 直接问:
"小明有5个苹果,小红给了他3个,小明吃掉了2个,小明还剩多少个苹果?"

✅ 引导思考:
"小明有5个苹果,小红给了他3个,小明吃掉了2个,小明还剩多少个苹果?
请一步步思考,先算什么,再算什么,最后答案是多少?"

原理

通过让LLM”展示思考过程”,它会更仔细地推理,减少计算错误。

3.2 零样本思维链(Zero-shot CoT)

只需加一句话,就能激发LLM的推理能力:

问题:小明有5个苹果...
答案:请一步步思考这个问题,然后给出答案。

3.3 少样本提示(Few-shot prompting)

给几个示例,让LLM学习模式:

请判断文本是否为垃圾邮件:

示例:
"恭喜您中奖了!" → 垃圾邮件
"请问明天会议几点?" → 正常邮件
"点击此处领取现金大奖" → 垃圾邮件

判断以下内容:
"您的订单已发货,预计明天送达" → ?

3.4 角色扮演技巧

你是一个{角色},请用{风格}回答{问题}

例如:
"你是一位毒舌的美食评论家,用讽刺幽默的风格点评以下餐厅..."
"你是一位温柔的初中老师,用通俗易懂的语言解释这个概念..."

3.5 限制输出格式

用JSON格式返回:
{
  "姓名": "...",
  "年龄": "...",
  "职业": "..."
}
用Markdown表格返回:
| 项目 | 内容 |
|------|------|
| 名称 | ... |
| 价格 | ... |

四、温度参数(Temperature)

温度参数控制输出的随机性

温度效果适用场景
0.0-0.2确定性强,稳定代码生成、事实问答
0.5-0.7平衡一般对话
0.8-1.0创意性强,多样头脑风暴、写故事
【低温度示例】
Prompt: "解释量子计算"
结果:准确但保守的回答

【高温度示例】
Prompt: "解释量子计算"
结果:可能包含更多创意解释,但可能不够准确

使用建议

  • 事实性任务:temperature = 0 或 0.1
  • 创意任务:temperature = 0.7-0.9
  • 一般对话:temperature = 0.3-0.5

五、Top-p 参数

与Temperature类似,控制输出的多样性

  • Top-p = 1.0:考虑所有可能的词
  • Top-p = 0.9:只考虑概率最高的90%的词
  • Top-p = 0.1:只考虑概率最高的10%的词

一般只调一个

Temperature和Top-p通常只调一个,建议使用Top-p。


六、常见问题和应对

6.1 LLM总是”跑题”

✅ 解决方案:强调任务范围
"只回答以下问题,不要扩展讨论其他内容"

6.2 回答太长/太短

✅ 解决方案:明确字数限制
"用不超过100字回答"
"至少用3个段落详细说明"

6.3 回答格式不对

✅ 解决方案:给格式模板
"用以下JSON格式返回,不要有其他内容:
{
  "result": true/false,
  "reason": "原因"
}"

七、总结

  • OpenAI六大建议:清晰指令、角色扮演、分隔符、步骤、示例、长度控制
  • 思维链CoT:让LLM展示推理过程
  • Few-shot:通过示例学习模式
  • 温度参数:控制随机性vs确定性
  • 限制输出:明确格式和字数

八、延伸阅读