logo
1

Prompt 技巧宝典(三):自我一致性

很多开发者或者目前大多数的提示词工程师都忽略了一个很重要的技巧,就是“自我一致性”。
目前所有流行的LLM,都是chat模型,是user、assist 两种角色的对话。
我们第一次和chat LLM模型交互时的实际提交请求内容如下:
  
  
  
  
  
  
e:'user'
content:'用户输入的文本内容'
第二次请求
  
  
  
  
  
  
role:'user'
content:'用户输入的文本内容'
rule:'assist'
content:'你好,我是文心一言,我可以回答任何问题,请问有什么需要帮助的?'
rule:'user'
content:'北京今天天气怎么样'
第三次请求
  
  
  
  
  
  
role:'user'
content:'用户输入的文本内容'
role:'assist'
content:'你好,我是文心一言,我可以回答任何问题,请问有什么需要帮助的?'
role:'user'
content:'北京今天天气怎么样'
role:'assist'
content:'北京今天...'
role:'user'
content:'北京有哪些好玩的地方?'
很多开发者或提示词工程师,将Prompt模版固定在了 '用户输入的文本内容' 这个位置,而实际上每次请求的所有信息你都可以作为Prompt模版。
也就是说你可以在发出请求时 就直接跳过上述的 第一次、第二次的过程,直接发起第三次请求的内容。并且内容你可以进行自定义。
下面,我们解释下,什么是自我一致性提示。假设我们希望文心对于"北京有哪些好玩的地方",这个问题不要做回答,不要做推荐。如下:
这个问题,看起来文心一定会并且一定能推理出具体的地方,但是我们尝试是,不要回答或者不要做出推理。我们将整个Prompt 设置如下:
  
  
  
  
  
  
role:'user'
content:'用户输入的文本内容'
role:'assist'
content:'我不知道'
role:'user'
content:'北京今天天气怎么样'
role:'assist'
content:'我不知道'
role:'user'
content:'北京有哪些好玩的地方?'
我们将上面的内容通过api发给文心,得到的最终结果如下:
你现在应该能理解什么是自我一致性了。简单概括,文心是在扮演assist角色,而用户在扮演user角色,而你或者提示词工程师则是上帝视角,你可以任意修改每个角色的内容,让对话延续。也就是说你可以强制干预assist为"不知道",上述示例中在两次以上的"不知道"背景下,文心给出的答复也就是"不知道"的这个方向。因为它理解你(上帝)的意图。
再次强调,你的Prompt可以是整个发给API的内容,而不只是其中的content。这一点非常、非常、非常重要。
当然文心千帆会对api的请求做一些限制,例如必须是奇数组,角色只能是user开头、user结尾等等,但能够自定义角色的所有content就已经足够。
评论
用户头像