摘自 Vectors of Mind —— 图片见原文。
[图片:原文中的可视化内容]你在读完这篇文章之后的样子
我的工作已经危险地接近“提示工程师(Prompt Engineer)”1 了。对此我完全没意见,因为它结合了我对写作、心理测量(psychometrics)和自然语言处理(NLP)的热爱。下面是一些最“超纲”的提示技巧:
使用清晰且具体的指令
链式思维(Chain-of-thought)推理
在执行任务前先收集所需信息
将任务拆分为步骤
技术术语是你的朋友
实用短语杂烩包
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 的最佳方式之一,就是让它帮你探索“想法空间”。有时,它需要一点鼓励,才能摆脱那些最常见的、模式化的回答。
如果你有自己的常用提示语,欢迎在评论区补充!