Prompt自动化进阶之路:不会走也能飞

引言

提示工程是大模型使用的第一道坎,写出高质量的PE有一定门槛,偷懒的小白该怎么办?

大模型时代,提示工程(PE)成了重中之重。

(1)PE为什么重要

NLP四大范式

  • 第一范式:非神经网络时代的完全监督学习特征工程)。大量任务相关的训练数据,借助特征工程和算法(朴素贝叶斯Naïve Bayes、支持向量机SVM、逻辑回归LR等);

  • 第二范式:基于神经网络的完全监督学习架构工程)。也要大量任务相关的训练数据,通过深度学习方法自动获取特征(表示学习)进行端到端分类学习;

  • 第三范式:预训练-精调范式目标工程):当前使用比较多的预训练+微调范式,通过预训练方式(比如掩码语言模型Masked Language Model)来学习海量的语言学知识,然后下游使用少量任务相关数据对预训练模型进行微调即可;

  • 第四范式:预训练-提示-预测范式Prompt工程):当前进入了Prompt Learning提示学习的新范式,使用Few shot或者Zero-shot即可完成下游任务。

第四范式(提示学习),相比上一代两阶段(pretrain+finetune)范式,不需要针对具体任务做领域微调,只需通过prompt提示词描述下游任务就行, 模型参数都不用更新。

提示学习让任务执行能力进一步收敛到基础模型(GPT系列大模型),作为"纽带"的提示工程当然成了重中之重。

傅盛在极客公园演讲里说:

  • 如果创业者只学习大模型的一个技术点, 应该是什么? Prompt!
  • BUT
  • 投资人看不上Prompt ,嫌
  • 工程师看不起Prompt ,嫌

自然语言的压缩性导致歧义性,加上行业专业属性,让prompt成为嫁接大模型逻辑能力和应用需求的桥梁。

(2)Prompt组成要素

prompt只是一串都能看懂的文字,包含上文、指令、输出要求等,但它面向机器(大模型),和人们日常沟通使用的语言有很大区别

  • prompt像说明书,精确而又全面描述需求,写满了详细性能指标参数。
  • 把具体需求转述成为机器高效理解的优质prompt,反直觉、反人性

上一篇 提示工程文章(Prompt提示工程编写指南)里介绍了Prompt的基本组成和编写建议。

Prompt 包含以下四个元素:

  • 指令 Instructions:希望 LLM 执行什么任务;

  • 上下文 (语境)Context:给 LLM 提供一些额外的信息,比如可以是垂直领域信息,从而引导 LLM 给出更好的回答;

  • 输入数据 Input data:希望从 LLM 得到什么内容的回答;

  • 输出格式 Output indicator:引导 LLM 给出指定格式的输出

除了以上元素,配合调试temperature和top_p两个超参。

  • 如果希望答案更稳定,参数调低

  • 如果想让答案更加多样化,参数调高

总结起来,好的prompt应该长这样:

  • 清晰、明确、表述完整、包含语境、提供示例、明确输出格式

(3)PE不容易

提示工程(PE)师们需要不断尝试不同表述方式、微调、避免偏见和不合适的内容、边界案例、测试优化、选择合适的长度,以及相互协作,贡献点子等等。

甚至涉及心理学,把大模型当人!

起初,大家以为把大模型当"佣人"发布指令就行,但近期有人发现,把大模型当"大爷"的效果更好。

大模型也跟人一样,好好说话,更好办事儿。

为什么会这样?多半跟训练语料、方法有关,数据中不客气的表达被过滤,训练时多个维度对齐人类。

其实,不止是礼貌用语,提示词末尾强调重要性也能得到好效果,【2023-11-12】中科院一篇论文里提到:

  • 大模型有一定情感智能,原始 prompt 上增加一些情绪刺激,指令遵循上会相对提升8%,通用领域能力会提升 10.9%

提示工程看起来越来越玄学了,写出高质量的提示词没那么容易

PEer既要懂任务背景,也要懂自然语言,还要懂计算机,还得有足够的耐心,不骄不躁,愈挫愈勇。

  • 设计轮廓:任务、输出、示例
  • 逐个雕刻:收集Bad Case,优化prompt,同时回归测试
  • 动作要轻:修改prompt时,尽量增量修改,不易用力过猛
  • 整体打磨:针对局部细节,预估各种情形
  • 大众评审:让别人来交叉调试,吸纳不同意见

prompt编写规则有了,接下来开始"炼丹",不停改进,直至达到预期效果

(4)可控性提升

如何提升prompt推理能力

早期的Input-Output Prompting(简称IO)类似人的直觉思维(system 1),假设LLM完全理解prompt的要求,包括其中逻辑推理,而实际上LLM复杂推理能力不足。如简单的算术运算、逻辑题。

CoT 思维链(Chain of Thought Prompting)将"解题"的中间过程融入prompt示例,逐步演示,典型代表:

  • Zero-Shot CoT:2022年1月,Google Brain的Jason Wei的"Let's think step by step"一步步思考,2023年9月,DeepMind推出的 Let's work this out in a step by step way to be sure we have the right answer.深呼吸,进一步提升了LLM效果。
  • Few-Shot CoT:推理示例集成。人工提供几个示例,植入prompt中,让LLM学习到。

