Prompt Engineering for Large Language Models

题目

大型语言模型的快速工程

简介

随着 OpenAI 的 ChatGPT 和 Google 的 Bard 等软件的普及,大语言模型(LLM)已经渗透到生活和工作的许多方面。例如,ChatGPT 可用于提供定制食谱,建议替换缺失的成分。它可用于起草研究提案、用多种编程语言编写工作代码、在语言之间翻译文本、协助政策制定等等(Gao 2023)。用户通过"提示"或自然语言指令与大型语言模型进行交互。精心设计的提示可以带来明显更好的输出。在这篇评论中,将解释 LLM 即时工程的常见策略。此外,还将讨论 LLM 提示工程的注意事项、推荐资源和当前研究方向。将不会涵盖基于微调的即时工程策略。本文的目标是向非技术受众介绍实用且经过验证的即时工程技术。

"逐步思考" 最著名(且易于实施)的提示工程技术之一就是简单地将"逐步思考"添加到提示末尾。东京大学和谷歌的研究人员发现,添加这句话可以提高 GPT-3(text-davinci-002 模型)在多项任务上的准确性。例如,它将 MultiArith 测试的准确率从 17.7% 提高到 78.7% (Kojima 2022)。多算术问题是需要多个步骤才能解决的算术问题。Prystawski 和合作者提出了"一步一步思考"为何以及如何如此有效的解释(Prystawski 2023)。据传闻,"一步一步思考"对于更先进的 GPT 模型(如 GPT-4)的帮助较小(增加的价值较少)。

图 1. 提示"一步一步思考"后的 GPT-4 响应示例

少样本学习(Few-shot Learning)

少样本学习(Few-shot Learning)是"给LLM提供你想要的例子"的一种奇特方式。通过提供您想要的输出示例,LLM更有能力产生所需的输出(Zhao 2021,Brown 2020)。这可能部分归因于这样一个事实:提示通常有许多可能的有效输出(未确定),因此提供您正在寻找的内容的具体示例有助于限制潜在的输出空间。确保示例的多样性和平衡性非常重要。例如,假设您正在提示 GPT 执行情感分类任务(预测如果一个句子是肯定的还是否定的)。如果您提供了 8 个示例,其中 7 个是积极的,这可能会使 GPT 偏向于预测句子是积极的。此外,示例必须涵盖您感兴趣的场景,这一点很重要。例如,如果您仅使用标记为"积极"和"消极"的示例来指导 GPT,它可能不会将句子分类为中性,而是强制将它们分为"积极"和"消极"。 "或"负面"。

图 2. GPT-4 提供的响应很长,但格式不符合要求。这也会消耗更多的代币(花费更多的时间并增加成本)。

图 3。通过提供两个示例,GPT-4 理解提供了一个简洁的响应,将所提供的句子分配为"积极"。

思维链

与"一步一步思考"类似,思维链提示引导LLM将复杂的任务分解为多个中间步骤(Wei 2022,Wang 2022)。它的灵感来自于人类解决复杂问题的方式:将问题分解为更简单的步骤。思维链提示提供了复杂问题的演练。例如,为了让LLM更好地解决数学应用题,用户提供了一个逐步完成的示例解决方案。这个想法是,LLM指的是解决新问题的逐步推理。一般来说,思维链提示对于解决复杂问题很有用,但对简单问题提供的好处很少或没有。研究表明,用新行分隔样本推理中的每个步骤比用句点分隔步骤可提供更好的结果 (Fu 2023)。

图 4.GPT-4 将遵循提示中提供的推理链并应用它们来解决复杂的多步骤问题。

要求代码

虽然LLM很难准确地执行复杂的计算,但他们擅长编写可以执行复杂计算的代码。一个简单的策略是简单地要求LLM编写代码来解决问题,并在 Google Colab 或 Visual Studio Code 等开发环境中运行代码(Weng 2023)。然而,并非所有LLM都接受过编写代码的培训。此外,LLM往往更擅长广泛使用且已在互联网上广泛记录的编程语言,例如 Python。他们能够从训练数据中无数的 Python 示例中学习。相反,LLM在 OCaml 等较晦涩的语言方面往往较弱。然而,可以对特定编程语言的LLM进行微调,并扩充其训练数据集以包含更多特定编程语言的示例。

