摘自 Vectors of Mind —— 图片见原文。


[图片:原文中的可视化内容]你在读完这篇文章之后的样子

我的工作已经危险地接近“提示工程师(Prompt Engineer)”1 了。对此我完全没意见,因为它结合了我对写作、心理测量(psychometrics)和自然语言处理(NLP)的热爱。下面是一些最“超纲”的提示技巧:

  1. 使用清晰且具体的指令

  2. 链式思维(Chain-of-thought)推理

  3. 在执行任务前先收集所需信息

  4. 将任务拆分为步骤

  5. 技术术语是你的朋友

  6. 实用短语杂烩包

1. 清晰且具体的指令#

律师和计算机科学家在这方面往往很擅长。事实上,提示的一大乐趣在于,相比常规代码,你可以不那么精确,而大语言模型(LLM)往往也能抓住大意。不过,很多请求只要在任务本身以及答案应采用的格式上更明确,就能显著改进。比如,我最近胡乱拼出了这顿饭:

[图片:原文中的可视化内容]

味道很好,谢谢关心。其他一些例子:

  • “用一段话总结人工智能的历史。”

  • “创建一个按年代排序的最古老语系表格。要穷尽。”2

  • “用 White 和 Strunk 的风格改写引号中的文本。给我三个版本。”

  • “为附带的 .csv 文件的第 2–7 列计算 Pearson 相关矩阵。”

  • 后续提示:“写出代码,将结果以热图形式展示,分辨率要足够高以用于海报展示。在美学选择上采用最佳实践。”

具体的指令往往包含具体的例子。White 和 Strunk 写了 Elements of Style(《英文写作手册》)。引用他们的书要比使用诸如“简洁”“专业”“优秀”之类的形容词更好。部分原因在于,LLM 在面对具体形容词时往往会“过度发挥”。因此,如果你想让机器人采用一种刻薄/毒舌的 persona,不妨试着让它表现得像《美眉校探》(Veronica Mars)里的 Veronica Mars,或者《贱女孩》(Mean Girls)里的 Regina George。

2. 链式思维(Chain of thought)推理#

LLM 是在海量文本语料上训练出来,用来预测下一个词的。出人意料的是,这使得它们在近似推理方面表现不错,但在复杂任务上会很快崩溃。这里,“复杂”可以简单到“把第 1 列的数字加起来”。这类任务很难一次性完成,它会吐出一个看起来合理、数值大致在正确范围内但并不正确的答案。只要在提示后面加一句“分步骤思考(think about it in steps)”就会有奇效。很多时候,你甚至不需要具体说明步骤;LLM 能推断出,要对一列求和,中间步骤就是写出 “n1 + n2 + n3 + … + n100 =”。本质上,它是在给自己下提示,以便在等号右侧给出更好的答案。或者打个比方,就是给自己留出“思考时间”。对于任何问题,“分步骤思考(think about it in steps)”这句话是你应对 LLM 幻觉的第一道防线。如果这还不奏效,那就自己把步骤列出来(这一技巧我们稍后会再提)。

3. 在执行任务前先收集所需信息#

如果你让 chatGPT 写一篇博客文章(我绝不会这么做)或者写一个 Python 函数(这个我绝对会),它会直接开写,而不会先询问你真正想要什么样的细节。很多问题可以通过这样一句话来避免,比如:“我想写一个实现 X 功能的函数;在编码前我需要先收集哪些信息?”或者“写一个实现 X 功能的函数,但在写代码之前先询问所有必要的信息。”其中“X”是某种不完整的描述。

4. 将任务拆分为步骤#

每当 chatGPT 没能完成任务,而链式思维也帮不上忙时,就把任务拆成子任务。这往往本身就是完成任务的一半工作,而且碰巧也是(目前)LLM 自主完成起来比较困难的部分。不过要注意的是,你通常也可以把这部分外包给 LLM3。例如,我曾提示 chatGPT 为一个创造力测验设计题目(你可以略读一下):

我正在尝试设计更多类似“远距离联想测验(Remote Associates Test, RAT)”的问题。RAT 要求被试找到一个能把三个看似无关的词联系起来的共同词。以下是一些示例词组:

1. Cottage, Swiss, Cake(答案:Cheese)

2. High, Book, Chair(答案:School)

3. Fruit, Gaze, Traffic(答案:Jam)

4. Cream, Skate, Water(答案:Ice)

5. Ache, Hunter, Cabbage(答案:Head)

6. Manners, Round, Tennis(答案:Table)

7. Falling, Actor, Dust(答案:Star)

8. Light, Birthday, Stick(答案:Candle)

9. Salad, Head, Goose(答案:Egg)

10. Music, Ached, Green(答案:Apple)

有哪些最佳实践?我应该如何分步骤来思考这个问题?

就像理解如何对数字求和一样,chatGPT 非常擅长给出完成任务的“配方”。在它给出回答之后,我只需要说:

“太好了!现在按照这个流程生成 5 个新问题。”

然后再来 5 个,再来 5 个。在此之前,我曾直接要求它给出新题目,结果糟糕透顶。对于一个复杂得多的例子,可以看看一家 AI 安全研究机构是如何使用这一技巧(以及其他一些技巧)来解决一个被设计为对 LLM 来说“不可能”的问题的。

5. 技术术语是你的朋友#

技术术语是促使 LLM 表现得更专业的“吸引子盆地”。例如,描述一种疾病并询问“what is indicated”(“有什么适应证/应采取什么措施”)会比问 “What should I do?”(“我该怎么办?”)走得更远。使用“indicated”会让 LLM 把你的症状映射到所有曾经写过的医学教科书上;而后者则会被映射为在寻求医疗/人生建议,而这正是它被训练要避免给出的。使用技术性或非口语化的术语,可以把你从“普通助理模式”中拉出来——那一模式有最多的安全护栏和 Reddit 水平的建议。

6. 实用提示语杂烩包#

以下是一些我经常使用的短语:

  • “Is that correct?”(“这样对吗?”)

  • 每当我写别人工作的总结,或者描述一个我并不完全熟悉的观点时,我会把自己的文字复制粘贴进去,问它是否正确。它通常很擅长在有争议的地方提出质疑。

  • “Are you sure?”(“你确定吗?”)

  • 同样地,每当我怀疑 LLM 在胡说八道时,我会问它是否确定。如果它改变了说法,那就要对该结论持极大的怀疑态度。

  • “Help me brainstorm.” “Be creative”(“帮我头脑风暴一下。”“发挥创造力。”)

  • 使用 LLM 的最佳方式之一,就是让它帮你探索“想法空间”。有时,它需要一点鼓励,才能摆脱那些最常见的、模式化的回答。

如果你有自己的常用提示语,欢迎在评论区补充!

分享


  1. 我的工作也变得比我期望的更不稳定了,所以如果你在数据科学、AI 或心理测量方面有任何外包项目,欢迎联系我! ↩︎

  2. 诚然,LLM 绝无可能列出世界上全部 142–420 个语系。由于这在事实上是“不可能”的(即:与其默认行为相距太远,并且会超过某个硬性的 token 上限),因此“穷尽(exhaustive)”一词的作用,是对抗“简短回答”的重力,让 LLM 更加详尽。这也是提示工程的一个负面面向:有时会退化成哀求、恳求、贿赂和威胁。 ↩︎

  3. 你可以让 LLM 帮你拆分子任务这一事实,也表明这部分工作未来会越来越自动化。谁知道后续几代模型会做到什么程度呢。 ↩︎