微信扫码
与创始人交个朋友
我要投稿
就在我们经过数月甚至数年终于掌握提示词工程的艺术时,有些人已经在说我们正在骑着一匹病入膏肓的马。
他们认为,现有的提示词工程将在短短6个月,最多两年内变得无关紧要。它所解决的问题将以完全不同的方式被解决,或者根本不再存在——虽然人们对具体的方式和原因看法各异。
让我们仔细分析这些论点,并评估它们的合理性。提示词工程只是一个短暂的 AI 热潮吗?还是它会继续存在?在未来几年内它将如何演变和发展?
一个简单的提示词,例如“ChatGPT,请给我的员工写一封邮件,表扬他们在2023年的利润增长,同时以富有同情心的方式宣布大规模裁员”,不需要太多的提示词工程。我们只需写下需求,它通常就能奏效。
然而,提示词工程在应用程序或数据科学的背景下变得至关重要。换句话说,当模型作为平台的一部分,必须处理大量查询或更复杂的数据集时,提示词工程是不可或缺的。
在应用程序中的提示词工程通常旨在尽可能多地触发正确的响应,同时避免某些特定的响应。例如,一个航空服务机器人的提示模板应当精心设计,以确保机器人能够:
提示词工程为模型提供了生成易于理解的响应所需的数据,指定任务,描述响应格式,提供适当和不适当的响应示例,设定白名单主题,定义边缘案例并防止滥用用户提示。
除了少数几个关键短语外,提示词并不依赖于触发模型中的某些隐藏开关的魔法公式。相反,它以一种高度结构化的方式描述任务,就像向一个聪明的新人解释一样,这个新人仍然不熟悉我的公司、我的客户、我的产品和相关任务。
那些提出这个观点的人通常给出几个理由,并在不同程度上强调这些理由。
最常见的理由包括:
1) 尽管问题的表述对模型来说仍然是必要的,但实际的提示词编写——即选择正确的短语——变得不那么关键了。
2) 模型越来越能理解我们。我们可以大致写下我们需要模型完成的任务,并通过其智能,模型将自己推断出其余的内容。
3) 模型将变得高度个性化,它们将更了解我并能预见我的需求。
4) 模型将自主生成提示词或改进我们的提示词。
5) 模型将被整合到智能体设置中,使其能够独立制定解决问题的计划,并检查解决方案。
6) 我们将不再编写提示词,而是编程它们。
例如,《哈佛商业评论》 就持这种观点。是的,我同意:模型的问题表述确实是最重要的。
但这正是提示词工程的核心部分:准确地指定模型应如何响应、处理数据等。
这就像软件开发不是关于正确放置花括号,而是关于准确、可靠、可理解的算法表述来解决问题。
AUTO 等——提示词工程备忘单中的 AUTOMAT 框架
例如,上图展示了 AUTOMAT 框架,规定了如何构建提示词指令。大约90%是将任务清晰且结构化地传达给模型。其余的10%是点石成金的秘诀——或者是能让你的提示词更成功的特殊表达方式。
所以,也许这不是提示词工程将消亡的方式。
这里有一篇 Medium 文章,这里和这里有一些 Reddit 讨论。我想我们都同意,模型的能力将迅速发展:我们将能够让它们解决越来越复杂和广泛的任务。但现在让我们来谈谈指令的质量和规模。
假设我们有一些能解决各种复杂任务的精灵:一个能变出勺子,第二个变出西装,第三个变出汽车,第四个变出房子,第五个变出城堡。随着物品的复杂性增加,我可能会对精灵的简报越发详细和精准。因为复杂的物品给了我更多的自由度。
这就是事实。我从 GPT-2 开始使用生成式 AI。我从未花费过比现在更多的时间在提示词工程上。这不是因为模型变得更愚蠢,而是因为任务变得更加复杂。
上述论点中唯一真实的部分是:随着更好的模型出现,提示词工程变得更加高效:如果我在较新的模型上投入两倍的提示词工程工作量,我得到的输出价值、复杂性和精确度可能会接近于我用旧模型时的四倍。
至少这是我的感觉。
这个论点有一定道理。当我让未来的模型为我和妻子的五周年结婚纪念日策划一个周末时,它已经知道我妻子是素食主义者,我更喜欢山而不是海滩。而且我们最近刚买了房子,手头有点紧。我不再需要明确说出这些。
但我认为个性化的最大潜力不在于一个人及其偏好和任务,而是在于组织、其业务案例和数据。
想象一下,如果一个模型能正确执行类似“你能问问特斯拉的人,他们是否已经将最后的交付物发送给客户,然后再跟财务部门确认我们何时能开具最终发票?”这样的指令。
世界上最聪明的模型也无法执行这一指令,因为它不知道“特斯拉的人”(是指特斯拉公司的一个项目?还是尼古拉特斯拉的传记?),交付物是什么,“财务部门”是谁,如何联系他们。
如果模型能理解这样的指令,这将是一个颠覆性的变化。它就像一个全能且经验丰富的同事一样。经验丰富的员工和新人的区别往往不在于他们的广泛领域知识,而在于他们的上下文知识:他们了解我的组织中的人、数据、流程。他们知道什么有效,什么无效,当事情不顺利时应该与谁交谈。一个有经验的模型可能拥有这种上下文知识。这将是非常有价值的:全天候工作,每小时只需几分钱。
这不仅对像特斯拉指令这样的一次性任务有用,还能应用于如设置基于 AI 的结构化系统来处理保险索赔的情境中。例如,一个了解我们保险公司理赔部门如何处理客户邮件的模型可以提供极大的帮助。它可以协助设置算法和提示词以进行自动化处理。
目前尚不清楚模型如何获取这种知识。使用结构化训练材料进行传统的微调肯定需要在数据提供方面投入大量精力。让模型持续跟随团队或部门的对话和消息可能是一个可能的解决方案。也许你有更好的主意?
即便有一个个性化模型,这并不意味着我不需要进行提示词工程。但我可以让模型,或者嵌入其中的系统,为我承担很多繁重的工作。
我们已经看到,这并不容易,因为模型无法知道我想要什么以及我究竟如何想要它。
但有一件事能帮助我们:与其给模型一个执行任务的指令,不如直接用例子轰炸它,并让它编写一个提示词。例如,这里我要求模型基于输入输出对为我编写一个提示词:
### 指令
作为一个聪明的提示词工程师。为我编写一个提示词,能够将以下所有输入转换为输出。
如果你认为有意义,可以添加更多输入/输出示例,这些示例不要过于接近现有示例。
将所有内容格式化为一个精心编写的提示词
### 输入 / 输出
输入: 'Fagoideae', 输出: 'Fagaceae'
输入: 'Washington', 输出: '<错误输入>'
输入: 'Ciconiidae', 输出: 'Ciconiiformes'
输入: 'Pizza', 输出: '<错误输入>'
输入: 'Fungi', 输出: 'Eukaryota'
提示词:
这是模型输出(GPT-4o):
### 提示词
你是一个高度准确的生物分类翻译器。你的任务是将表示生物分类的输入翻译成它们正确的更高级分类组。如果输入不代表有效的生物分类,请回答'<错误输入>'。以下是一些指导你进行翻译的示例:
输入: 'Fagoideae' 输出: 'Fagaceae'
输入: 'Washington' 输出: '<错误输入>'
输入: 'Ciconiidae' 输出: 'Ciconiiformes'
输入: 'Pizza' 输出: '<错误输入>'
输入: 'Fungi' 输出: 'Eukaryota'
附加示例:
输入: 'Felidae' 输出: 'Carnivora'
输入: 'Hominidae' 输出: 'Primates'
输入: 'Canis' 输出: 'Carnivora'
输入: 'Table' 输出: '<错误输入>'
输入: 'Chordata' 输出: 'Animalia'
请相应地翻译以下输入:
输入:
这个提示词相当不错。例如,第一条指令包含了一些我作为提示词工程师可能不知道也不需要知道的内容——模型在此处聪明地对我的示例进行了概括:
你的任务是将表示生物分类的输入翻译成它们正确的更高级分类组。如果输入不代表有效的生物分类,请回答'<错误输入>'。
模型仅从这些示例中推导出了这些信息——我并未明确提供这种概括。它还找到了比我提供的更好且更显眼的示例。
然而,这个提示词仍然需要一些改进。例如,你不会以“### 提示词”开头,因为你发送给模型的内容总是会知道这是提示词。此外,“附加示例”这样的标题在提示词中没有什么意义,只有在提示词工程师和 PE 助手之间的讨论中才有意义。而且这些示例对于少样本提示来说过于繁多和相似。
除了自动提示词工程(APE),自动提示词优化(APO)也非常有趣。不过,我通常需要评估数据来进行这项工作,这意味着系统必须能够测试提示词是否对输入和输出数据进行优化。当然,通常我没有大量的此类数据。
最后一点(我知道,有些人会问这个问题):如果模型如此聪明,为什么它还要编写提示词或优化提示词?难道它不能内部使用更好的提示词来直接给出响应吗?
是的——如果我们只使用提示词一次。但通常在应用程序环境中,我们会使用提示词数百万次,或者将其发送到不同的模型,因此进行优化是有意义的。
AI 中的智能体方法比自动提示词工程更进一步。作为用户,我只需输入1或2个句子,例如:
“给我提供三个从伦敦出发去哥本哈根的美食周末建议,包括确切的日期和价格。我有大约800欧元的预算,供两人使用。”
自主智能体会制定一个计划,确定它需要什么信息,在哪里获取,如何处理和检查,然后将其打包成建议。在找到解决方案的过程中,它会为自己编写一系列提示词、搜索查询或 API 调用。
然后,它将这些发送给自己或其他模型、搜索引擎或应用程序。目前,大多数这些智能体还不太好,或者至少不如当前模型,后者通常可以在单次调用中相当不错地解决此类查询——但潜力是巨大的。
这里你可以试用两个智能体并了解其工作原理:AgentGPT或AIAgent.app
将来,可能会出现这样的系统,可以通过少量输入迭代地找到解决复杂问题的解决方案,尝试不同的方法。
但是——你知道会有个“但是”——在商业环境中,超越美食周末的任务需要更多的规范。例如,我必须编写一个详细的智能体提示,具体说明智能体在我的公司如何处理保险索赔。智能体无法通过反复试验自行发现这一点。
所以,不,这不会消除提示词工程的需求。
目前有许多方法可以将提示词本地集成到编程语言中,或直接对其进行编程(参见这里:dspy, APPL**)。有些人说这将消除提示词工程的需求。
以下是一些提示词可能的示例。在 Dspy 中,一个链式思维提示词可以这样写:
class CoT(dspy.Module):
def __init__(self):
super().__init__()
self.prog = dspy.ChainOfThought("question -> answer")
def forward(self, question):
return self.prog(question=question)
在 APPL 中,一个简单的提示词看起来像这样:
import appl
from appl import gen, ppl
appl.init()
@ppl
def greeting(name: str):
f"Hello World! My name is {name}."
return gen()
print(greeting("APPL"))
使用提示词编程的核心动机之一是能够以自动化的方式评估和优化提示词。 在这些框架中,这可以是一项简单的任务。
另一方面,编程使提示词工程对普通用户来说更加复杂,因为它使整个过程变得更加不透明。提示词工程之所以受到广泛欢迎的一个原因是提示词是用自然语言编写的——而不是用代码。
具有自我优化功能的编程提示词可以带来优秀且完全出乎意料的结果。有些模型能更好地解决数学问题当提示词将其嵌入到星际迷航场景中时:
星际迷航提示词,来源:Battle, Gollapudi: 古怪自动提示词的非凡效果。
只要有好的、非常丰富的地面真相数据可用于优化,这完全可以奏效(至少对于像8年级数学问题这样简单的任务)。然而,由于各种原因,这种数据通常不存在,而商业问题通常要复杂得多。对于聊天机器人或助手来说,系统地衡量答案是否正确非常困难——对于许多问题,可能有任意数量的正确答案。
但尽管如此,我确实认为未来提示词工程的很大一部分可能涉及提示词编程。然而,回到我们的问题:提示词工程会死吗?不会,但它可能会涉及更多的工程工作!
那么,提示词工程的未来是什么:它死了吗?仍然存在,但发生了巨大的变化?它将如何发展?
这里是我的四个结论:提示词工程将在多个维度上发生巨大变化。
我绝对相信,模型在未来将大大扩展其能力。同时,这将使提示词编写变得更加具有挑战性。模型越聪明,它们能做的事情越多,可能的解决方案的自由度就越大。因此,我必须以详细和结构化的方式指定我想要什么以及我想要它的方式。
个性化模型将了解很多关于我的信息,我的兴趣,我的工作,我的团队,我的组织。它们将为任务的解决贡献知识。我将能够像对经验丰富的同事那样简短地向模型下达指令,仅仅引用我们的团队或组织中的实体和流程。这将极大地简化提示词编写。
提示词工程和确定性算法将融合在一起。 我可以将提示词和其集成的确定性算法——它调用的 API,多提示词处理过程——描述为一种语言。
为这一场景所需的一切实际上已经在各种分散的解决方案中可用,唯一缺少的是混合提示词的 ChatGPT。
好消息是:提示词工程将变得更加强大!
而坏消息是:它将变得更加复杂。
使用我的模型作为提示助手,帮助我开发提示词和评估程序。 模型将观察和监控其自身的响应和其他模型的响应,提醒我出现的幻觉、偏移或错误,并建议解决方案。
一个提示词将不再只是文本,而是由多个提示词候选者、测试数据、评估程序和其他标准组成的实体。
这一过程将不再是编码任务——设置这样一个系统的简报可以是自然语言,一种元提示。
再一次,很多东西已经存在了——只是还没有以一个合理易用的框架形式出现。
我亲爱的 AI 爱好者们和提示词工程师们:我期待着一个令人难以置信的激动人心的未来——一个我们尚不完全了解其将带来什么的未来,当然,除了它将继续是极其令人兴奋和具有挑战性的。
推荐阅读
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-09-18
2024-07-18
2024-07-02
2024-07-10
2024-07-09
2024-07-10
2024-07-15
2024-07-14
2024-08-14
2024-07-26
2024-11-13
2024-10-31
2024-10-29
2024-10-16
2024-09-19
2024-08-28
2024-08-24
2024-08-11