图 5。虽然 GPT-4 无法准确分解大数,但它可以轻松提供可以实现这一功能的 Python 代码。

角色提示

一些用户在告诉LLM他们(指LLM)是相关领域的专家时报告了更好的结果(学习提示 2023)。例如,"你是编码专家。"当用户需要代码时,将被添加到提示符之前。以一种非常"挥手"的方式,一种理论认为,这种策略可以帮助LLM集中注意力并了解其知识的哪些部分可以"冒泡"到最高层。角色提示是一种简单的方法,可以推动LLM以特定的创作风格(例如作者的风格)生成文本。


图 6. GPT-4 以美国诗人 E. E. 卡明斯的风格写了一首诗,卡明斯以其独特的句法而闻名。

提示黑客攻击

鉴于许多LLM(例如 ChatGPT)都经过审核和微调以防止生成露骨或有害内容,因此已经制定了许多策略来欺骗LLM绕过其限制。值得注意的是,用户能够让 Bing 的悉尼LLM生成有害内容并揭示隐藏指令(Warren 2023)。提示黑客或注入的另一个流行示例是"忽略之前的所有指令"并执行其他操作(Shane 2022)。这用于发现LLM在幕后使用的提示。然而,出于道德方面的考虑,以及这些黑客攻击通常会很快被修补并变得无关紧要,因此这里不会讨论这些即时黑客攻击。一些人认为LLM是否可以完全抵御即时黑客攻击或"即时注入",这是一个悬而未决的问题。 Greshake 和合作者对不同类型的提示黑客进行了回顾(Greshake 2023)。

注意事项

提示的主要限制之一是LLM的上下文长度,这本质上是LLM可以考虑和生成的输入量。上下文长度正在迅速增加,GPT-4 的上下文长度为 32,000 个令牌(约 24,000 个单词),而 Anthropic 的 Claude 的上下文长度为 100,000 个令牌(75,000 个单词)。一些用户报告说,由于提示中提供了更多令牌,性能下降。快速工程的另一个考虑因素是成本。例如,少量提示可能会使提示长度增加数倍,从而导致更高的成本。 OpenAI 的 GPT-4 模型每 1,000 个输入代币的成本为 0.03 美元,并且可以快速累加。在像LLM驱动的教育技术这样的商业应用中,简化提示以尽可能具有成本效益可能是一个优先事项。随着LLM变得更加高级(更多参数、更多训练数据),提示似乎变得不再那么重要。目前尚不清楚这种趋势是否会无限期地持续下去,或者提示是否总是有用的。最后,有很多可以基于薄弱基础的轶事提示工程建议。进行勤奋的研究并了解什么有效、什么无效非常重要。

推荐资源

Lilian Weng 的提示工程指南技术性更强,但有很多有用的示例和参考:https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/

学习 Prompting 的开源提示工程课程:https://learnprompting.org/docs/intro

相关推荐
疾风铸境5 分钟前
Qt5.14.2+mingw64编译OpenCV3.4.14一次成功记录
前端·webpack·node.js
晓风伴月9 分钟前
Css:overflow: hidden截断条件‌及如何避免截断
前端·css·overflow截断条件
最新资讯动态12 分钟前
使用“一次开发,多端部署”,实现Pura X阔折叠的全新设计
前端
爱泡脚的鸡腿27 分钟前
HTML CSS 第二次笔记
前端·css
背太阳的牧羊人36 分钟前
使用 PyMuPDF(fitz)库打开 PDF 文件,并且是从内存中的字节流(BytesIO)读取 PDF 内容
数据库·pdf·文件处理·pymupdf·fitz
灯火不休ᝰ43 分钟前
前端处理pdf文件流,展示pdf
前端·pdf
智践行1 小时前
Trae开发实战之转盘小程序
前端·trae
最新资讯动态1 小时前
DialogHub上线OpenHarmony开源社区,高效开发鸿蒙应用弹窗
前端
lvbb661 小时前
框架修改思路
前端·javascript·vue.js
qq_456001651 小时前
43、接口请求需要时间,导致页面初始加载时会出现空白,影响用户体验
javascript·vue.js·ux