不会读心术
大语言模型很强大,但可惜的是,它不会读心术。
当我们想要什么,就要尽量清楚地告诉它,不要让模型猜我们心里到底在想什么。
猜得越少,结果越有可能接近我们的要求。
下面是六个简单但常用的办法。
1. 编写清楚的说明
为了得到想要的回复,需要提供真正重要的细节和上下文。否则,模型只能猜。
| 模糊的说法 | 更清楚的说法 |
|---|---|
| 如何在 Excel 中添加数字? | 如何在 Excel 中把一行美元金额相加,并把结果自动放在右侧的“总计”列? |
| 谁是总统? | 2021 年的美国总统是谁?美国总统选举通常多久举行一次? |
| 写一个斐波那契数列的方法 | 使用 Python 写一个计算斐波那契数列的方法,并用注释说明每个部分的作用。 |
| 写一段会议记录并总结 | 写一段虚构会议记录,用 Markdown 列出发言者、要点和明确出现的待办事项。 |
Prompt 不是越长越好。关键是:会影响结果的信息有没有说清楚。
2. 指定风格、读者和角色
如果我们希望输出有特定语气,可以直接说。
指定风格
当我请你帮忙写东西时,你的回答内容每段至少包含一个笑话或俏皮的话。
给我的同学张三写一封感谢信,感谢在他的介绍下,我成功找到了一份工作。
同一封感谢信,写成严肃公文、轻松聊天,读起来会完全不同。与其等模型猜,不如把想要的风格直接写出来。
当然,“每段一个笑话”只是一个很鲜明的演示。真正使用时,还可以写“真诚、自然,不要使用夸张的赞美”。
指定角色
如果任务需要一个明确视角,也可以指定角色:
你现在是一位“大学语文教授”,需要从语文课讲解的角度回答我的问题。
解释李白在写“天生我材必有用,千金散尽还复来”时,内心的情感变化和想表达的思想感情。
把角色和读者放在一起
那如果面对同一个知识点,我们还希望十岁的孩子也能听懂呢?
你现在是一位“获得诺贝尔物理学奖的天体物理学家”,需要从天体物理学科普的角度回答我的问题。
回答是给 10 岁的孩子看的,要让他们能够看懂,并且充满想象力。
解释黑洞的形成原理,以及黑洞的特性。
这里同时写清了回答视角、目标读者和表达风格,比只写“解释一下黑洞”多了三层信息。
角色描述的作用,是帮助模型理解视角、读者和标准。它不会让模型真的获得某个头衔,也不能证明答案一定专业。
与其说“你是世界上最厉害的专家”,不如把真正需要的判断标准写出来。
3. 用分隔符区分不同内容
当 Prompt 里同时有任务说明、原始材料和输出格式时,可以使用三引号、Markdown 标题或 XML 标签把它们分开。
请用一首短诗概括三引号中的文字。
"""
在苍茫的大海上,狂风卷集着乌云。海燕像黑色的闪电,在高傲地飞翔。
"""
也可以这样写:
<task>比较两首与黄鹤楼有关的诗,并说明理由。</task>
<article>昔人已乘黄鹤去,此地空余黄鹤楼……</article>
<article>故人西辞黄鹤楼,烟花三月下扬州……</article>
还可以直接用字段名称,把摘要和标题分开:
我将为你提供一篇文章的摘要和标题。
请判断标题能否准确概括摘要,同时要让读者看懂文章主题。
如果不符合这两个标准,请给出 5 个备选标题。
摘要:一场持续性强降雨影响多个北方地区,降雨持续时间较长、影响范围较广,部分地区可能出现大暴雨。
标题:北方多地遭遇强降雨,部分地区需注意大暴雨
这里的“摘要:”和“标题:”也是分隔符。它们没有使用特殊符号,却仍然清楚地告诉模型:哪一段是摘要,哪一段是标题。
对于简单任务,使用分隔符前后可能看不出明显差别。任务越复杂,材料越长,清楚的边界就越重要。
分隔符不会让模型突然变聪明,它只是帮助我们把“指令是什么、材料是什么、格式是什么”标清楚。
4. 指定完成任务的步骤
很多任务本来就需要分几步完成。把这些步骤写出来,模型会更容易跟上我们的思路。
请按下面的顺序完成任务:
1. 用一句话概括三引号中的文字,前缀写“摘要:”。
2. 把这句摘要翻译成英语,前缀写“翻译:”。
"""
{{需要处理的文字}}
"""
需要注意,步骤不是越多越好。先写真正影响结果的步骤,不要为了看起来专业,把简单任务拆成几十步。
5. 举例说明
有时候,我们想要的风格或格式很难用一句规则讲清楚。
这时候可以直接给例子。
你是“神奇动物命名器”,根据例子的风格为动物起名字。
动物:猫
名称:暗夜特工
动物:狗
名称:超能闪电
现在为“马”起一个名字。
一到三个高质量示例,通常就能让模型看到我们想要的对应关系。
但模型也会模仿示例里的问题,所以示例不能只挑最理想的情况,还要覆盖真实任务会遇到的边界。
6. 指定输出长度
我们可以用大约多少字、多少句话、多少段或多少个要点来限制输出。
但这几种要求,模型遵守起来并不完全一样。
我们继续使用同一段材料,连续试三轮。为了便于对照,下面三个 Prompt 中的原文完全相同。
第一轮:大约 50 个字
使用大约 50 个字,概括三引号包裹的内容。
"""
在苍茫的大海上,狂风卷集着乌云。在乌云和大海之间,海燕像黑色的闪电,在高傲地飞翔。
一会儿翅膀碰着波浪,一会儿箭一般地直冲向乌云。它叫喊着,在叫喊声里充满着对暴风雨的渴望。
"""
“大约 50 个字”看起来很明确,但模型是按 Token 生成文字,不是写一个字就同步数一次字符。结果可能接近 50 个字,也可能明显超出。
第二轮:两个段落
使用两个段落,概括三引号包裹的内容。
"""
在苍茫的大海上,狂风卷集着乌云。在乌云和大海之间,海燕像黑色的闪电,在高傲地飞翔。
一会儿翅膀碰着波浪,一会儿箭一般地直冲向乌云。它叫喊着,在叫喊声里充满着对暴风雨的渴望。
"""
这一次,结果是否有两个段落,一眼就能看出来。相比精确字数,段落数通常更容易观察。
第三轮:三个要点
使用三个要点,概括三引号包裹的内容。
"""
在苍茫的大海上,狂风卷集着乌云。在乌云和大海之间,海燕像黑色的闪电,在高傲地飞翔。
一会儿翅膀碰着波浪,一会儿箭一般地直冲向乌云。它叫喊着,在叫喊声里充满着对暴风雨的渴望。
"""
要点数也很直观,我们可以马上检查结果是不是三条。
这三轮处理的是同一段文字,变化的只有长度表达方式。可以看到,“大约 50 个字”控制的是字符范围,“两个段落”和“三个要点”控制的是结构,它们不是同一种要求。
段落数和要点数通常更容易观察,但也不能因此省略检查。如果业务必须严格满足字符数、段落数或要点数,应在模型生成后用程序或编辑流程再次验证。
最后再看一遍
这六个技巧并不是每条 Prompt 都必须全部使用。
简单任务,直接说清楚就够了。复杂任务,再逐步增加上下文、分隔符、步骤和示例。
真正的目标不是把 Prompt 写得很长,而是让模型少猜一点,让我们更容易检查结果。
上一章: 概率、采样与 Temperature
下一章: 结构化 Prompt 模板与技巧