简单的LLM/GPT技巧:“种子化”
如何在较少的前期提示下引导产生回应
这是我在构建pippy.app和veri.foo时遇到的一个简单的快捷工程技巧。这是一个非常简单的想法。它可以通过ChatGPT和类似的LLM的任何接口进行工作,但最适合通过API,因为您可以指定角色。
思想是在 LLM 完成时预填充一个响应的开头,以强制特定类型的内容或格式。将其视为“结束”参数,但是代替为“开始”。
假设你正在为内容提取构建一组提示,根据特定的查询。系统提示可能是这样的:“给定一个用户查询和一个文档,在一组项目中提取与查询相关的所有条目,并用一个项目符号列出。”
我们可以看到,它已经正确地从文档中识别出三个地名。然而,我们本打算让项目符号以星号而不是破折号开头。(显然,这是在后期处理中更容易解决的问题,但我只是想在本文中给出一个简单的例子。)
这里有一个技巧:只需在提示中插入你自己的助手消息,消息的开头应该是你希望得到的完成结果的样子。所以,如果使用API,消息数组可能如下所示:
[
{
"role": "user",
"content": "
query: \"all place-names\"\
document: I went to London and met
a person from Highgate, though they
originally grew up in France.\""
},
{
"role": "assistant",
"content": "* " // <--- we have added this
}
]
由于我们自己在“*”前面加了前缀,所以完成的内容将更一致地呈现为带有星号的项目列表:
然后只需将我们的强制完成与生成的完成连接起来,即
"* " + "London\n* Highgate\n* France
这对我们来说非常有用,如果我们发现自己在系统提示中不得不重复很多次指令,因为LLM不能给予我们所期望的。这只是一个微小的额外推动,它将增加以下标记的概率。下面是一个更详细的示例,我们要求一个更具体的格式:比如类似XML的格式。
再次,这是一个非常刻意的例子,但是我发现它能产生更可靠的输出,特别是对于结构格式/语法。
欢迎评论和提问!❤