Author image

作者Arvid

提示设计

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

我通常不喜欢将旧世界的事物类比于新世界现象的普遍习惯。所以请耐心听我犯下这个错误:**让我说明为什么提示应该被称为*提示设计*,并将其比作网页设计。**

我认为提示就像与时间受限的人类沟通。虽然特定于LLM的技术肯定是有帮助的(最值得注意的是思维链),但我发现改进性能的最佳方法之一就是给出极其清晰和高质量的指令,就像清晰简洁的表达也有助于真正的人类更好地理解一样。

*提示即清晰沟通* 使提示听起来像写作。然而,我所做的许多提示都是参数化的:我有一些输入变量,需要根据这些变量动态调整我的提示。

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

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

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

  1. 需要清晰度,并将沟通作为主要目标;
  2. 需要响应动态内容,这与写作或杂志版式不同;以及
  3. 需要将其内容调整到不同的尺寸——网页设计的屏幕尺寸,提示的上下文窗口。

根据我在提示和网页设计方面的经验,我还发现我在这两个领域有类似的开发人员偏好

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

对于LLM代理,可以将类比推得更远:代理提示可以被视为为代理构建一个交互式网站,代理可以通过调用函数来“点击按钮”,并且提示会根据函数调用重新渲染,就像网站会根据按钮点击重新渲染一样。

当然,提示设计和网页设计之间也存在差异

  1. 提示目前仅处理文本!(至少现在是这样)。
  2. 缓存是不同的:特别是对于代理,您需要确保您的重新渲染成本很低,只需更改提示的后一部分即可。这里有一个牵强的与网络的并行关系(您希望缓存优化您的网站),但我认为它在根本上是一个完全不同的挑战。

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

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

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

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

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

What prompting as JSX looks like.

Priompt还带有一个(非常匆忙地拼凑起来的)预览网站,您可以在其中预览真实数据上的提示。在开发您的应用程序时,您可以记录每次请求进入组件的序列化`props`。然后,当您看到意外行为时,您可以转到Priompt预览,查看确切的提示,更改源代码并使提示使用与真实请求相同的`props`更新。我们发现这使得更容易迭代提示。

Previewing prompts.

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

注意事项

模型变化很快,提示技术也必须随之变化。因此,我认为*提示设计*的特征有一些注意事项

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

最后的说明

*...因为我希望能与您合作:* 在Anysphere,我们正在构建Cursor,一个以AI为首的代码编辑器。如果您对提示设计、用于编码的LLM或构建精美产品感兴趣,请发送电子邮件至[email protected]。我们在旧金山只有5个人,我的所有同事都非常优秀,我们希望再邀请一些优秀的人才——程序员和设计师——加入我们,共同构建编码的未来。

Anysphere制作
SOC 2 认证