今天我们将探讨提示技术(prompting)。先看一个例子,我写信给爷爷,希望他送我一只宠物。他寄给了我一只____。
正如我们所知,LLM会计算序列中下一个词的概率分布,我通过可视化词汇下方的概率值展示了这一点。我们要探讨的核心是:如何对这个分布施加控制,如何更新或影响这些概率。
LLM 输出控制的两大核心方法
控制 LLM 输出的核心方法有两种:
- 第一种是提示(Prompting)
- 第二种是训练(Training)。
改变词汇概率最简单的方式就是提示。你可能常常在LLM相关讨论中听到提示这个词,但它实则是个多义词,在不同场景下有不同含义。直观来讲,提示指的是改变传递给模型的输入内容或结构。哪怕对输入文本做微小调整,都可能导致后续词汇概率分布发生变化。
提示生效的底层逻辑:预训练的作用
举个例子,如果在文本序列末尾添加“小的(Little)”这个词,再输入给LLM,得到的词汇概率分布会明显不同。添加“小的”之后,小型动物相关词汇的概率会上升,中大型动物相关词汇的概率则会下降。
这一现象的逻辑很清晰。超大型仅解码器模型最初会经过预训练(Pre-Training):在这个阶段,模型会被输入海量且多样的文本数据,通过学习预测“给定词汇序列的下一个词是什么、概率有多高”来掌握语言规律。从某种意义上说,预训练让模型“记住”了诸多知识,列如“有哪些小型动物”,因此会自动提高小型动物词汇的概率,降低中大型动物词汇的概率。
更具体地说,预训练文本中,“小狗狗(little dog)”、“小猫猫(little cat)” 这类双字词(bigram,即文本中连续的两个单词,是语言模型分析词汇关联、预测下一个词的基础单位)的出现频率,远高于“小熊仔(little bear)”或“小乳猪(little pig)”。这正是小型动物词汇概率更高的缘由。虽然这是对预训练过程的简化解释,但能帮我们理解概率的来源。
提示工程:迭代优化输入的艺术
与设计模型输入相关的,还有一个概念叫做提示工程(Prompt Engineering)。它指的是通过迭代优化输入内容,引导模型针对特定任务输出我们期望的概率分布。一般的做法是:不断调整模型输入,逐步逼近目标概率分布。
不过在实际操作中,进行提示工程时未必需要直接观察词汇概率分布,而是通过让模型生成文本,再判断结果是否符合预期。关于提示工程,有两点重大说明:
第一,它可能极具挑战性,且结果常出人意料。列如,在输入文本中添加一个空格,都可能对词汇概率分布产生巨大影响,而这种影响往往无法预判。
列如,把“我写信给爷爷希望他送我一只宠物。他寄给了我一只____改成“我想要一只宠物,于是请爷爷送我一只。他寄给了我一只____”, 也可能以无法预测的方式改变概率分布。因此,即便花大量时间做提示工程,也未必能找到有效的提示词。
但与此同时,无数实际案例证明提示工程是有效的:针对特定任务和模型,设计合适的提示词可能会带来巨大价值。目前,工业界和学术界已经总结出了不少行之有效的提示策略。
主流提示策略详解
(一)上下文学习与 k-shot/零样本提示
最流行的提示策略是上下文学习(in-context learning)。需要说明的是,它并非传统意义上的学习,它不需要改变模型的任何参数,而是通过构建包含任务示例的提示词来引导模型。
相关概念k-shot提示(k-shot prompting),指的是在提示词中包含k个任务示例。列如 来自GPT-3论文(2020 年左右发表)中的案例:提示词包含3个英法翻译示例,最后跟着一个未完成的翻译任务,让模型补全,这就是3-shot提示。
需要注意的是,提示一词的用法具有多样性:有时指传递给模型的全部输入(即我们这里的用法);但在该论文中,作者为区分示例(k-shots)、任务说明(instructions)和待完成部分,将最后一部分单独称为提示(prompt)。
诸多研究表明,提示词中包含任务示例的效果,往往优于不包含示例的情况。如果提示词中没有任何示例,则称为零样本提示(zero-shot prompting),直接给出任务说明,再让模型完成任务。
(二)多样化提示示例:展现提示工程的设计空间
下面展示几个不同类型的提示词示例,以体现提示工程的多样性和设计空间:
2-shot加法提示:先给模型展示两个加法示例,然后让它计算3加2的结果。需要注意的是,模型并不会真正执行计算,而是会生成其词汇表中最可能紧跟“3加2”的词。
MPT-Instruct的SQL生成提示:这是来自相关文献的案例,提示词会先告知模型“请遵循以下指令,无需执行其他操作,保持简洁” 等要求,再给出具体任务(列如为某个统计数据编写SQL语句),并预留“响应(response)”字段供模型填充答案。整个字符串会作为完整输入传给模型,模型再逐词生成输出。这就是提示词的工作原理:整合所有输入文本,让模型逐词生成后续内容。
超长提示:你可能见过类似的形式,列如随着必应聊天(Bing Chat)兴起而受到关注的长提示词(有研究猜测必应聊天的提示词就是这样设计的)。这类示例来自学术文献,提示词包含诸多细致的陈述和指令(列如 “如果不知道答案,请回复指定内容”,且该回复内容已包含在提示词中)。
这三个示例既体现了提示工程的广阔设计空间,也展示了LLM的多功能性,仅通过改变输入,就能让模型实现不同任务目标。
(三)进阶提示策略:复杂任务的拆解与优化
近年来涌现出许多针对复杂任务的进阶策略,核心思路是任务拆解或逻辑引导。
思维链提示(chain-of-thought prompting):这种提示方式在2022年提出后迅速流行,至今仍被广泛使用。其核心思路是:对于复杂任务(如文字应用题),通过提示词让模型将解题步骤分解为多个小部分,就像你自己解题时会做的那样。

从示例中可见,模型会先列出已知条件,再通过推理将信息转化为方程式,写出计算过程,最终求解并给出答案。研究表明,对于多步骤复杂任务,思维链提示的效果优于其他策略。其缘由可能有二:一是预训练数据中包含大量分步解题示例,模型通过提示词复现了预训练学到的内容;二是任务分解将复杂问题拆分为模型可处理的子问题,直接求最终答案可能出错,但拆分成小步骤后,难度显著降低。这一现象很有趣,由于它几乎模仿了人类的解题方式。
由易到难提示(least to most prompting):先让模型解决简单问题,再用简单问题的答案解决更复杂的问题。
列如任务要求:给定一组单词(Machine、Robert、Bus),将每个单词的最后一个字母拼接起来。显然,单词列表越长,难度越高。研究人员让模型按难度递增的顺序解题:先处理第一个单词,提取其最后一个字母;再处理前两个单词,将第二个单词的最后一个字母与第一个子问题的答案拼接;以此类推。模型先解决“machine robert”,得到结果“et”,然后再提取 “bus”的最后一个字母“s”,拼接后得到正确答案“ets”。
原理引导提示:该方式来自深度思维(DeepMind)的研究:通过让模型阐述解决问题所需的核心概念或公式(如物理、化学原理),再回答复杂问题,能显著提升正确率。
下一篇我们将探讨提示工程的另一面,它可能被用于诱导模型产生不良行为。
#让AI触手可及##畅聊人工智能##人工智能##人工智能分享#
#AI妙生图#
