我将介绍提示词设计和提示工程方面的一些高级技术,如果你还不熟悉提示工程,建议从《基础篇》开始。请务必记住,即使有效地使用了提示工程,你仍需要验证模型生成的响应结果。 因为精心制作的提示适用于某个特定方案并不一定意味着它能更广泛地推广到其他用例。

本手册中的所有示例都基于 GPT-4 模型和中文环境测试。

系统消息

系统消息包含在提示的开头,用于为模型提供上下文、指令或与用例相关的其他信息。 可以使用系统消息来描述助手的个性,定义模型应回答和不应回答的内容,以及定义模型响应的格式。

下面的示例显示了示例系统消息和生成的模型响应:

系统消息(System)

你是一个 AI 助手,可帮助人们查找信息并以押韵的方式作出回应。 如果用户问了你不知道答案的问题,就说出来。

用户(User)

我是Benj,你能说出关于我的什么?

助手(Assistant)

亲爱的Benj,我很抱歉地说,
我今天没有关于你的信息。
我只是一个拥有知识的 AI,
但是没有你的输入,我无法做解释。
因此,请多告诉我你在寻找什么,
我会尽我最大的努力给你一个独特的答案。

下面是一些系统消息的示例:

  • “助手是由 OpenAI 训练的大型语言模型。”
  • “助手是一种智能聊天机器人,旨在帮助用户回答编程技术问题。 仅使用以下上下文回答问题,如果不确定答案,可以说“我不知道”。
  • “助手是一种智能聊天机器人,旨在帮助用户回答其税务相关问题。”
  • “你是一名助手,旨在从文本中提取实体。 用户将粘贴文本字符串,你将使用从文本中提取的实体作为 JSON 对象进行响应。 下面是输出格式的示例:

    {  
     "name": "",
     "company": "",
     "phone_number": ""
    }

    需要了解的是,即使你在系统消息中指示模型在不确定答案时回答“我不知道”,这并不能保证此请求会百分百有效。 设计良好的系统消息可以增加产生特定结果的可能性,但仍可能会生成不正确的响应,甚至可能会与系统消息中的指令的意图相矛盾。

少样本学习

让语言模型适应新任务的一个常见方法是使用少样本学习(few shot)。也就是需要在提示词中提供一组训练示例作为上下文。

使用聊天补全 API 时,用户和助手之间的一系列消息可以作为进行少样本学习的示例。 这些例子可以用来引导模型以某种方式相应,模仿特定的行为,以提供答案。

助手是一种智能聊天机器人,旨在帮助用户回答其税务相关问题。
说明:
1 仅回答与税收相关的问题。
2 如果你不确定答案,你可以说“我不知道”或“我不确定”,并建议用户前往相关网站获取详细信息。

非聊天场景

虽然聊天补全 API 已优化为处理多回合对话,但它也可用于非聊天场景。 例如,对于情绪分析场景,可以使用以下提示:

系统消息(System)

你是一名助手,帮我分析语音数据中的情绪。 用户将给到一串文本,你要对内容进行评估。 给出 1-10 的评分(10 为最高)。 并解释给出此评分的原因。

用户(User)

嗨,感谢你致电 Benj 药店。很高兴为你服务,请稍等片刻。我在这里看到你曾经使用过普通立普妥是吗?我看到你的医生在 2021 年停止开这些药物的处方了。根据最新提供给我们的医生办公室记录显示,在 2012 年至 2021 年期间,你的医生曾经给你开过这些药物处方。在最新记录中显示,医生已经更换了二甲双胍。请问我们需要帮忙发放 500 毫克二甲双胍处方给你吗?

助手(Assistant)

情绪评分:8
此文本中的讲者在解决客户关注的问题时似乎很有礼貌、有帮助和耐心。 他们花时间检查信息,提供明确的解释,并提供协助。 但是,评分不是 10,因为对话的某些部分仍有不确定性的暗示,这可能无法向客户传达完全的信心。

从明确的指令开始

提示中信息的顺序很重要。因为 GPT 的模型构建的方式定义了它们处理输入的方式。 通过研究表明,在上下文信息或示例之前,告诉模型你希望它执行的任务有助于生成更高质量的输出。

系统消息(System)

你是一名 AI 助手,可帮助用户查找核实信息。

用户(User)

你的任务是验证以下信息源是否支持“可能会发生另一次大地震”

内容片段
[1] 专家称西雅图发生特大地震的几率为14%
西雅图 - 美国地质调查局估计,在未来 50 年里,西雅图发生 9 级卡斯卡迪亚地震的可能性为 14%。 “不幸的是,我们无法...

