跳到主要内容

提示设计

· 阅读需 9 分钟
Arvid

提示就像网页设计。让我们称之为提示设计,并为其构建更好的工具。

我通常不喜欢将新世界现象与旧世界类比的普遍习惯。所以请原谅我犯下这个错误:让我来说明为什么提示应该被称为_提示设计_,并与网页设计相提并论

我将提示视为与时间受限的人类进行交流。虽然特定于 LLM 的技术确实有帮助(最显著的是思维链),但我发现提高性能的最佳方法之一就是有极其清晰和高质量的指令,这与清晰和简洁有助于真人更好理解的道理是一样的。

_提示即清晰沟通_使提示听起来像写作。然而,我做的大多数提示都是参数化的:我有一些输入变量,需要动态地调整我的提示以适应这些变量。

因此,_提示即带动态输入的清晰沟通_感觉是最准确的描述。

还有什么领域是关于用动态输入进行清晰沟通的?网页设计。

让我们列出所有的相似之处。提示和网页设计都:

  1. 需要清晰,并以沟通为主要目标;
  2. 需要响应动态内容,不像写作或杂志排版;
  3. 需要适应不同的大小 — 网页设计是屏幕大小,提示是上下文窗口。

从我做提示和网页设计的经验来看,我发现我在这两个领域都有类似的开发者偏好:

  1. _查看实际提示_非常重要,就像_查看渲染后的网站_非常重要一样。如果我必须在脑中模拟 HTML 和 CSS 渲染过程,我就无法设计网站。同样,如果不查看所有输入变量填充后的提示渲染输出,就很难写出好的清晰的提示。
    • 例如,提示 "Hi ${username} ${message}" 看起来可能合理,直到你渲染它并意识到用户名与消息混在一起。
  2. 可组合组件在提示和网页设计中都很有用。
  3. 对两者来说,声明式都比命令式好。阅读和更改由一长串 str += "..." 组成的提示很容易变得难以管理。
  4. 在两者中,我有时都想实现"像素完美"。在提示能力较弱的模型(GPT-3.5 及更差)时,我想确保没有多余的换行或其他类型的不完美格式。

对于 LLM 代理来说,可以进一步延伸这个类比:代理提示可以被视为为代理构建一个交互式网站,他们可以通过调用函数来"点击按钮",提示会响应函数调用而重新渲染,就像网站响应按钮点击而重新渲染一样。

当然,提示设计和网页设计之间也有区别:

  1. 提示目前只处理文本。
  2. 缓存不同:特别是对于代理,你希望通过只更改提示的后面部分来确保重新渲染的成本低廉。这里与网页有一个牵强的类比(你想要优化网站的缓存),但我认为这是根本上相当不同的挑战。

尽管如此,这些相似之处让我确信提示应该被称为_提示设计_,而不是_提示工程_。写提示_感觉就像设计网站_,因此也应该用同样的方式命名。

提示设计的视角启发我创建了 Priompt,一个类似 React 的、基于 JSX 的提示设计库。

Priompt v0.1:提示设计库的首次尝试

Priompt 是一次受现代网页设计原则启发创建提示设计库的尝试。我们在 Anysphere 内部使用它,我们非常喜欢它。

我认为它在所有抽象方面可能并不完全正确,但我至少确信 JSX 是一种比字符串模板更符合人体工程学的写提示方式。即使是简单的能够轻松注释掉提示的部分这一点也让迭代循环更快。

Priompt 还带有一个(非常匆忙制作的)预览网站,你可以在那里用真实数据预览你的提示。在开发应用程序时,你可以在每个请求时记录进入组件的序列化 props。然后,当你看到意外行为时,你可以去 Priompt 预览,查看确切的提示,并更改源代码,让提示用与真实请求相同的 props 更新。我们发现这使得迭代提示变得更容易。

如果你尝试它,请告诉我你的想法!我很想看到更多类似的想法,或者只是被告知我完全错了,提示设计很愚蠢 :)。

注意事项

模型变化很快,提示技术也必须随之变化。因此,我认为_提示设计_这个描述有一些注意事项:

  1. 对于 GPT-4 来说,像素完美的设计并不重要,对于 GPT-4.5 或更好的模型可能会过时。
  2. 如果推断最近长上下文模型的趋势,上下文窗口限制可能会消失。不过,我对此并不确信。
  3. OpenAI 似乎正在朝着向开发者提供更少提示控制的方向发展;可能一年后就不会有所谓的提示了,API 调用只会要求我们提供原始输入和指令。这种控制减少的趋势从聊天格式开始,并在最近宣布的函数调用中继续。
  4. 可能缓存是提示最重要的方面之一,在这种情况下,它开始听起来更像工程而不是设计。
  5. 也许提示设计太低级了,应该留给更高级的框架或编译器(例如 langchain)。我认为这可能是对的,但考虑到 LLM 快速变化的特性,我个人更喜欢尽可能接近原始模型。

最后必要的说明

...因为我很想和你一起工作:在 Anysphere,我们正在构建 Cursor,一个 AI 优先的代码编辑器。如果你对提示设计、用于编码的 LLM 或构建漂亮的产品感到兴奋,请发邮件至 arvid@anysphere.co。我们在旧金山有 5 个人,我所有的同事都很优秀,我们希望有更多优秀的人 — 程序员和设计师 — 加入我们,一起构建编码的未来。