初学者在编写提示词时,不宜立刻采用像LangGPT这样的结构化提示词框架。
结构化的方法固然有其优势,但它更适用于那些已经对提示词有所了解,并准备编写复杂功能提示词的用户。过早使用结构化提示词,尤其是在缺乏基础知识的情况下,可能会导致生成内容质量不佳时,难以准确识别和解决问题,也会影响对提示词机制的深入理解。
大家应该都用填空的方式编写过结构化提示词,结构化提示词虽然看上去结构简单清晰,实际上以这种方式编写提示词是有一定门槛的。
如果结构化提示词出现了不同模块之间的逻辑错误或规则冲突,对于用自然语言沟通的大模型来说,生成的结果反而不可控。关键你还可能不知道哪里出了问题。
接下来可能会有一系列文章讲解我在真实场景下使用结构化提示词时总结的一些技巧。今天先跟大家讲讲,结构化提示词必须了解的第一个知识点:“指令作用域”。
如果你写过复杂的提示词,你肯定也遇到过下面这些问题:
对于一条“明确的”指令,有时生效,有时不生效。
多个规则同时存在时,指令执行顺序是混乱的。
错误的将某个针对特定任务的指令,应用到了全部任务。
多个规则导致模型需要多次交互澄清,浪费Token和次数。
不要简单的把ChatGPT不能生成你预期的内容,就认为是模型能力不够,认为是模型幻觉导致的,更多的情况下是我们的提示词写的不够准确。
提示词的优先级原则
指令的“作用域”和“优先级”
要解决这些问题,需要弄清楚ChatGPT处理提示词的优先级机制,也就是说每写一个可以独立指挥ChatGPT工作的指令,都需要给它设置一个“作用域”和“优先级”。
以下我会将这两个概念合并,并总结出几个关键的规则,方便大家理解整体的作用域和优先级逻辑:
1
结构化格式影响指令优先级
结构化提示词中,用的最多的是Markdown语法。在Markdown中,各结构要素如标题、列表等不仅起到组织信息的作用,同时起着决定指令优先级的重要作用。
譬如,一级和二级标题经常体现出指令的重要级别差异,而列表则显示信息的同等重要程度。无论是列表型指令、段落内指令,亦或是采用其他样式的指令,均有可能改变模型进行优先级判定的方式。
2
语义解析优先于格式
尽管Markdown格式在指令编写中占据重要地位,然而在涉及到含有自然语言优先级声明的指令(如“本条规则最为重要”)时,语义层面的优先级能超越格式层次。也就是说,即便以一级标题所撰写的指令,在二级标题出现含有修改优先级的自然语言表述时,其一级标题对应优先级也会被降至较低的等级。
3
强化提示重点信息
通过加重字体或斜体字等手段,可向模型传递特定信息的重要性。此类视觉上的强化可能会被模型解读为相关信息的高级别优先级。
4
保持内容逻辑通顺
在Markdown格式中,模型对内容逻辑通畅度也很看重。若某段内容虽字面意思看起来很重要,但与文章整体意思脱节,那么该部分可能无法获得较高优先级。
5
优先执行最近指令的规则
若存在多个规则指令,模型往往倾向于生效距离最近的那个。这个原则是说距离最近的指令一般被认为更为紧急或相关性更高。
6
随机处理指令冲突
面临多重指令冲突之时,模型会努力寻求最佳解法。此举可能包括跳过部分指令或综合考量多个指令来取得平衡。而在人的眼里,这个决策过程可能看起来像是随机的。
7
上下文语义识别优先级
模型的决策过程不仅受到当前提示词语的引导,同时与整个交谈上下文密切相连。过去的沟通经历也为理解并处理当前多项指令提供必要的背景信息。
8
不同层级优先级覆盖逻辑
如果指令以层级结构出现,通常我们会认为最顶层的规则是全局规则,适用于所有层级,除非在下面的层级中明确覆盖或指定了其他规则。例如,GPT4严谨遵从这种层级优先级覆盖关系,而GPT3.5更加看重高层级的整体规则。这也是具有防注入功能的GPTs,提示词仍然可能被“破解”的关键所在。
精确控制优先级
精确控制指令优先级的方案
综合考虑上述8项提示词指令的作用域和优先级原则,可以抽象出一些指导我们编写提示词的规范,让我们可以精确控制指令的优先级。具体如下:
清晰的逻辑架构。在提示词中,一定要保证逻辑架构的清晰性,深度理解自己要构建的功能框架,必要时可画流程图明确提示词架构。
结构化层级结构规范指令优先级。使用Markdown标题表达指令的优先级,一级标题表示最高优先级,二级标题表示次一级优先级。对于特别重要的指令,可以使用加粗或斜体以增加视觉突出度。
使用语义定义优先级。使用优先级声明词汇,如在指令中明确使用“最为重要”、“首先考虑”等词汇来指明优先级。确保上下文语义中优先级的一致性,确保每条指令都与整体话题和上下文保持一致,避免逻辑断裂。
全局与局部规则。明确界定哪些指令是全局性的,哪些是针对特定部分或情境的。在局部指令中明确指出是否覆盖全局规则。
考虑模型局限性。了解并适应模型的特性和局限性,在此基础上设计指令。例如,GPT3.5和GPT4在指令优先级识别规则上就有较大的差异。
注意力敏感性。善用最近指令优先原则,在连续的对话或文档中,将最紧迫或最相关的指令,写到对应任务最近的地方。
避免冲突。在编写指令时,尽可能预见潜在的冲突,并提前规划解决方案,尽量避免出现前后冲突的指令。当出现冲突时,灵活调整指令,提供额外信息帮助模型解决冲突。
提示词示例
演示多种指令优先级的结构
以下是一段演示提示词,综合了上述大部分的指令优先级规则:
生成结果如下:
在分析这个例子时,我们可以直观地观察到大部分逻辑结构。有两个关键点需要特别注意:
1.第二个全局规则覆盖了最初设定的全局规则。从该规则生效起,与其最近的任务5和接下来所有的任务,包括任务6和7,都将遵循这一新的全局规则,使用藏文进行处理。
2.虽然原本针对任务5设定的特定规则应该直接影响任务5,但由于任务5已受到新全局规则的影响,根据注意力敏感原则,这条特定规则反而作用于了任务4。这导致任务4将以英文进行处理。(要注意,如果移除第二个全局规则,情况将有所不同:任务4将变为中文,而任务5则为英文。这是因为在没有更高优先级的指令抢占作用域的情况下,特定规则会影响其后最近的指令。)
尽管这些细节有些复杂,但这些细微的不同在理解整体结构时却至关重要。希望大家能通过实际操作来更深入地体会这些逻辑关系。
结构化优势
“结构化”和“模块化”
在使用ChatGPT处理复杂的任务时,非结构化的提示词经常会导致沟通混乱和生成质量低下。这种情况下,结构化提示词的引入不仅是一个改进,而是一种必要。
通过结构化提示词,我们能够以更加精确和清晰的方式传达指令,从而显著减少误解和沟通障碍。
虽然我不建议初学者一开始就使用结构化形式,以填空的方式编写提示词,但随着对大模型理解的深入,编写高效的结构化提示词将成为每位大模型使用者的必备技能。
在人类之间的沟通中,不明确和逻辑不清晰也是误解的源头。在人机交互的场景中,这一问题更加突出。
虽然大型模型在解读自然语言方面的能力十分强大,但面对模糊或非结构化的指令时,模型仍可能无法精确捕捉用户的真正意图。因此,采用结构化的沟通方式,建立一套共同的语言规范和沟通标准,是确保交互精确性的关键。
采用结构化提示词,还有一个模块化设计的特性。作为软件工程领域的一个重要概念,模块化设计已被证明可以有效提升系统的可维护性和可扩展性。将这一概念应用于结构化提示词,我们可以通过将复杂任务分解为更小、更易管理的模块,从而在人机交互中实现更高的沟通效率。
出自:https://mp.weixin.qq.com/s/dEcsQ7LJdyPTKSGAjcwQrw