Azure Openai 服务文档一站式学习系列(2)——Prompt工程和技巧

上文中对模型基础概念有基本的描述,传送门

最近的GPT-3.5 和 GPT-4 等模型基于提示词使用,通过输入文本提示与模型进行交互,文本提示通过文本补全进行相应。模型对提示词非常敏感,提示词的构建变得很重要;其有点玄学,而非科学,通常需要根据经验或实验来完成提示词的创建。

值得注意的一点,提示词并非适用于所有的模型,即使在某模型验证比较成熟的提示词换一个模型后依然需要重头再来,但提示词构建的架构、方法和提问技巧可能是可以复用的。

熟读唐诗三百首 不会作诗也会吟

对于prompt最好的学习方式是多看、多试;下面更多是方法论或经验,想要掌握prompt,需要 “知行合一”“世上练王阳明


提示词构成

以下构成并非全部每次都需要,任意一项其实也可以得到chatgpt的结果输出。

指令Instructions主要内容
content
示例
Examples
指示
Cue
支撑信息
Supporting content
指令指向模型说明要执行的操作,可以很简单也可以很复杂。主要内容是指模型正在处理或转换的某种文本。 主要内容通常与指令一起使用,比如指令要求都某内容进行翻译或内容概要提取。
在常见的prompt建议中,一般均将内容进行间隔包裹,如使用 “””内容””” 或 【内容】。
即“one-shot”或“few-shot”,给予一个例子将有助于模型更好的回答。通常示例包含成对的输入和输出。示例并没有改变模型,而是给予模型引导。用来约束规范最终的输出,一般与指令配合。其可以帮助模型来聚焦输出,也可以用来规范输出的格式。类似关键词或参考质量,影响最终的输出;其与主要内容不同,但通常与其一起使用;常常是一些上下文信息。
提示词的构成结构

提示词的官方建议或高级用法

通过系统消息,赋予模型角色和背景

系统消息一般放在提示词的开头(不是提示词哦),用于提供指令、上下文等支撑信息。可为模型设置一个身份角色,定义模型回答或不回答的边界,定义回答的格式或风格要求。

最好在此给予模型限定,当有不确定或不知道的结果时候回复“我不知道”或“我不确定”,减少其一本正经瞎说的可能;但该操作也只能在一定程度上规避,无法完全杜绝。

系统消息在API接口中以 “system”对象存在,可进一步查看下文中对于接口的相关说明。

通过少样本学习,让模型“现学现用”

少样本学习( Few-shot learning)即给予模型少量的示例,让其“现学现用”。在“临时抱佛脚”的过程中需要提供一组训练示例。对于一些常见的文本创作,提示比较方便;但是对于数据分析类型具有较多上下文的示例,建议不要使用该方法。

提示词中从明确的指令开始,凸现其重要性

由于在会话交互中需要提供一定量的文本,提示中展示信息的顺序就变得尤为重要。官方建议,优先指令,并尽量在上下文或示例之前。

在接口调用中,OpenAI定义了 “system”, “user”, “assistant”三种对象,系统消息以 “system”对象存在,所以在”user”中尽量以指令开头,明确告知模型需要处理的内容,其他的一些主要内容、示例、指示、支撑信息应该在指令后面。(该部分详见上方的提示词构成的结构)

指令等信息的间隔可以使用“—文本信息—”或“”””文本信息””””来区隔,这样将有助于表达明确的意向。同时,官方建议在提示词末尾再次复述指令,因其有可能收到近因偏差的影响。

提示词末尾给予输出的引导,限定其格式、数量等

对于输出有明确格式要求或数量要求的,应该在结尾中进行明确的说明;如返回几条数据、以json格式返回等等。

按照人类思维去分解任务,让模型更好理解

如果任务分解为较小的步骤,模型的性能和准确度通常会更好。将上下文信息按照上方使用特定符号区隔,然后明确告知模型分为若干步骤,每一个步骤具体处理的信息或指令。

另外一个变体是 思维链 提示,其不同在于不是进行按照步骤的切分,而是思考和执行上的递进。

温度和Top_p参数

两个参数类似都是控制模型相应的随机性,都直接影响最终结果的输出;一般建议一次只更改这两个参数其中之一,而不是同时更改它们。

如温度可以设置为 0 到 2。 较高的值将使输出更随机,并产生更多发散的响应,而较小的值将使输出更加集中和具体。 虚构的故事可以使用更高的温度生成。

使用自有数据,既保证数据安全,也能基于数据提供最新数据

由于该能力需要引入向量数据库,故后续单独说明。

其他最佳实践

  • 具体再具体,清晰再清晰;类似“手把手教育引导”,建议按照一定的pormpt框架编写提示词
  • 任务可描述,给予类比
  • 强调。 在主要内容之前和之后提供说明,使用指令和指示等。
  • 给事项排序。
  • 对于复杂问题,给予解决的路径或步骤


本系列的所有文章:

  1. Azure Openai 服务文档一站式学习系列(1)——基础概念
  2. Azure Openai 服务文档一站式学习系列(2)——Prompt工程和技巧
  3. Azure Openai 服务文档一站式学习系列(3)——OpenAI API的使用
  4. Azure Openai 服务文档一站式学习系列(4)——API调用私有数据的能力
  5. Azure Openai 服务文档一站式学习系列(5)——Embeddings嵌入/向量化
  6. Azure Openai 服务文档一站式学习系列(6)——Fine-tuning微调
滚动至顶部