版权提醒
本文是非授权转载。此外,本文对原文进行过删改。
靶向提示#
靶向提示定义及其构造思路为本人自行总结。由于提示词工程为一门经验学科,本文主观性较强,如有不同意见,欢迎讨论。
靶向提示为一类高度精简后的强效提示,其靶向性体现在两点,利用LLM的底层特性,与分析解决问题的根源。故靶向提示可以定义为,利用LLM底层特性解决问题根源的一类提示词。
以下将通过一个例子阐述靶向提示的提示词优化思路:
问题:输出过长,以及容易抢话
分析问题根源 本质上输出过长与容易抢话本质上是一类问题。输出过长的核心问题在于,对话历史以及提示词影响了AI的生成,在到达要求字数时,继续生成的“惯性”大于字数要求停止作用,而此时,单纯的减少要求字数显然无法获得理想效果。 而容易抢话的原因则更加简单,即AI依据对话历史与预训练,在文中包含内容的“惯性”大于禁止内容要求的抑制作用,同时,在单次生成长度明显大于对话历史时,这种“惯性”尤为强烈,因为此时内容的过久缺乏使得生成概率显著提升。
了解LLM相关特性 首先我们分析AI的输出到什么时候停止,AI的输出停止,依赖stop(停止字符串),Claude在绝大部分未自定义stop时候,都是在
\n\nHuman:处进行停止,也就是说,AI作为文本生成器,生成完当前\n\nAssistant:的内容后,开始继续按上下文生成\n\nHuman:后的内容时,将其截断,使得内容仅包含生成一个Assistant前缀下的内容,而不是继续输出Human与Assistant的对话。 同时,AI倾向于在\n\nAssistant:下生成一个完整的对话,这与作为对话模型的对齐有关,使得AI在生成\n\nHuman:前总是倾向于生成总结性或者具有结尾要素的内容作为铺垫。结合特性总结问题 根据以上分析,我们知道了问题的根源在于告诉AI对话应该在何处停止,而AI的特性告诉我们生成将在
\n\nHuman:处停止,那么最后问题的核心就变成了告诉AI应该在何时生成\n\nHuman:。更具体的来说,我们需要要求AI在到达要求字数时,生成\n\nHuman:,即使内容不够完整,同时,在需求内容时,生成\n\nHuman:。构造提示 最后,需要根据预设等内容进行提示词构造,例如在4.4系列预设中,
\n\nHuman:与\n\nAssistant:被设定为玩家与游戏主持,那么生成\n\nHuman:也就等于交换回合。那么最后,得到到的提示大致可以概括为:游戏主持在到达要求字数或需要玩家输入内容时,交换回合给玩家,即使内容不够完整。
以上便是一个完整的靶向提示构建优化思路。
补充:由于当前claude 3 opus/3.5 sonnet相对本文撰写时的claude 2.1性能提升,直接的role前缀相关提示词效果被削弱,本文所使用的例子可能无法获得最佳效果,但本文思路依旧适用与目前所有claude模型。