OpenAI 官方 Prompt 工程指南详解
随着大语言模型(LLM)的普及,如何编写高质量的提示词(Prompt)成为了关键技能。网上充斥着各种所谓的 Prompt 框架和教程,往往良莠不齐。直到 OpenAI 在文档中上线了官方的 Prompt Engineering 指南,这标志着有了权威且有效的 Prompt 工程标准。
本文详细解读了 OpenAI 官方发布的 Prompt 工程指南六大核心原则。内容包括写出清晰指令、提供参考文本、拆分复杂任务、给予模型思考时间、使用外部工具以及系统测试变更。文章结合了具体的 Prompt 示例、Python 代码片段及 RAG 架构说明,旨在帮助开发者和用户提升与大模型的交互效率,减少幻觉,实现更精准的任务执行。

随着大语言模型(LLM)的普及,如何编写高质量的提示词(Prompt)成为了关键技能。网上充斥着各种所谓的 Prompt 框架和教程,往往良莠不齐。直到 OpenAI 在文档中上线了官方的 Prompt Engineering 指南,这标志着有了权威且有效的 Prompt 工程标准。
本文基于 OpenAI 官方文档,详细解读六大核心原则,并结合实际场景提供代码示例和最佳实践,帮助开发者更有效地利用大模型能力。
这是 Prompt 工程中最核心的原则。任何技巧都不如清晰表达需求重要。就像人与人沟通一样,如果指令模糊,模型很难准确理解意图。OpenAI 给出了以下 6 条具体建议:
尽量提供重要的详细信息和上下文,避免笼统的描述。
错误示例:
总结会议记录。
正确示例:
用一个段落总结会议记录。然后写下演讲者的 Markdown 列表以及他们的每个要点。最后,列出发言人建议的后续步骤或行动项目(如果有)。
将大模型想象成一个演员,指定其角色可以让输出更专业、更符合预期。
示例:
你是一位喜欢讲笑话的喜剧演员。每当我请求帮助写一些东西时,你会回复一份文档,其中每个段落至少包含一个笑话或有趣的评论。
三引号、XML 标签、节标题等分隔符可以帮助划分要区别对待的文本节,防止指令注入或混淆。
示例:
用 50 个字符总结由三引号分隔的文本。
"""
在此插入文字
"""
对于复杂任务,明确地写出步骤可以使模型更容易实现。
示例:
使用以下分步说明来响应用户输入。
步骤 1 - 用户将为您提供三引号中的文本。用一个句子总结这段文字,并加上前缀'Summary:'。
步骤 2 - 将步骤 1 中的摘要翻译成西班牙语,并添加前缀'翻译:'。
经典的少样本提示,先给模型例子,让它模仿风格或逻辑。
示例:
按这句话的风格来写 XX 文章:
"""
落霞与孤鹜齐飞,秋水共长天一色。
渔舟唱晚,响穷彭蠡之滨。
"""
可以要求模型生成给定目标长度的输出。中文效果可能不如英文精准,但指定段落数通常效果较好。
示例:
用两个段落、100 个字符概括由三引号分隔的文本。
"""
在此插入文字
"""
给大模型提供特定的文本或文档,能大幅降低模型胡说八道(幻觉)的概率。这本质上是将大模型当作知识库来使用。
经典的知识库用法,强制模型仅使用提供的信息组成答案。
Prompt 示例:
使用提供的由三重引号引起来的文章来回答问题。如果在文章中找不到答案,请写'我找不到答案'。
"""
<在此插入文档>
"""
问题:<在此插入问题>
要求模型在回答时引用原文段落,提高正确性和可验证性。
Prompt 示例:
您将获得一份由三重引号和一个问题分隔的文档。您的任务是仅使用提供的文档回答问题,并引用用于回答问题的文档段落。如果文档不包含回答此问题所需的信息,则只需写:'信息不足'。
格式:{"引用": "..."}
"""
<在此插入文档>
"""
问题:<在此插入问题>
如同人类项目管理,一次性完成大任务容易出错。将复杂任务拆解为子任务,大模型会有更好的表现。
在客服场景中,先判断问题类别,再回答具体问题。
流程示例:
代码逻辑示意:
# 伪代码:意图分类 + 响应
intent = classify_intent(user_query) # 例如:technical_support
if intent == 'technical_support':
response = solve_network_issue(user_query)
else:
response = handle_general_inquiry(user_query)
模型具有固定的上下文长度,无法无限期继续对话。可以通过总结历史记录来解决。
策略:
针对几百页的 PDF 或书籍,Token 上限是限制。可以使用一系列查询总结文档的每个部分,章节摘要连接后再生成摘要的摘要,递归进行。
即 Chain-of-Thought (CoT) 提示法。直接问结果模型容易懵,给时间一步步计算,准确率会大幅提升。
先让模型自己解题,再评估学生的解法。
Prompt 示例:
首先制定自己的问题解决方案。然后将你的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。在你自己完成问题之前,不要决定学生的解决方案是否正确。
某些场景下(如辅导应用),模型的推理过程不适合直接展示给用户。可以将推理放入结构化格式中,解析后仅显示最终答案。
多轮 API 通讯示例:
在长文本问答中,模型可能过早停止。可以通过后续 Prompt 追问。
示例:
初始 Prompt:列出文档中与'北京烤鸭'相关的片段(JSON 格式)。
追加 Prompt:还有更多相关片段吗?注意不要重复摘录。确保相关片段包含解释它们所需的所有相关上下文。
大模型并非万能,数学计算、实时信息等需要外部工具辅助。
检索增强生成 (Retrieval Augmented Generation)。对于静态知识库,常见步骤如下:
大模型自身计算能力有限,建议让模型编写 Python 代码执行计算。
Python 代码执行示例:
求以下多项式的所有实值根:3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10。
请将 Python 代码括在三个反引号中来编写和执行。
```python
import numpy as np
coeffs = [3, -5, -3, 0, -7, -10]
roots = np.roots(coeffs)
print(roots)
此外,也可以将 API 文档复制给模型,让它知道如何调用接口。
### 3. 给模型提供特定功能 (Function Calling)
通过 API 传递函数描述,告诉模型哪些函数可用及参数格式。模型生成参数 JSON,后端执行后返回结果,再由模型转为用户语言。
**JSON Schema 示例:**
```json
{
"name": "get_weather",
"description": "获取指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}
}
对于开发者,判断 Prompt 优化是否有效至关重要。由于样本量小,很难区分改进是源于设计还是运气。
建议做法:
具体细节可参考 OpenAI 官方关于策略测试变更的文档。
Prompt Engineering 不仅仅是技巧,更是日常表达能力的映射。与人协同顺利,表达清楚需求,才是最重要的。OpenAI 的这份指南提供了坚实的理论基础,结合上述实战技巧,可以帮助开发者更高效地驾驭大模型技术。
在实际应用中,建议遵循'布阵清晰、传球舒服、接球靠谱'的原则,不断迭代优化,才能在大模型时代获得最大收益。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online