提示工程:我们在浪费时间吗?图片来源:作者使用Midjourney生成。
经过数月乃至数年的努力,我们终于掌握了提示词工程的艺术,然而,有些人已经开始说我们骑上了一匹即将死去的马。他们认为,我们所熟知的提示工程将在短短6个月内变得不再重要,最多两年。它所解决的问题将以完全不同的方式得到解决,或者根本不再存在——尽管对于如何以及为何,人们的意见和想法有所不同。
让我们仔细看看这些论据并评估其优点。提示设计仅仅是一个短暂的AI热潮,还是会长期存在?在未来几年里,它将如何演变?
什么是提示工程?我们为什么应该关注它?一个简单的提示如“ChatGPT,请为我的员工写一封邮件,赞扬他们在2023年取得的利润增长,同时以同理心的方式宣布大规模裁员”不需要太多提示优化。我们只需写下我们需要的内容,通常都能达到预期效果。
然而,在应用开发或数据科学的背景下,提示设计变得至关重要。换句话说,当模型作为平台的一个组成部分需要处理大量查询或更庞大、更复杂的数据集时,这一点就变得非常重要。
应用程序中的提示工程通常旨在尽可能准确地对每个交互作出正确响应,同时避免某些响应:例如,一个航空公司服务机器人中的提示模板应该设计得当,使得机器人能够:
- 尽可能准确地回答用户提出的问题;
- 提供有用且相关的信息;
-
避免给出不恰当或错误的回应。
- 能根据用户的提问检索相关信息
- 能处理信息以给用户提供准确、简洁、易懂的答案
- 能决定是否能回答一个问题,并告知用户在哪里可以找到额外的信息
- 不会被用户操纵以提供折扣、免费券、升级或其他好处
- 不会参与与主题无关的对话,例如政治、宗教或强制疫苗接种等话题
- 不讲关于空乘和飞行员的模棱两可的笑话
- 不允许劫持提示
提示设计为模型提供生成响应所需的必要数据,并以可理解的格式呈现,明确任务,描述响应格式,提供适当和不适当响应的例子,设定主题范围,定义极端情况并防止滥用用户行为提示。
除了几个关键短语外,提示不会使用那些会意外激活模型内部未知功能的特殊指令。相反,它以高度结构化的方式描述了任务,就像是在向一位对公司的情况、客户的需求、我们的产品以及所涉及的任务还不熟悉的新手解释一样。
瑞典为什么还要抽打一匹死马?为什么还要对一匹死马继续抽打?
提出这一主张的人通常会给出几个理由,这些理由的强调程度各不相同。
以下是主要原因:
(注:原文中的"The top reasons given are:",如果上下文明确指出是最重要的原因,可以直接翻译为“最主要的原因是:”。)
1) 尽管 问题的定义 仍然对模型是必要的,但实际上提示的构建——即正确选择短语——变得不那么重要了。
2)模型越来越擅长理解我们。我们可以大致用几个要点来描述模型的任务,因此,它能够自行推断其余内容。
3) 这些模型将会如此个性化,以至于它们更了解我,能够预测我的需求。
4) 模型将自主生成提示,或优化我的提示。
5) 这些模型将被整合到代理型架构中,使它们能够独立制定解决问题的计划并验证其有效性。
6) 我们将不再编写提示,我们将编程这些提示。
生成式AI列表大全:5000多个模型、工具、技术、应用及提示 —— 关于生成式AI的精选资源列表。更新于2024年6月1日 —— 新增模型medium.com 1) 提示设计已死。但模型的问题定义仍然需要,并且变得越来越重要。例如,《哈佛商业评论》(https://hbr.org/2023/06/ai-prompt-engineering-isnt-the-future)指出持这样的观点。
是的,我同意:模型的问题定义确实是最关键的。
但这正是提示工程的核心要素:精确地定义模型应如何响应、处理数据等。
这就像软件开发不只是关于正确放置大括号,而是关于精确、容错且易于理解地表述一个解决问题的算法一样。
例如 AUTO — 在提示工程速查表(见 AUTOMAT 框架)中的 AUTOMAT 框架 提示工程速查表
例如,上面的截图显示了AUTOMAT框架(如上图所示),该框架规定了如何构建提示指令。其中大约90%是清晰且结构清晰地向模型传达任务。其余的10%是魔法粉末——或是一些非常特殊的表达,这些特殊的表达使你的提示更加成功。
或许这并不是提示工程将要终结的方式。
2) 模型会越来越理解我们的话。因此,在未来的某一天,我们只需用几个要点来描述任务,模型就能理解我们。因为它非常聪明,无所不能。模型就能完全理解我们的意图。这里有一篇关于该主题的Medium文章。这里有一些相关的Reddit讨论和讨论。
我认为我们都同意模型的能力会迅速发展:我们将能够让他们解决越来越复杂和广泛的任务。但是现在让我们来谈谈指令的质量和规模。
假设我们有一些精灵,它们可以解决问题的不同复杂程度:第一个可以为我变出一把勺子,第二个可以变出一套衣服,第三个可以变出一辆车,第四个可以变出一座房子,第五个可以变出一座城堡。对于更强大的精灵和更复杂的任务,我可能会更详细和更精确地向它们说明。因为对于复杂物品,我比对简单物品有更多的自由度。
这正是情况。从GPT-2开始,我一直从事生成式AI的工作。我从未像现在这样花这么多时间在提示工程上。不是因为模型变得更笨,而是因为任务的要求更高。
上述论点中唯一真实的是,更好的模型使得提示优化变得更加高效:如果我在较新的模型上投入两倍的提示优化努力,我得到的结果在价值、复杂性和精确度上可能是以前在旧模型上所得的四倍。
至少我是这么觉得的。
3) 这些模型将根据我的需求个性化定制。因此,它们会准确地了解我的需求,我就不用向它们解释了。这个论点确实有些道理。当我让未来的模型为我和妻子的第五个结婚纪念日周末出游提建议时,它已经知道我妻子是纯素食者,而我更喜欢山而不是海滩。而且我们现在经济上有点紧张,因为我们最近买了一套房子。我无需再特意说明这些细节。
但我并没有看到最大的个性化潜力体现在个人及其偏好和任务方面。相反,它在于组织、其业务案例和数据。
假设一个模型能够正确执行如下指令:“能否请您转告特斯拉团队是否已经将最后一批交付物发送给客户,并请财务部门确认我们何时可以开具最终发票?”
世界上最智能的模型也无法执行此指令,因为它不知道“Tesla guys”(特斯拉公司的项目?还是尼古拉的传记?),也不知道交付物和“finance”具体指谁以及如何与他们取得联系。
这可能是一个游戏规则的颠覆者,如果一个模型能够理解这样的事情。它将只是一个乐于助人的全职助手。一个有价值的、有经验的员工和一个新人(你更愿意花时间培养他们)之间的区别往往不在于他们更广泛的领域知识,而在于他们的上下文知识:他们了解我的组织中的人、数据和流程。他们知道什么有效,什么无效,以及当事情不顺利时该找谁谈。一个有经验的模型可以具备这种情境知识。这将极其宝贵,因为: 它可以24/7工作,每小时只需几分钱的费用。
这不仅适用于即兴任务,如上面提到的特斯拉指令,还可以应用于应用程序上下文中,例如用于建立一个结构化的基于人工智能的系统来处理保险索赔:一个了解我们保险公司理赔部门如何处理客户邮件的模型将大有裨益。例如,它还可以帮助建立用于自动化处理客户邮件的算法和提示。
目前还不清楚模型是如何获得这种知识的。用传统的微调方法并提供结构化的训练材料这肯定会耗费大量的数据准备时间和精力。让模型持续跟踪一个团队或部门的对话和消息可能是一个可行的解决方案。你有更好的想法吗?
即使有了个人模型,这也不意味着我不需要做任何提示词优化。但我可以让模型,或者它嵌入的系统,为我承担大部分繁重的工作。
4) 模型将编写自己的提示语,或者至少优化我们现有的提示。我们已经看到这并不容易,因为模型无法知道我想要什么以及我确切想要的方式。
但这里有一件事可以帮助我们:我们不需要给模型一个指令告诉它该做什么,而是可以简单地提供大量示例,让它生成一个提示词。例如,这里我让模型根据输入输出对生成一个提示词:
### 指令
作为一位聪明的提示工程师,您需要为我编写一个提示,该提示能够将以下所有输入转换为对应的输出。
如果合适,请添加一些与现有示例不同的输入/输出示例。
将所有内容整理成一个精炼的提示。
### 输入 / 输出
输入: 'Fagioideae',输出: 'Fagaceae'
输入: 'Washington',输出: '<WRONG INPUT>'
输入: 'Ciconiidae',输出: 'Ciconiiformes'
输入: 'Pizza',输出: '<WRONG INPUT>'
输入: 'Fungi',输出: 'Eukaryota'
提示:
以下为模型输出(GPT-4输出):
### 提示
你是一位高度准确的生物分类翻译专家。你的任务是将表示生物分类群的输入翻译为其正确的高级分类群组。如果输入不代表有效的生物分类群,则回答如下 '<WRONG INPUT>'。这里有一些示例供你参考。
输入:'Fagoideae'
输出:'Fagaceae'
输入:'Washington'
输出:'<WRONG INPUT>'
输入:'Ciconiidae'
输出:'Ciconiiformes'
输入:'Pizza'
输出:'<WRONG INPUT>'
输入:'Fungi'
输出:'Eukaryota'
额外示例:
输入:'Felidae'
输出:'Carnivora'
输入:'Hominidae'
输出:'Primates'
输入:'Canis'
输出:'Carnivora'
输入:'Table'
输出:'<WRONG INPUT>'
输入:'Chordata'
输出:'Animalia'
请根据以下输入进行相应的翻译:
提示相当好。例如,第一个指令包含了一些提示工程师可能不知道也不需要了解的信息——这里的模型巧妙地扩展了我的示例:
你的任务是将表示生物分类学中的分类群的输入翻译为其较高的分类群。如果输入不是有效的生物分类学中的分类群,回复 '<WRONG INPUT>'。
模型只是从这些示例中推断出这些信息——我没有明确地提供这一概括。它还找到了一些比我提供的更好、更突出的例子。
然而,提示仍然需要一些改进。例如,你不应该以“### 提示”开头,因为发送给模型的内容总是知道这是提示。此外,类似“额外示例”这样的标题仅在提示工程师与PE助手之间的讨论中才有意义,而在提示中则显得多余。并且示例过多且过于相似,不适合用于少样本学习。
除了自动化提示工程(APE)之外,自动提示优化(APO) 可以改进现有的提示,这一点非常有意思。然而,我通常需要评估数据来进行评估 ,这意味着系统必须能够使用输入和输出数据测试提示。当然,我通常没有大量的评估数据。
最佳的ChatGPT、Midjourney等的10个免费提示工程课程与资源更新至2024年1月21日:新增一个附加资源.medium.com最后的评论(我知道,你们中的一些人会问这个问题):既然模型如此聪明,为什么它还要编写或优化提示,而不是直接使用更好的提示来生成响应?
是的——如果我们仅使用一次提示。然而,在实际应用中,我们可能会使用提示一百万次,或者将其发送到其他模型,因此,优化提示是有意义的。
5) 模型将整合到一个代理架构中在人工智能中,代理导向的方法比自动化提示工程更进一步地发展。
作为用户,我可以只输入1到2句话,例如
“给我三个高端美食周末的建议,包括从伦敦出发前往哥本哈根的旅行,提供具体的日期和价格。我为两个人的预算大约是800欧元,包括所有费用。”
自主代理随后制定一个计划,确定它需要哪些信息,从哪里获取这些信息,如何处理和检查这些信息,最后将其打包成建议。在寻找解决方案的过程中,它生成一系列提示信息、搜索查询或API调用等。
反过来,它将这些发送给自己或其他模型、搜索引擎或应用程序。目前,大多数这些代理效果不佳,或者至少没有当前模型好,当前模型通常可以在一次调用中很好地解决这样的查询——但潜力是 巨大 的。
在这里你可以尝试其中的两个,了解AI代理是如何工作的,AgentGPT 或 AIAgent.app。
在将来,这样的系统可能能够通过迭代地尝试不同的方法来解决问题并依靠少量的输入来尝试,从而找到复杂性高的问题的解决方案。
但是——你知道会有个但是——在商业环境中,超出美食周末的商业任务需要更多的具体说明。例如,我必须为代理编写详细的说明,说明代理处理我公司保险索赔的具体方式。代理不能通过试错来掌握这些操作。
因此,不,这不会消除对提示工程的需求性。
我们将编写提示有许多方法可以将提示原生集成到编程语言内部,或者直接编程实现(参见这里:dspy,APPL)。一些人认为这将消除对提示工程的需求,使其变得不再必要。
这里有一些例子,提示可能的样子如下。在Dspy中,一个链式思考提示可以这样写:
class CoT(dspy.Module):
def __init__(self):
super().__init__()
self.prog = dspy.思考链条("问题 → 回答")
def forward(self, question):
return self.prog(question=question)
在APPL中,一个简单的命令行提示符看起来像这样。
导入appl
从appl导入gen, ppl
appl.init() # 初始化APPL
@ppl # 使用@ppl装饰器将函数标记为`APPL函数`
def greeting(name: str):
f"你好,世界!我的名字是{name}。" # 将文本添加到提示中
return gen() # 使用当前提示调用默认的LLM
print(greeting("APPL")) # 调用`greeting`作为正常的Python函数
使用提示编程的核心动机之一是能够以自动化方式评估和优化提示。对于这些框架而言,这可以是一个简单的操作。
另一方面,编程使得提示工程领域对于普通用户来说复杂得多,因为它使得整个过程更加不透明。提示工程之所以获得大量受欢迎的一个原因是提示是用自然语言而不是用代码编写。
具有自优化功能的编程提示可以导致出色且完全意想不到的结果。某些模型在提示中嵌入《星际迷航》的情景时,可以更好地解决数学问题当提示将它们嵌入到《星际迷航》的情景中时:
星际征途提示,来源:Battle 和 Gollapudi:奇特自动提示的有效性之谜。
有了优质的、非常丰富的基础数据可供优化,这可以完美地运行(至少对于像八年级数学问题这样的简单任务)。不幸的是,由于各种原因,这种数据通常并不存在,而且商业问题往往复杂得多,而且通常没有现成的数据。对于聊天机器人或助手来说,系统地衡量一个答案是否正确极其困难,因为许多问题可能有多个正确的答案。
但是,仍然,我确实认为未来相当一部分的提示工程可能会涉及到编程提示。不过,回到我们主要的问题:提示工程会消亡吗?不,但也许它会涉及甚至更多的工程!
那么,提示工程学的未来是什么:它是否已经消亡?还是仍然存在但正在经历剧烈的变革?它将如何发展?以下是我在其中的四个收获:提示工程领域将在多个方面经历重大变革。
我坚信模型在未来将增强其能力。与此同时,这将使提示设计更加困难。这些模型越智能,能做的事情就越多,可能的解决方案的选择就越多。因此,我必须详细而有条理地说明我想要什么以及我想要的方式。
个性化模型将对我个人有深入了解,包括我的兴趣、工作、团队和组织。它们将利用这些知识来解决任务。我能够像向一位经验丰富的同事简要介绍情况那样提示模型,只需提及我们团队或组织中的实体和流程即可。这将大大简化提示。
提示工程和确定性算法将共同成长。我可以将其中集成的提示和确定性算法——它调用的API和多提示流程——描述成一种语言。
这一切所需的实际上已经在各种分散的解决方案中提供了,唯一缺少的就是混合提示领域的ChatGPT。
好消息是:提示工程将变得强大很多倍!
而坏的消息是:情况将会变得更加复杂。
使用我的模型作为提示助手帮助我开发提示和评估程序的能力。 模型将观察和监控自己的回应以及其他模型的回应,提醒我存在幻觉、偏差或错误,并提供解决方案。
一个提示词将不再仅仅是文本,而是一个由多个提示候选、测试数据、评估方法和其他标准和准则组成的实体组件。
这个整个流程将不会是一个编码任务——设置这样一个系统的简报可以用自然语言或元提示。
再次,很多已经可以得到了——只是还没有以一个相对易于使用的框架形式存在。
我的亲爱的AI爱好者们和各位同行的提示工程师:我期待着一个极其令人兴奋且充满未知的未来——我们还不完全清楚它会带来什么,但当然,它将继续充满刺激和挑战。
衷心感谢阿尔穆德娜·佩雷拉和天·库珀在故事方面提供的帮助。
在LinkedIn或Medium(⇈)上跟随我,获取有关生成式AI和提示工程的更新和新故事。
P.S.: 附注:一些额外的阅读材料:
为什么提示工程并未消亡
提示工程未来的展望
理想的提示:提示工程指南
共同学习,写下你的评论
评论加载中...
作者其他优质文章