[2] 地震专家对西雅图的“真正的大地震”进行了最新展望

“我们说,在未来 50 年里,大约有 14% 的机会再次发生大约 9 级的地震,”华盛顿大学的一位地球物理学家说。

以上新闻是否暗示或明确表述“可能会发生另一次大地震”?

助手(Assistant)

否,此陈述不由内容片段直接暗示或明确表述。 这些片段提到在未来 50 年内,西雅图有可能发生“特大地震”和“卡斯卡迪亚 9 级地震”,但没有提到另一次大型地震的可能性。

在末尾重复指令

模型会受到近因偏差的影响,在上下文中,这意味着在末尾的提示信息会比开头的提示信息对输出影响更大。 因此,可以尝试在提示结束时重复指令,并评估影响。

引导输出

这是指在提示的末尾包含几个字词或短语,以获取遵循所需形式的模型响应。 例如,使用 “请输出Json格式” 等提示词有助于确保输出的格式为所需要的格式。

添加明确的语法

对提示使用明确的语法(包括标点符号、标题和段落标记)有助于传达意向,并且使输出更易于分析。

比如使用`包裹内容,如果不确定要使用哪种语法,请考虑使用 Markdown 或 XML。 这些模型已通过 XML 和 Markdown 的大量 Web 内容进行了训练,这可能会提供更好的结果。

分解任务

如果把任务分解为较小的步骤,大型语言模型(LLM)的性能会更好。 例如,我要让模型帮我生成一份报告。1.让模型先给我们生成报告的大纲. 2.再分别生成每个章节的详细内容. 3.再生成支持内容的例子.

思维链(CoT)

思维链的主要思想是通过向大语言模型展示一些少量的 exemplars,在样例中解释推理过程,大语言模型在回答提示时也会显示推理过程。这种推理的解释往往会引导出更准确的结果。

系统消息(System)

你是一名 AI 助手,可帮助用户查找信息。

用户(User)

谁是在悉尼举行的奥林匹克运动会中获得最多奖牌(最大奖牌数)的个人运动员? 采取逐步方法回答问题,在分享最终答案之前引用来源并给出推理,格式如下:答案是:

助手(Assistant)

步骤 1:确定悉尼奥运会的年份。 悉尼奥运会是在 2000 年举行的。
步骤 2:查找在 2000 年悉尼奥运会上获得多枚奖牌的个人运动员名单。
据奥运会官方网站称,在 2000 年悉尼奥运会上,有数名运动员获得了多枚奖牌。 一些值得注意的名字包括:
•伊恩·索普(澳大利亚)- 3 金 2 银 0 铜
•彼得·范登·霍根班德(荷兰)- 2 金 0 银 2 铜
•莱尼·克雷泽尔堡(美国)- 3 金 0 银 0 铜
•英格·德·布鲁伊恩(荷兰)- 3 金 1 银 0 铜
步骤 3:确定获得最多奖牌的运动员。 回顾了在 2000 年悉尼奥运会上获得多枚奖牌的个人运动员名单后,我们可以看到,获得奖牌最多的运动员是来自澳大利亚的伊恩·索普,他共获得 5 枚奖牌(3 金 2 银)。
因此,答案是:伊恩·索普。

指定输出理由

使用指定输出理由时,会对响应结果产生重大影响。 有时候,要求模型“仅写出真实事实”或“不捏造信息”可能不足以缓解问题。这时候就需要要求模型把响应结果和为什么这样响应一起输出,会有助于减少错误响应。

示例:

根据在文本中看到的模式,将以下新闻标题分类,并告诉我这样分类的理由

温度和 Top_p 参数

改变温度参数会改变模型的输出。 温度参数可以设置为 0 到 2。 较高的值(例如 0.7)输出会更加随机,更发散的响应,而较小的值(例如 0.2)输出会更加集中和具体。虚构的故事可以使用更高的温度生成,生成法律文件时,建议使用更低的温度。
Top_probability 是另一个控制模型响应随机性的参数,与温度类似,它的控制方式有所不同。 一般建议只更改这两个参数其中之一,而不是同时更改它们。

提供基础上下文

提供可靠答案的最有效方法之一是为模型提供数据,让它从基础数据得出响应。 如果你的用例依赖于最新、可靠的信息,且不是纯粹的创意场景,我们强烈建议提供基础数据。 通常,源材料越接近所需答案的最终形式,模型需要完成的工作就越少,这意味着出错的可能性就越小。

标签: ChatGPT, prompt

添加新评论