众所周知,当我们需要让大语言模型执行任务,需要输入 Prompt 来指导其执行,而 Prompt 是使用自然语言描述的。对于简单的任务,自然语言能描述的很清楚,比如:“请翻译以下内容为简体中文:”、“请生成以下内容的摘要:” 等。
但是当我们遇到一些复杂的任务,比如要求模型生成特定的 JSON 格式,或者任务有多个分支,每个分支需要执行多个子任务,子任务之间还相互关联,这时候用自然语言描述就显得力不从心了。
在继续阅读之前,这里有两道思考题可以先试试看:
有多个长句子,需要将每一个都拆分成不超过 80 个字符的短句子,然后输出成一个 JSON 格式,清晰的描述长句子和短句子之间的对应关系。
比如:
[
{
"long": "This is a long sentence that needs to be split into shorter sentences.",
"short": [
"This is a long sentence",
"that needs to be split",
"into shorter sentences."
]
},
{
"long": "Another long sentence that should be split into shorter sentences.",
"short": [
"Another long sentence",
"that should be split",
"into shorter sentences."
]
}
]
一段原始字幕文稿,只有对话信息,现在需要从中提取章节、发言人,然后按照章节和段落列出对话内容。如果是多个发言人,每段对话前需要标明发言人,如果是同一个发言人连续发言,则不需要。(实际上这就是我自己用的一个整理视频文稿的 GPT 视频文稿整理 GPT)
示例输入:
所以我要引用一下埃隆·马斯克的话,希望你不要介意。
我向你道歉。
但他并不认同这是一个保障隐私和安全的模型。
他将这种集成称为"令人毛骨悚然的间谍软件"。你对此有什么回应?
不在意?
那是他的观点。
显然,我不这么认为。
我们也不这么认为。
Mira,感谢你能和我们在一起。
我知道你可能稍微有点忙。
我有许多问题想向 Mira 提问,但我们只有 20 分钟。
所以我想先设定一下大家的期望。
我们会专注于一些主题, 包括一些近期的新闻和 Mira 作为首席技术官所负责的一些领域。
希望我们能深入探讨其中的一些话题。
我想我第一个问题是, 考虑到你现在极其忙碌, 以及新闻的攻击, 有些好有些坏, 你大约六年前加入了这个公司。
那时,它是一个截然不同的组织。
你相对低调,不太为人知晓。
你是否怀念那些能够全神贯注工作的日子?
我想说,我们依旧全神贯注在工作中。
只不过工作的内容已经发展变化了,它不仅仅关乎研究。
也是因为,你知道,研究已经得到了很大的进展。
这也是关于我们如何以一种有益且安全的方式将这种技术引入到世界中所以,使命依然如一, 我们在研究上也已经取得了很多进展,工作领域也在不断扩大。
公众对此的关注度也很高, 这对于我们这些正在研究技术和开发产品的人来说可能会感到有些不同寻常。
但你要知道, 鉴于我们所做的事情的重要性,这种关注是非常必要的, 而且这是积极的。
示例输出:
### 引言
**主持人**:
所以我要引用一下埃隆·马斯克的话,希望你不要介意。我向你道歉,但他并不认同这是一个保障隐私和安全的模型。他将这种集成称为"令人毛骨悚然的间谍软件"。你对此有什么回应?
**Mira**:
那是他的观点。显然,我不这么认为。我们也不这么认为。
### 欢迎与介绍
**主持人**:
Mira,感谢你能和我们在一起。我知道你可能稍微有点忙。我有许多问题想向你提问,但我们只有 20 分钟。所以我想先设定一下大家的期望。我们会专注于一些主题,包括一些近期的新闻和你作为首席技术官所负责的一些领域。希望我们能深入探讨其中的一些话题。
### 职业生涯回顾
**主持人**:
我想我第一个问题是,考虑到你现在极其忙碌,以及新闻的攻击,有些好有些坏,你大约六年前加入了这个公司。那时,它是一个截然不同的组织。你相对低调,不太为人知晓。你是否怀念那些能够全神贯注工作的日子?
**Mira**:
我想说,我们依旧全神贯注在工作中。只不过工作的内容已经发展变化了,它不仅仅关乎研究。也是因为,研究已经得到了很大的进展。这也是关于我们如何以一种有益且安全的方式将这种技术引入到世界中。所以,使命依然如一,我们在研究上也已经取得了很多进展,工作领域也在不断扩大。公众对此的关注度也很高,这对于我们这些正在研究技术和开发产品的人来说可能会感到有些不同寻常。但你要知道,鉴于我们所做的事情的重要性,这种关注是非常必要的,而且这是积极的。
或许你已经在网上看过很多关于如何写 Prompt 技巧的文章,记住了很多 Prompt 模板,但是 Prompt 的本质是什么呢?我们为什么需要 Prompt?
Prompt 的本质是一种对 LLM 的控制指令,用自然语言描述,让 LLM 理解我们的要求,然后按照要求把输入变成我们期望的输出结果。
比如常用的 few-shot 技巧,就是通过举例子,通过示例让 LLM 理解我们的要求,然后参考样例输出我们期望的结果。比如 CoT(思维链,Chain of Thought),就是通过人为的对任务进行分解,并且限定执行的流程,让 LLM 能按照我们指定的流程和步骤执行,而不至于过于发散或者跳过关键步骤,从而得到更好的结果。
就好比我们上学的时候,老师在讲数学定理,要给我们举例子,通过例子让我们理解定理的含义;在做实验的时候,要告诉我们实验的步骤,哪怕不理解实验的原理,但能按照步骤执行实验,也能得到差不多的结果。
为什么有时候 Prompt 的结果不够理想呢?
因为 LLM 不能准确的理解我们的要求,这里面一方面局限于 LLM 理解和跟随指令的能力,另一方面局限于我们的 Prompt 描述的是否清晰和准确。
既然 Prompt 的本质是一种对 LLM 的控制指令,那么我们可以不必局限于传统自然语言描述的方式写 Prompt,还可以借助伪代码(pseudocode)来精准的控制 LLM 的输出结果和定义其执行逻辑。