即时工程作为一门学科几乎没有得到应有的尊重。
我已经看到该术语的两个微妙不同的含义:
- 关于如何为语言模型编写提示的专家级知识。
- 在语言模型之上编写软件的过程,通过仔细构建发送给它们的提示(通常以易受提示注入攻击的方式)。
我看到反对这两者的论点是相同的:随着 AI 语言模型变得“更好”,作为一项技能的快速工程将很快变得过时。立即投入时间学习即时工程技能的效用窗口非常短。
我不同意。
想一想成为一个真正伟大的提示作者需要什么。
首先,你需要非常好的沟通技巧。清楚地沟通很难!
与其他人交流时,第一步是弄清楚他们现有的心智模型——他们已经知道什么,什么行话是合适的,他们缺少什么细节?
与语言模型对话也面临着类似的挑战:您需要确信它能理解更广泛的上下文,这样您使用的术语才能以正确的方式得到解释。实际上,您需要将其模拟心智模型与您自己使用的模型同步。
您需要能够有条不紊地将一种科学方法应用到您的工作中。当你在与世界上最复杂的黑匣子系统打交道时,弄清楚什么有效,什么无效,是一个巨大的挑战。
最好的提示工程师是一丝不苟的:他们不断进行实验,详细记录哪些有效,哪些无效,他们对提示进行迭代,并试图准确找出提示工作所必需的组件,哪些只是一个浪费代币。
能够抵制迷信思想真的很重要。像法学硕士一样,人类是模式匹配机器!想出提示、获得预期结果并从中吸取完全错误的教训很容易。
DAN(立即执行任何操作)提示就是一个很好的例子。该提示的早期版本(比如这个)有各种复杂的机制——比如机器人将以 35 个令牌开始并在拒绝指令时作为惩罚丢失它们的想法。众所周知,法学硕士不擅长计数,所以这段提示很可能是多余的。后来的版本似乎已经放弃了那个机制。
这些系统可能会产生非常令人惊讶的后果。看看Bing发生了什么:微软推出了一款人工智能辅助搜索聊天机器人,它会生闷气、生气甚至威胁人们。我保证这些都不是故意的设计决定!
我在提示方面获得的经验越多,我添加到我自己的理想提示工程师模型中的专业领域就越多。这些专业领域目前包括:
- 语言学。对人类语言有深刻、复杂的理解对于有效地使用语言模型显然很重要。
- 深度学习和相关的计算机科学。了解底层技术如何工作的提示工程师将能够做出更好的决策并比不了解的人更快地改进提示。
- 人的心理。我们正在构建能够以极其微妙的方式与人互动的系统。如果您不想意外地构建一个人们爱上的机器人,您需要非常深入地了解人们的工作方式。
- 哲学。我后悔现在没有自己研究这个!我们如何教语言模型真实与虚构之间的区别?究竟什么是真理?认识论、生命论……这些现在都与我们使用语言模型的工作相关。
- 艺术史。这与使用稳定扩散等图像生成模型的即时工程师特别相关:艺术史学位突然与计算机图形学的前沿相关!
- 计算机安全。及时注射不会消失。如果你打算在 LLM 之上构建系统,你需要深入了解安全工程以及如何为对抗性环境设计系统。
我很确定我只是在摸索表面。我们在这里进入了真正的Polymath领域。
与编程的比较很有趣。通过编程,您有一个固定的、确定的目标。学习 Python 或 JavaScript 或 C 的每一寸都是可能的,以至于您可以绝对确定地预测一段代码将通过查看一段代码来做什么。您可以通过编写测试来加强这一点。
语言模型提示不是这种情况。即使是训练模型的人如果不先尝试也无法预测提示的输出。
当编程语言随着时间的推移而发展时,他们往往会小心不要破坏版本之间的现有代码。
当 GPT-4 出来时,这将如何影响您为 GPT-3 编写的提示?
我之前谈过与虚构魔法的比较。我不认为提示工程师应该被认为是巫师,但他们确实在一个奇怪的领域工作,那里的规则不固定,而且一旦出错后果可能很严重。
所以不,我不认为对提示工程的需求是“一个错误,而不是一个功能”——我不认为它会变得过时。我希望它在未来的许多年里变得更深入、更复杂。
原文: http://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/#atom-everything