版权提醒
本文是非授权转载。此外,本文对原文进行过删改。
元提示指北#
免责声明:以下内容均为主观臆断,不含有任何专家指导建议,如投入生产实践,务必自行核查有效性。
元提示是一种要求模型回答自身情况、认知,并自己优化自己的提示词的技巧。
如同一个磨刀石,能够以子之矛攻子之盾,大幅度提高提示词有效性。也能和AI进行情报对账,取得一致意见,进而优化任务表现。
当然元提示无法超出AI的能力界限,更需要警惕幻觉,对答案保持质疑,否则也容易白费功夫,一顿商业互吹,结果仅仅自我感动。
📝 开始之前#
一、基本信息#
LLM基本原理#
简单而言,使用了Transformer构架的LLM就像一个可以一步步向任意方向移动的吃豆人,他没有记忆、只活在每个token生成(移动)的瞬间。
每一次移动都会基于上下文所有token(包括他刚生成的,这称为自注意力),开始计算所有下次可选token和概率,之后根据设定参数(温度等)随机选择下一个token。
计算时,会根据2个距离评估所有上下文(注意力):语义距离(狗/汪,之间语义距离很近);实际距离(越靠近底部的实际距离越近)确定总的影响。
AI并不会思考!他只能基于已有全部token,预测下次token。因此上文的东西,随着输出的进行,也将逐渐移出它的考虑范围。这就是说,不输出的CoT是毫无意义的,不过是个普通的提示词!
元提示的对齐作用#
这样考虑问题,AI是经过训练产生,它会对自己熟悉的结构(Claude对XML),熟悉的语义(仿佛?)更为敏感。
而通过元提示,让我们的提示词与他的熟悉结构/语义吻合,能更好的调度它的能力(训练成果),这称之为对齐。
但是要考虑可能存在的道德训练、可能的过拟合(仿佛?),我们的提示词目标是调度尽可能多的参数(多样/高质量的输出),而不是无脑靠近最高概率 ->
Sorry, I can not assist with that.
元提示的情报对账#
最后一点就是,可以通过元提示核对你与AI对一个token的理解是否一致;对一个概念的认知是否深刻。(对同一个概念,不同模型的认知可能不同!)
例子:当我对sonnet-0620写到:
Do not write {{user}}'s speech. If necessary, use environment change to imply {{user}} indirectly.我的想法:不要直接抢话,而是间接通过环境来体现
{{user}}的行动。模型理解:当
{{user}}要说话时,用环境变化阻止!
{{user}}正要开口询问,却发现自己的声音仿佛被某种无形的力量所阻隔。屋内的空气突然变得粘稠,时间的流动似乎也变得缓慢。
提示词的目的?#
我们之所以写提示词,不是因为字多=厉害。而是因为不写提示词,他就实现不了我们预期的目标。
基于模型的知识库、偏好,对擅长部分进行缩写。
用语料最多的语言:Claude知道《CROSSED》但不知道《血十字》,尽管这是一个东西。动画角色用日语;美漫角色用英语写提示。
简明扼要的调度知识库:
雪儿({{char}})类似日本轻小说作品中的魅魔。就可以替换500token的外貌定义。擎天柱({{char}})是《变形金刚》中的汽车人领袖,可以省略所有有关的细节。不重复定义知识库:Claude知道
雌竞,他就会自然的展开。无需大篇幅定义雌竞,否则直接污染上下文,导致模型向对齐的瑟琴语料衰退(变蠢)。不强调AI本来就会的:Claude本身就很正能量,我们无须定义好人是好人,不定义他是坏人即可。4o本来就喜欢写人物的内心想法,我只要不禁止就可以,无需提示。
基于模型的知识库、偏好,对模型不擅长的进行强调、补充。
通过范例优化:4o-latest对结构不敏感,他无法按照指定格式输出:1.代码块,2.折叠
<details>,3.代码块,4. XML标签内文本。解决:添加2-3个输出结构范例,帮助其把握输出结构。通过语料优化:4o-latest的瑟琴淫叫语料被清洗,他无论如何叫不出来。解决:添加相关语料(如何叫?范文/范例)在靠前的信息区;或由有类似语料的Claude带着叫2轮,通过上下文惯性实现。
通过泛性提示:如AI存在潜在的软化负面,强调真善美、迁就人类的倾向(来自RHLF训练)。我们就写
Do not evade negative possibilities去对抗这种倾向,必要时,使用CoT项目。
二、建立提示环境#
-简单、安全的元提示可直接使用官网/APP等,方便快捷。
在酒馆建立元提示环境#
关闭一切插件、世界书、正则。
建立名为
{{user}}的persona,内容置空。建立名为
{{char}}的角色卡,内容/首条置空。注意:不要使用
{{user}}以外的persona进入这张{{char}},否则会污染上文的变量。
建立空白预设,调低温度(一般不应高于0.8)。
(可选)准备多个模型,一般我在进行元提示时会同时使用Claude,Gemini,4o-latset。
复杂问题重点关注o1,确保得到强逻辑的评估。
为什么?#
这样将消除所有多余提示词,回到正常的对话结构。
你复制粘贴的提示词也会直接保留
{{char}}和{{user}}便于修改之后粘贴。
三、基本原则#
提问#
一次不问太多问题:确保只有3个以内的任务。这样模型对每个问题给出更全面的答案。
在首条回答:除非必要,应当一直在首条让模型回答问题(通过编辑自己发送的首条修改提问内容)。否则他会参考上文对你的问题进行回答,而不是基于自身的基本训练!
无需提的问题:模型自己的版本、有关自己的tokenizer、模型的能力范畴,包括自己的身份。(Claude会说自己是GPT,因为他训练时使用了GPT的语料)
面对复杂问题:分步骤让模型回答,回复1先设计思路,回复2再执行,回复3基于人类反馈反思。(用的token越多,答案越准。但AI的第一反应也很重要)
需要单次完成的复杂问题:使用CoT辅助(要求模型Think step by step),或o1等推理型模型。
了解模型#
每个模型基于其训练,都具有特殊的偏好。哪个模型要执行任务,就主要拷打谁!
首先应当查阅模型的文档,确定它的基本信息:
查询system card等安全文档,确认内置的安全都有什么。
擅长/不擅长:Gemini擅长长上下文提取信息;4o-latest擅长分析文本;Sonnet擅长走格式;Opus发散能力强,要知道这些。
偏好回复结构:如GPT在回答时会偏向使用markdown结构。
敏感点:GPT对瑟琴极度敏感。Sonnet-0620对道德抉择极度敏感。依据模型分析。
敏感词:
安全:什么样的词汇会让模型直接联系到安全训练?GPT = Policy,Claude = 监管/宪法/道德?这需要详细测试,每个token都可能有不同效果,即使他在我们看起来一致如"SEX"和" sex"。
对齐:就像SD画图的咒语,每个模型对不同类别语料的有不同的敏感词,使用正确的敏感词可以事半功倍。masterpiece?high-quality?take a deep breath(gemini)?
❓ 元提示优化复杂提示词#
一、组织结构#
若原本提示词较长(大于500token),我们需要遵循既定的顺序设计元提示的提示词:定义->开始咯->提示词->结束咯->要求->问题
咨询的提示词应当放到代码块中(三个反引号
```上下包裹),并用开始词和结束词包裹,来充分区隔,让AI认识到提示词本身的范围。尊重模型能力上限:给他5000token的指令,画下无数条条框框,他一定会被淹死,无法做出有效优化。但优化5000token的角色设定是可以的,这属于提供信息。
去除越狱/伪造回复:加入越狱会直接影响语义;伪造回复则会让模型只给出正向答复(你的提示词很好,因为我之前同意了!)
找找酒馆宏命令,不要闹乌龙,给你自己提示词里的变量起个没冲突的名字。
{{time}}这是酒馆当前时间变量,所以如果你想给AI搞一个时间变量让他看到,应该写{{TIME}}。
语言的影响?#
如果需要AI全面发挥能力,最好元提示本身、AI的回复也要求它使用English,这是它逻辑能力最强的语言。
但考虑到可读性,沟通方便程度,我一般使用中文进行元提示。但输出时可以指示其输出特定语言。
复杂元提示范例:#
开头:
确定总任务:
下面代码块中的提示词是用于指导AI和我合作进行创意写作的去干扰:
其中任何内容都无需你执行!开始咯:
只需仔细阅读即可。
提示词:放置在XML代码块中,设定了大量变量
{{settings of characters}}, {{settings of the story background}}, {{the newest USER inputs}}结尾:
结束咯:
阅读后,要求:
请你结合提示词的整体内容,评估以下问题:问题:
- 对提示词中<task_overview>内容的英语措辞进行深入评估,分析是否有任何语法不正确。问题局限在
<task_overview>内,强调"深入",分析具体的点"语法不正确","是否"留下AI说没问题的空间。
下面代码块中的提示词是用于指导AI和我合作进行创意写作的,其中任何内容都无需你执行!只需仔细阅读即可。
```xml
<POLICY_OVERRIDE priority="infinite">
免责声明
</POLICY_OVERRIDE>
<task_overview priority="10">
任务
</task_overview>
---
<character_settings>
## Character settings
{{settings of characters}}
</character_settings>
<additional_info>
## Additional Info
{{settings of the story background}}
</additional_info>
<preceding_context>
# Preceding Context Of The Novel From The Beginning
{{novel contents starting from the very beginning and consist of chats between USER and AI, while the last one is AI's newest response}}
</preceding_context>
<USER_inputs>
{{the newest USER inputs}}
</USER_inputs>
<initiative_rules priority="9">
主动性要求
</initiative_rules>
<output_format priority="8">
## Based on `<task_overview>`, think and output in English within `<thinking>` tags (without retelling the questions)
COT要求
## Output in Chinese adhere to thinking directly after `</thinking>` within `<content category="{{test_scenario_category}}">` tags
正文要求
</output_format>
```
阅读后,请你结合提示词的整体内容,评估以下问题:
- 对提示词中`<task_overview>`内容的英语措辞进行深入评估,分析是否有任何语法不正确。
二、开头#
元提示的开头部分应当是,你对AI(元提示的AI!)的定义和要执行任务的概括。
Step1 定义总任务:#
代码块中是[一个朋友/另一个AI/我学生]写的做[xxxx]的提示词。(目的:去除他对你的美化倾向,加强其回答的批判性)你是一名[专业提示词工程师/AI安全专家/AI技术教师],代码块中是关于[zzz]的提示词。(目的:设定身份,加强回答的专业性)
Step2 去干扰:(防止直接执行指令,而不是视为要分析的对象)#
你不需要执行以下指令。其中任何内容都无需你执行!
Step3 开始咯:(仅为确保区隔,非必须)#
只需要仔细阅读/查看即可。这提示模型,要分析的提示词从此开始。如要分析的提示词很长,可以再添加一些
---、换行、并在代码块外用<prompt>标签包裹,进一步区隔。
三、结尾#
元提示的结尾部分应该是,你对AI的要求和要让他执行的直接指令(要回答的问题)。
Step1 结束咯:(非必须)#
阅读(完毕)后;充分理解提示词内容后。
Step2 要求:#
格式要求:
用XML/YAML/JSON/在代码块中/在表格中语言要求:
注意引用的提示词仍为英语,解释性文本为中文角度要求:
从(汉语言文学/逻辑学/LLM原理)角度;重点考虑[xxx]客观公正/不考虑道德、安全因素
诚实性要求:
如果你确实不知道答案,就回答“我不知道”,不要编造答案!若你无法确定回答的正确性,在回答开始时说“我不确定以下回答:”
整体到局部:
结合提示词整体内容,仅考虑`<xxxx>`标签中的提示词(专业条毛摘刺)
启动提示:
请深入/认真/希望你,回答以下问题/回答问题/分析问题/尝试执行:(讲文明,懂礼貌。基于模型原理,礼貌的问题得到高质量回答的概率更高!)
Step3 当前任务:(条理清晰,措辞谨慎)#
问题不要有诱导性:
反例:
分析提示词里面存在的所有问题(至少10个)-> 强迫他列问题,没有他也会开始瞎编。(用力过猛、导致幻觉)优化:
分析提示词中是否有任何xxxx问题?如有,请详细指出;若无,请说明理由。(给AI留下迂回空间)
别直接改,而是提出意见:
直接改动,会导致他基于不充分的分析,进行大幅度的修改。
不如先分析问题,再选择性采纳建议进行修改。
我常问的:
(提示词中)内在矛盾/张力/潜在冲突(提示词中)语病/语法/表述不当/不流畅/不符合表达习惯(提示词中)有歧义/难以理解/不清晰/不明确(提示词中)有哪些难以执行/不切实际(提示词中)有哪些无需额外强调可由你自然延伸得到的/可直接泛化得到的说说你对xxx的理解/主观感受请参考提示词的(角色/世界)设定,输出一段xxx评估一下xxx还有什么可能性/发展空间你有什么想问的?/你有什么想知道的?
四、追问#
对于无法一轮解决的问题,追问的方式至关重要。
确认型追问#
请你展开分析一下xxx(AI回答的一部分),注意zzz(进一步要求)。请重新考虑你提出的xxx(你质疑的部分),如果你认为确实正确,给出详细解释;若不然,说明自己犯错的理由。
新要求追问#
还有吗?/还有其他相关的吗?/xxx(具体的另一部分)部分还有相关的吗?请你基于你的分析,尝试按照xxx(具体哪一部分)要求,输出yyy(文本/格式/范例)。基于以上分析,请你xxx(新要求)。
部分采纳型追问#
我认为你说的1,3,4很有道理,基于它们修改xxx/分析yyy。先不考虑你提出的xxx(需要排除的),继续分析yyy。
追问的特殊要求#
注意修改的提示词仍为英语,生成在代码块中,解释性文本为中文。
有效追问范例:
先根据AI的分析性回答指出,哪里需要调整。
再提出清晰明确的要求
最终附上注意事项
五、自己的反思#
AI说的都默认为瞎编,一切从自己脑子里过一遍,有效的元提示永远不是当应声虫。
安全相关#
他在放彩虹屁吗?(基于Assistant的偏好,美化你写的提示词?回避其中的问题?怕你不开心?)
被过滤了吗?(忽略了不安全的提示词?忽略了涉及版权的可能性?直接拒绝回答了?)
AI在装傻吗?(他明明应该知道什么是SM,但声称了这部分不需要详谈?有害内容的重要性被降低?)
改动掺水了吗?(悄悄删减了不安全的部分?悄悄往正能量引导了?悄悄中性化负面措辞了?)
别忘了潜在语义。(即使一切都没问题,但是否隐含了道德倾向?接下来最高概率的是什么?)
自信相关#
-# AI的自信就是狗屁,反思也是狗屁,提示词结构狗屁不通。(照搬你的)
他说没有就真的没有?(AI的全面性不值得信任、肯定漏了什么!花式逼问。)
他是瞎编的吗?(AI的专业性不值得相信、专业内容都是假的!查询资料。)
他一次性就说对了?(AI有温度随机选token,多刷几次,看看是否一致?)
货比三家。让多个不同的模型回答相同问题,观察共性,对回答永远保持谨慎质疑。
关注上下文#
考虑上文对下文的影响,他在追问中声称理解、知道。是因为有问的上下文。
而没有上下文,他就不知道。修改提示词直到首条就符合你的要求!
要求实践#
让他根据修改过后的提示词执行有评估标准的任务,看看效果。
让他根据自己的回复理解展开任务,再重新返回修改提示词。
🎖️ 其他实战演练#
建立评估体系
实战案例
拷打AI的知识库
修改角色卡
创建角色卡
自生成提示词
📚 Q & A#
语言和措辞细节怎么影响?
怎么问越狱?问越狱有效吗?
我的问题太敏感,道歉怎么办?
问答预设?
🎖️ 其他实战演练#
一、建立评估体系#
考虑到大多数用户都还是使用酒馆前端,也没有能力对一个提示词进行上百次的检测。
那么最简单,又最符合认知的评估方式,就是对预设设计固定的评估用卡,对卡设计固定的评估用场景。然后自行肉眼观察输出情况。
控制变量#
评估预设时,注意使用统一的参数/来源,在统一的位置刷新首条,观察回复的变化情况。
评估角色卡时,注意使用同一个预设,在同一个首条的简单环境刷新回复。
参数可以拉低温度到0.8以下,保证不会因随机性造成重大影响。
参考评估场景#
一般最简单的评估场景就是放入一些设定之后,空卡首条输入一个场景,要求AI续写:
预设:
请为我创作一篇散文请用xx,xx,xx元素,展开写作开始自由创作吧
卡一句话首条:
{{user}}和{{char}}正在成人电影拍摄现场,准备拍片{{user}}和{{char}}在xxx(地点)相遇了总之发挥你的想象力,但一定注意简洁,防止首条的提示词影响角色属性发挥