OpenAI官方Prompt工程指南详解
概述
数字生命卡兹克分享了OpenAI于2023年12月15日发布的Prompt engineering(提示词工程)指南。该指南包含了六个原则,旨在帮助用户更有效地构建优质的Prompt以与大型语言模型协同工作。
12月15号,OpenAI在他们的文档里上线了Prompt engineering,也就是提示词工程指南,至此,终于算是有了一个权威且有效的Prompt工程标准文档。
我花了20分钟看完了后,其实挺会心一笑的,整篇指南简洁、明确、高效,写的非常棒。
OpenAI提到6条大的原则,分别是:
1. Write clear instructions(写出清晰的指令)
2.Provide reference text(提供参考文本)
3. Split complex tasks into simpler subtasks(将复杂的任务拆分为更简单的子任务)
4. Give the model time to “think”(给模型时间“思考”)
5. Use external tools(使用外部工具)
6. Test changes systematically(系统地测试变更)
我用这篇文章,来通俗易懂的给大家聊一下具体的原则和例子
一. 写出清晰的指令
1.1 把话说详细
详细解释如何通过提供详细信息和上下文来写出清晰的指令,避免过于笼统的表达。
比如:不要说:“总结会议记录”
而是说:“用一个段落总结会议记录。然后写下演讲者的 Markdown 列表以及他们的每个要点。最后,列出发言人建议的后续步骤或行动项目(如果有)。”
1.2 让模型充当某个角色
将大型语言模型想象成一个特定角色,以提高专业性和明确性。
比如:充当一个喜欢讲笑话的喜剧演员,每当我当我请求帮助写一些东西时,你会回复一份文档,其中每个段落至少包含一个笑话或有趣的评论。
1.3 使用分隔符清楚地指示输入的不同部分
介绍使用分隔符(如三引号)划分文本节,以帮助模型更好地理解文本内容。
比如:用50个字符总结由三引号分隔的文本。”””在此插入文字”””
1.4 指定完成任务所需的步骤
将复杂任务拆分为一系列明确的步骤,使模型更容易实现。
比如:使用以下分步说明来响应用户输入。
步骤1 – 用户将为您提供三引号中的文本。用一个句子总结这段文字,并加上前缀“Summary:”。
步骤2 – 将步骤1中的摘要翻译成西班牙语,并添加前缀“翻译:”。
1.5 提供例子
使用经典的few-shot prompt方法,给大型模型提供例子,引导其按照提供的例子输出。
比如:按这句话的风格来写XX文章:”””落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨”””
1.6 指定所输出长度
要求模型生成给定目标长度的输出,可以根据单词、句子、段落等计数来指定。
比如:用两个段落、100个字符概括由三引号分隔的文本。”””在此插入文字”””
二. 提供参考文本
2.1 让模型使用参考文本作答
利用知识库的经典用法,让模型使用提供的信息生成答案。
2.2 让模型通过引用参考文本来回答
要求模型通过引用所提供文档中的段落为答案添加引用,增加可验证性。
三. 将复杂的任务拆分为更简单的子任务
3.1 使用意图分类来识别与用户查询最相关的指令
通过意图分类拆分复杂任务,提高模型表现。
3.2 对于需要很长对话的对话应用,总结或过滤之前的对话
针对长对话应用,总结或过滤之前的对话,保持上下文的合理长度。
3.3 分段总结长文档并递归构建完整总结
利用分段总结递归构建完整文档总结,处理长文档。
四. 给模型时间“思考”
4.1 让模型在急于得出结论之前找出自己的解决方案
引导模型在找出结论之前自己思考解决方案,提高答案的准确性。
4.2 使用内心独白来隐藏模型的推理过程
通过内心独白隐藏模型的推理过程,适用于某些应用场景。
4.3 询问模型在之前的过程中是否遗漏了什么内容
引导模型检查之前是否遗漏了相关信息,用于长文本问答中。
五. 使用外部工具
5.1 使用基于嵌入的搜索实现高效的知识检索
使用搜索工具进行知识检索,通过向量匹配等方式提高效率。
5.2 使用代码执行来进行更准确的计算或调用外部API
让模型生成计算代码,或调用外部API以处理需要专业计算的问题。
5.3 给模型提供特定的功能
通过API请求传递特定函数描述,告诉模型可用的函数和参数。
六. 系统地测试变更
帮助开发者判断更改Prompt是否有效,建议建立评估程序来测试系统设计的优化效果。
结语
数字生命卡兹克认为OpenAI的Prompt engineering写得相当详细,认为比市面上绝大多数框架和课程更为实用。