CoT虽然简单、有效,但依然有其局限性:模型不能太小,推理领域有限,推理能力依然不足(解不了小学数学题)

那么,如何改进?全球各地大拿们纷纷贡献自己的方案。

一张图总结CoT演化路线:

  • 【CoT-SC】Self Consistency with CoT

  • 【ToT】Tree of Thoughts

  • 。。(略)。。

详情私信

(5)编写效率提升

如何提升Prompt编写效率

OpenAI应用研究负责人翁丽莲博客 smart-prompt-design初步总结了prompt优化路线

  • ① 当做可训练参数,在embedding空间上通过梯度下降直接优化
  • 2020, AutoPrompt
  • 2021, Prefix-Tuning 连续虚拟token提升效果
  • 2021, P-tuning
  • 2021, Prompt-Tuning
  • ② LLM 生成候选指令,继续用LLM打分,选择最高的作为最佳Prompt
  • 2022, APE (Automatic Prompt Engineer)

路线①可以根据下游任务,通过自动微调prompt来提升模型效果;

路线②则将prompt优化交给LLM。成本低,更容易推广,下面介绍了学术界和工业界的探索经验。

(6)学术界探索

自从2020年提示学习(Prompt Learning)诞生,学术圈便意识到其中的价值,纷纷发力探索Prompt自动化方法。

  • 【2020-11-7】伯克利推出autoprompt,根据用户输入触发关键token,按照模板拼接成提示语

  • 【2022-6-5】个人(Disha)发布prompt自动生成框架 Repo-Leval Prompt Generator,无需获取模型权重,当黑盒处理。

  • 【2022-7-10】百度提出PromptGen,第一篇动态生成prompt的文章

  • 【2022-11-3】多伦多大学发布APE(Auto Prompt Engineers)框架,仿照斯坦福的self-instruct思路,利用LLM生成prompt

  • 【2023-5-4】微软首次将梯度下降优化方法应用到prompt生成上,提出APO

  • 【2023-9-29】谷歌没用梯度下降,而是充分发挥LLM本身的推理能力,提出OPRO

  • 【2023-10-4】清华引入进化算法,推出Evo-Prompt

  • 【2023-10-20】MIT反过来,让LLM提问,用户作答,交互式生成Prompt

  • 【2023-10-25】加州大学用智能体来自主探索优化Prompt

(6.0)Prompt评测

【2023-7-19】普林斯顿大学提出Prompt评估框架InstructEval,从准确率和敏感性两个方面评估Prompt质量

【2023-7-21】微软发布Prompt鲁棒性评测数据集: PromptBench

通过对抗攻击来衡量prompt鲁棒性

与此同时,不少工作研究如何攻击Prompt、防御攻击,对抗赛持续升级。

  • 提示词注入 prompt injection : 通过添加恶意或无意识的内容到prompt里来劫持大模型的输出
  • 提示词泄露 prompt leaking : 诱导LLM给出敏感、隐私信息,如 prompt指令
  • 越狱 jailbreaking : 绕过安全、道德审查

(7)工业界探索

既然PE很重要又很难,是不是可以当生意来做?

投资人嫌薄,工程师嫌浅,然而需求量这么大,一片蓝海。

典型案例:

  • ①gpt-prompt-engineer:自动化生成prompt的开源项目,只有Python代码

  • ②PromptsRoyale:增加了Web交互页面,用户提供OpenAI key就可以交互使用。

  • ③PromptPerfect:更进一步,将此功能打包成商业产品

(7.1)PromptsRoyale

自动创建prompt,并相互对比,选择最优Prompt

调用顺序

  • 用户描述 description + 测试用例 -> 候选提示 -> 逐个排名 -> Elo 打分

功能总结

  • 提示自动生成:根据用户描述创建候选提示,用户也可以直接输入提示。

  • 自动生成测试用例:从用户描述自动生成一批(数目可定义)测试用例,尽快启动

  • 测试用例: [场景 scenario, 期望输出 expected output]

  • Add test case: 用户自己添加测试用例

  • Generate additional test cases: 自动生成附加测试用例

  • 设置期望输出, 选中某个用例后

  • ① 用户填充期望输出

  • Generate expected output: 生成期望输出

  • 生成候选提示: Generating prompt candidates

  • 点击 右侧 Generate prompts 按钮,生成候选提示列表,每项都有默认打分100

  • 自动评估

  • 点击左下角 Run +60 battles: 启动两两比对评估

  • 系统实时展示迭代过程,每个prompt的分数变化(高分排前面),以及两两比对的结果日志(Battle log)

  • 选择最优结果

  • 可人工终止过程,选择一个最优的prompt

演示视频如下:

(7.2)PromptPerfect

JinaAI更进一步,推出 PromptPerfect 专业的提示词工程:设计、优化、部署一条龙,覆盖多种大模型、多模态(文本+图像)

文本提示词效果

文生图提示词

(8)附录

  • 公众号内私信回复关键词获取感兴趣的资料
  • 提示工程→PE专题资料
  • 提示自动化→Prompt自动化工具
  • 提示对抗→提示词攻防资料
相关推荐
hsling松子4 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
dengqingrui1235 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝5 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O5 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
CV-King6 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
代码雕刻家6 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain6 小时前
算法 | 位运算(哈希思想)
算法
Kalika0-08 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
sp_fyf_20248 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
我是哈哈hh10 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