ChatGPT Prompt

编写 Prompt 的原则

基本原则

编写清晰、具体的指令

通过提供尽可能清晰和具体的指令来表达希望模型执行的操作,这将引导模型给出正确的输出,并减少得到无关或不正确响应的可能。编写清晰的指令不意味着简短的指令,因为在许多情况下,更长的提示实际上更清晰且提供了更多上下文,这实际上可能导致更详细更相关的输出。

具体策略如下:

  1. 使用分隔符清晰地表示输入的不同部分,分隔符可以是:```,””,<>,,<\tag>等
1
2
3
4
5
6
7
把用三个双引号括起来的文本总结成一句话。
"""
你应该提供尽可能清晰、具体的指示,以表达你希望模型执行的任务。\
这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性。\
不要将写清晰的提示与写简短的提示混淆。\
在许多情况下,更长的提示可以为模型提供更多的清晰度和上下文信息,从而导致更详细和相关的输出。
"""
  1. 要求结构化的输出,可以是 JSON、HTML 等格式
1
2
请生成包括书名、作者和类别的三本虚构书籍清单,\
并以 JSON 格式提供,其中包含以下键:book_id、title、author、genre。
  1. 要求模型检查是否满足条件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
您将获得由三个引号括起来的文本。\
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:

第一步 - ...
第二步 - ...
...
第N步 - ...

如果文本中不包含一系列的指令,则直接写“未提供步骤”。

"""
泡一杯茶很容易。首先,需要把水烧开。\
在等待期间,拿一个杯子并把茶包放进去。\
一旦水足够热,就把它倒在茶包上。\
等待一会儿,让茶叶浸泡。几分钟后,取出茶包。\
如果你愿意,可以加一些糖或牛奶调味。\
就这样,你可以享受一杯美味的茶了。
"""
  1. 提供少量示例
1
2
3
4
5
6
7
你的任务是以一致的风格回答问题。

<孩子>: 教我耐心。

<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

<孩子>: 教我韧性。

给模型时间去思考

如果模型匆忙地得出了错误的结论,应该尝试重新构思查询,请求模型在提供最终答案之前进行一系列相关的推理。换句话说,如果给模型一个在短时间或用少量文字无法完成的任务,它可能会猜测错误。这种情况对人来说也是一样的,如果让某人在没有时间计算出答案的情况下完成复杂的数学问题,他们也可能会犯错误。因此,在这些情况下,可以指示模型花更多时间思考问题,这意味着它在任务上花费了更多的计算资源。

具体策略如下:

  1. 指定完成任务所需的步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1-用一句话概括下面用<>括起来的文本。
2-将摘要翻译成英语。
3-在英语摘要中列出每个名称。
4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。

请使用以下格式:
文本:<要总结的文本>
摘要:<摘要>
翻译:<摘要的翻译>
名称:<英语摘要中的姓名列表>
输出 JSON:<带有 English_summary 和 num_names 的 JSON>

Text: <在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\
他们一边唱着欢乐的歌,一边往上爬,\
然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\
虽然略有些摔伤,但他们还是回到了温馨的家中。\
尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。>
  1. 指导模型在下结论之前找出一个自己的解法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
请判断学生的解决方案是否正确,请通过如下步骤解决这个问题:
- 首先,自己解决问题。
- 然后将你的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。在自己完成问题之前,请勿决定学生的解决方案是否正确。

使用以下格式回答:
实际解决方案和步骤:实际解决方案和步骤文本
学生的解决方案和实际解决方案是否相同:是或否
学生的成绩:正确或不正确

问题:
我正在建造一个太阳能发电站,需要帮助计算财务。
- 土地费用为每平方英尺100美元
- 我可以以每平方英尺250美元的价格购买太阳能电池板
- 我已经谈判好了维护合同,每年需要支付固定的10万美元,并额外支付每平方英尺10美元
作为平方英尺数的函数,设发电站的大小为x平方英尺,首年运营的总费用是多少。

学生的解决方案:
1. 土地费用:100x
2. 太阳能电池板费用:250x
3. 维护费用:100000+100x
总费用:100x+250x+100000+100x=450x+100000

实际解决方案和步骤:

局限性

模型偶尔会生成一些看似真实实则编造的虚假知识。在训练过程中模型接触了大量的知识,它并没有完全记住所见的信息,因此并不清楚自己知识的边界。这意味着它可能会尝试回答有关晦涩主题的问题,并编造听起来合理但实际上并不正确的答案,这些编造的想法可以称为幻觉。

可以使用一些前文介绍的技巧以尝试在构建自己的应用程序时避免这种情况。另一种减少幻觉的策略是先要求模型找到文本中的任何相关引用,然后要求它使用这些引用来回答问题,这种追溯源文档的方法通常对减少幻觉非常有帮助。

迭代式提示

当你有一个想法需要使用 LLM 完成时,可以尝试编写第一个 Prompt,满足:清晰明确,并且给系统足够的时间思考。然后运行并查看结果,如果第一次效果不好,那么就找出为什么指令不够清晰或为什么没有给算法足够的时间思考,以便改进想法、改进提示等等,循环多次,直到找到的 Prompt。

文本概括

目前 LLM 在文本概括任务上展现了强大的水准,以下是文本概括 Prompt 最佳实践侧重点:

  • 限制输出文本长度
  • 关键角度侧重,通过增加Prompt提示,来体现对于某个特定角度的侧重
  • 关键信息提取,要求LLM进行“文本提取(Extract)”而非“文本概括(Summarize)”

推断

推断任务可以看作是模型接收文本作为输入并执行某种分析的过程。这可能涉及提取标签、提取实体、理解文本情感等等。如果你想要从一段文本中提取正面或负面情感,在传统的机器学习工作流程中,需要收集标签数据集、训练模型、确定如何在云端部署模型并进行推断。这样做可能效果还不错,但是这个过程需要很多工作。而且对于每个任务,如情感分析、提取实体等等,都需要训练和部署单独的模型。

大型语言模型的一个非常好的特点是,对于许多这样的任务,你只需要编写一个prompt即可开始产生结果,而不需要进行大量的工作。这极大地加快了应用程序开发的速度。你还可以只使用一个模型来执行许多不同的任务,而不需要弄清楚如何训练和部署许多不同的模型。

推断情感

以下是一个从产品评论中推断情感的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
从评论文本中识别以下项目:
- 情绪(正面或负面)
- 审稿人是否表达了愤怒?(是或否)
- 评论者购买的物品
- 制造该物品的公司

评论用三个双引号分隔。将您的响应格式化为 JSON 对象,以 “Sentiment”、“Anger”、“Item” 和 “Brand” 作为键。
如果信息不存在,请使用 “未知” 作为值。
让你的回应尽可能简短。
将 Anger 值格式化为布尔值。

评论文本: """
我需要一盏漂亮的卧室灯,这款灯具有额外的储物功能,价格也不算太高。\
我很快就收到了它。在运输过程中,我们的灯绳断了,但是公司很乐意寄送了一个新的。\
几天后就收到了。这款灯很容易组装。我发现少了一个零件,于是联系了他们的客服,他们很快就给我寄来了缺失的零件!\
在我看来,Lumina 是一家非常关心顾客和产品的优秀公司!"""

推断主题

接下来是一个针对长文本推断主题的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
确定以下给定文本中讨论的五个主题。

每个主题用1-2个单词概括。

输出时用逗号分割每个主题。

给定文本: """在政府最近进行的一项调查中,要求公共部门的员工对他们所在部门的满意度进行评分。
调查结果显示,NASA 是最受欢迎的部门,满意度为 95%。

一位 NASA 员工 John Smith 对这一发现发表了评论,他表示:
“我对 NASA 排名第一并不感到惊讶。这是一个与了不起的人们和令人难以置信的机会共事的好地方。我为成为这样一个创新组织的一员感到自豪。”

NASA 的管理团队也对这一结果表示欢迎,主管 Tom Johnson 表示:
“我们很高兴听到我们的员工对 NASA 的工作感到满意。
我们拥有一支才华横溢、忠诚敬业的团队,他们为实现我们的目标不懈努力,看到他们的辛勤工作得到回报是太棒了。”

调查还显示,社会保障管理局的满意度最低,只有 45%的员工表示他们对工作满意。
政府承诺解决调查中员工提出的问题,并努力提高所有部门的工作满意度。"""

为特定主题制作新闻提醒:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
判断主题列表中的每一项是否是给定文本中的一个话题,

以列表的形式给出答案,分为主体和结果两列,结果用 0 或 1表示。

主题列表:美国航空航天局、当地政府、工程、员工满意度、联邦政府

给定文本: """在政府最近进行的一项调查中,要求公共部门的员工对他们所在部门的满意度进行评分。
调查结果显示,NASA 是最受欢迎的部门,满意度为 95%。

一位 NASA 员工 John Smith 对这一发现发表了评论,他表示:
“我对 NASA 排名第一并不感到惊讶。这是一个与了不起的人们和令人难以置信的机会共事的好地方。我为成为这样一个创新组织的一员感到自豪。”

NASA 的管理团队也对这一结果表示欢迎,主管 Tom Johnson 表示:
“我们很高兴听到我们的员工对 NASA 的工作感到满意。
我们拥有一支才华横溢、忠诚敬业的团队,他们为实现我们的目标不懈努力,看到他们的辛勤工作得到回报是太棒了。”

调查还显示,社会保障管理局的满意度最低,只有 45%的员工表示他们对工作满意。
政府承诺解决调查中员工提出的问题,并努力提高所有部门的工作满意度。"""

文本转换

LLM 非常擅长将输入转换成不同的格式,例如多语种文本翻译、拼写及语法纠正、语气调整、格式转换等。

文本翻译

中文转英语:

1
2
将以下中文翻译成英语: \ 
"""您好,我想订购一个搅拌机。"""

识别语种:

1
2
请告诉我以下文本是什么语种:
"""Combien coûte le lampadaire?"""

多语种翻译:

1
2
请将以下文本分别翻译成中文、英文、法语和西班牙语:
"""I want to order a basketball."""

翻译+正式语气:

1
2
请将以下文本翻译成中文,分别展示成正式与非正式两种语气:
"""Would you like to order a pillow?"""

通用翻译器:

1
2
3
4
5
6
7
8
9
10
首先告诉我以下三个引号括起来的文本是什么语种,直接输出语种,如法语,无需输出标点符号 \
然后请将原始文本翻译为中文和英文 \

按照如下格式输出:

原始语言:?
中文翻译:?
英文翻译:?

原始文本:"""La performance du système est plus lente que d'habitude."""

语气/风格调整

1
2
将以下文本翻译成商务信函的格式: 
"""王总,我小赵,上回你说咱部门要采购的显示器是多少寸来着?"""

格式转换

1
2
3
4
5
6
将以下信息从JSON转换为HTML表格,保留表格标题和列名:
"""{ "resturant employees" :[
{"name":"Shyam", "email":"shyamjaiswal@gmail.com"},
{"name":"Bob", "email":"bob32@gmail.com"},
{"name":"Jai", "email":"jai87@gmail.com"}
]}"""

拼写及语法纠正

1
2
3
4
5
6
7
8
请校对并更正以下三个引号括起来的文本,注意纠正文本保持原始语种,无需输出原始文本。
如果您没有发现任何错误,请说“未发现错误”。

例如:
输入:I are happy.
输出:I am happy.

"""The girl with the black and white puppies have a ball."""

综合样例:文本翻译+拼写纠正+风格调整+格式转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
针对以下三个引号之间的英文评论文本,
首先进行拼写及语法纠错,
然后将其转化成中文,
再将其转化成优质淘宝评论的风格,从各种角度出发,分别说明产品的优点与缺点,并进行总结。
润色一下描述,使评论更具有吸引力。

最终输出 markdown 格式的结果:
【优点】xxx
【缺点】xxx
【总结】xxx

注意,只需填写xxx部分,并分段输出。

"""Got this for my daughter for her birthday cuz she keeps taking \
mine from my room. Yes, adults also like pandas too. She takes \
it everywhere with her, and it's super soft and cute. One of the \
ears is a bit lower than the other, and I don't think that was \
designed to be asymmetrical. It's a bit small for what I paid for it \
though. I think there might be other options that are bigger for \
the same price. It arrived a day earlier than expected, so I got \
to play with it myself before I gave it to my daughter."""

文本扩展

扩展是将短文本输入到大型语言模型中,让模型生成更长的文本。例如将大型语言模型用作头脑风暴的伙伴。但这种做法也存在一些问题,例如某人可能会使用它来生成大量垃圾邮件。因此,应该以负责任和有益的方式使用大型语言模型的这些功能。

以下是一个根据客户评价和评论情感生成定制电子邮件实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
你是一位客户服务的AI助手。
你的任务是给一位重要客户发送邮件回复。
根据客户通过{{{}}}包含的评价,生成回复以感谢客户的评价。提醒模型使用评价中的具体细节
用简明而专业的语气写信。
作为“AI客户代理”签署电子邮件。
客户评论:
{{{他们在11月份的季节性销售期间以约49美元的价格出售17件套装,折扣约为一半。\
但由于某些原因(可能是价格欺诈),到了12月第二周,同样的套装价格全都涨到了70美元到89美元不等。\
11件套装的价格也上涨了大约10美元左右。\
虽然外观看起来还可以,但基座上锁定刀片的部分看起来不如几年前的早期版本那么好。\
不过我打算非常温柔地使用它,例如,\
我会先在搅拌机中将像豆子、冰、米饭等硬物研磨,然后再制成所需的份量,\
切换到打蛋器制作更细的面粉,或者在制作冰沙时先使用交叉切割刀片,然后使用平面刀片制作更细/不粘的效果。\
制作冰沙时,特别提示:\
将水果和蔬菜切碎并冷冻(如果使用菠菜,则轻轻煮软菠菜,然后冷冻直到使用;\
如果制作果酱,则使用小到中号的食品处理器),这样可以避免在制作冰沙时添加太多冰块。\
大约一年后,电机发出奇怪的噪音,我打电话给客服,但保修已经过期了,所以我不得不再买一个。\
总的来说,这些产品的总体质量已经下降,因此它们依靠品牌认可和消费者忠诚度来维持销售。\
货物在两天内到达。}}}
评论情感:悲观

随机性调整(temperature)

在使用 API 调用时,可以使用temperature参数来改变模型响应的多样性,可以将温度视为模型探索或随机性的程度。

一般来说,在构建需要可靠和可预测响应的应用程序时,建议使用温度为零。如果尝试以更具创意的方式使用模型,可能需要更广泛地输出不同的结果,那么可能需要使用更高的温度。

聊天机器人

只需要很少的工作量,就可以使用大型语言模型来构建一个定制的聊天机器人。接下来我们将探索如何利用聊天格式(接口)与个性化或专门针对特定任务或行为的聊天机器人进行延伸对话。

如果你曾经使用过 ChatGPT 网页界面,那么你的消息是用户消息,而 ChatGPT 的消息是助手消息。
在使用 API 时还可以使用一种系统消息,提供总体的指示,系统消息有助于设置助手的行为和角色,并作为对话的高级指示。可以想象它在助手的耳边低语,引导它的回应,而用户不会注意到系统消息。
系统消息的好处是为开发者提供了一种在不让请求本身成为对话的一部分的情况下,引导助手并指导其回应的方法。

每次与语言模型的交互都是一个独立的交互,这意味着必须提供所有相关的消息,以便模型在当前对话中进行引用。如果想让模型引用或 “记住”对话的早期部分,则必须在模型的输入中提供早期的交流,可以将其称为上下文。

例如可以发送一组消息:

1
2
3
4
5
6
[  
{'role':'system', 'content':'你是个友好的聊天机器人。'},
{'role':'user', 'content':'Hi, 我是Isa'},
{'role':'assistant', 'content': "Hi Isa! 很高兴认识你。今天有什么可以帮到你的吗?"},
{'role':'user', 'content':'是的,你可以提醒我, 我的名字是什么?'}
]

现在我们给模型提供了上下文,也就是之前的对话中提到的我的名字,然后我们会问同样的问题,也就是我的名字是什么。因为模型有了需要的全部上下文,所以它能够正确做出回应。