Prompt Engineering for Large Language Models

devtools/2025/3/4 16:13:50/

题目

大型语言模型的快速工程

在这里插入图片描述

简介

    随着 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


http://www.ppmy.cn/devtools/164503.html

相关文章

【Elasticsearch】ignore_malformed

在Elasticsearch中,ignore_malformed是一个字段映射参数,用于控制在索引文档时,如果字段数据不符合其定义的数据类型,Elasticsearch 应该如何处理这种情况。具体来说,ignore_malformed参数决定了是否忽略格式错误的数据…

决策树(Decision Tree):机器学习中的经典算法

1. 什么是决策树? 决策树(Decision Tree)是一种基于树形结构的机器学习算法,适用于分类和回归任务。其核心思想是通过一系列的规则判断,将数据集不断划分,最终形成一棵树状结构,从而实现预测目…

MFC中CMutex类和CSingleLock类,配合使用疑惑

在使用CMutex过程中,看到别人使用了CSingleLock类,想着明明CMutex已经可以实现线程同步了,为什么还有使用CSingleLock类呢? 在MFC中,虽然CMutex类本身可以实现线程同步,但通常会与CSingleLock类一起使用&am…

大型语言模型中微调和提炼的详细技术比较

目录 概要 介绍 技术背景 微调和参数高效策略 模型提炼 理念的冲突 QLoRA:将量化与低秩自适应相结合 高级量化:不破坏的缩小艺术 4 位量化为何有效 低阶适配器集成:效率的艺术 低秩适应为何有效 QLoRA 为何如此重要:宏观视角 提炼:机制与训练动态 学生永远无…

ZK Rollup

ZK Rollup 通过生成零知识证明来确保所有提交的交易都是有效的。生成零知识证明的过程涉及复杂的密码学运算,通常使用的是 zk-SNARK(零知识简洁非互动知识论证)或 zk-STARK(零知识可扩展透明知识论证)。以下是 ZK Roll…

从零开始设计一个完整的网站:HTML、CSS、PHP、MySQL 和 JavaScript 实战教程

前言 本文将从实战角度出发,带你一步步设计一个完整的网站。我们将从 静态网页 开始,然后加入 动态功能(使用 PHP),连接 数据库,最后加入 JavaScript 实现交互功能。通过这个教程,你将掌握一个…

postgreSQL表膨胀率

postgreSQL表膨胀率是指表中无效数据(死元组)占实际有效数据的比例,主要由MVCC机制下未及时清理的旧版本数据积累导致。以下从判断方法、计算逻辑、原因分析及解决方案进行说明: 一、膨胀率判断方法 ‌通过系统视图查询‌ 使用 p…

Qt中应用程序框架的体系说明 及应用程序类QApplication类深度解析与应用分析

作为Qt开发者,我们肯定经常见到过QApplication类,有时候可能你看到了都没注意,也没太关心这个类做什么用。那你只需随便建个窗体程序的工程,在自动生成的工程文件main.cpp中就能看到,像这样: #include &qu…