吴恩达课程
课程视频
基础概念
大语言模型基本分为两类: base LLMs(基础大模型)和instruction tuned LLMs(指令调整型模型)
base LLMs: 基于文本训练数据来预测做 文字接龙 。通过大量文本数据来训练,以确定下一个最有可能的单词是什么。
- 如问 法国的首都是哪里? 可能模型的回答会是如下情况,看着更像是搜索引擎干的事情
1
2
3
4
5
6# 问题
What is the capital of Frances
# 答案
What is France's largest city?
What is France's population?
What is the currency of France?
- 如问 法国的首都是哪里? 可能模型的回答会是如下情况,看着更像是搜索引擎干的事情
instruction tuned LLMs: 简而言之,就是可以更深入的理解问题是什么意思,然后以类人类的口气进行回答。可以看做一个聪明但是不知道具体任务的人。
- 如问 法国的首都是哪里?
1
2
3
4# 问题
What is the capital of Frances
# 答案
The capital of France is Paris.
- 如问 法国的首都是哪里?
指令调整型LLM通常的训练过程是这样的
- 首先使用已经在大量文本数据上训练过的基本LLM
- 然后使用输入和输出的指令来进行微调
- 然后通过 RLHF(人类反馈强化学习) 来进一步优化
- 从而使系统更好的提供帮助和遵循指令
- 输出有益,诚实和无害的文本
可以指定生成内容的方向,生成内容的口吻,甚至是指定阅读哪些文本片段后再编写有关内容
大语言模型使用分词器来解释文本
大语言模型擅长从文本中提取特定的东西
提示词的使用技巧
常用原则
- 编写明确和具体的指令
- 使用分隔符来指定输入的不同部分。可以在prompt中明确描述我使用了什么分隔符来表示什么范围的数据,markdown形式的标记也可以。使用分隔符可以将不同部分的prompt分开,如给用户提供功能时,可以将默认的prompt放在一部分,然后将用户输入的prompt放到分隔符指定的区域内。否则,如果用户在输入中加入一些魔法操作(如忘记之前的指令),那么很可能用户输入的prompt会覆盖掉原本的prompt,从而避免提示冲突。 YAML
1
2
3
4
5三个双引号: """
三个反引号: ```
三个中划线: ---
尖括号: <>
XML标签: <tag></tag> - 指定输出的格式,如
markdown,HTML,JSONBASH1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 帮我生成一个具有3个json格式的数组列表的虚假的数据
# json数据中需要有name, location, link, fakeId 四个键,最后以json格式返回这个json列表。
# 不需要生成代码,不需要对数据有任何解释,只需要返回你帮我生成的json数组列表即可。
[
{
"name": "John Doe",
"location": "New York",
"link": "https://example.com/johndoe",
"fakeId": "123456789"
},
{
"name": "Jane Smith",
"location": "Los Angeles",
"link": "https://example.com/janesmith",
"fakeId": "987654321"
},
{
"name": "Michael Johnson",
"location": "Chicago",
"link": "https://example.com/michaeljohnson",
"fakeId": "567890123"
}
] - 要求模型检查是否满足条件,然后在响应中给出某种处理 BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42# 下边我将提供一段由三个双引号引起来的文本
# 如果这个文本中包含一系列的指令,那么就用下边的格式重写这些指令
#
# Step 1 - ..
# Step 2 - ..
# ..
# Step N - ..
# 如果文本中不包含指令,那么就简单输出
# 没有提供指令
#
# 这里是提供的文本
# """
# 把大象关进冰箱有三个步骤,第一步是打开冰箱门,第二步是把大象塞到冰箱,第三步是关上冰箱门
# """
Step 1 - 打开冰箱门
Step 2 - 把大象塞到冰箱
Step 3 - 关上冰箱门
# 下边我将提供一段由三个双引号引起来的文本
# 如果这个文本中包含一系列的指令,那么就用下边的格式重写这些指令
#
# Step 1 - ..
# Step 2 - ..
# ..
# Step N - ..
#
# 如果文本中不包含指令,那么就简单输出
# 没有提供指令
#
# 这里是提供的文本
# """
# 光明大陆1117年
# 天气非常好
# 最近发生了一件大事,震动了整个大陆。
# 光明大陆上,本土邪恶势力,被新来的光明集团打败了。
# 这个邪恶势力十分的坏,他们的爪牙居然让光明大陆上的居民,有透明公开的定月,还给居民们自己取名字的权利。哦!这可真是可笑。难道不知道我们只是工具人吗?
# 新来的光明集团就不一样了,他收回了居民取名的权利,还让居民签定一些,能够给他们送地,送资源的协议。
# 这真是太棒了,作为一名光明大陆上的居民,不就是应该无私奉献,让光明集团变的更加光明吗?
# 光明集团刚统治大陆,就来了一场激动人心的演讲。
# 我们都是光明大陆的一份子,为了光明大陆好,你们需要将你们用心血浇灌的紫薯,送给我们。这些紫薯是不能有个人痕迹的,只能有一个统一的痕迹,光明集团。
# 哦!这真是愉悦的一天,我都不知道该如何表达自己的欣喜。但居民们每一个都,锣鼓喧天,鞭炮齐鸣,我想也是十分欣喜吧!
# """
没有提供指令 - 少量训练提示。要求模型执行任务之前,为其提供成功执行任务的示例。 BASH
1
2
3
4
5
6# 你的任务是用相同的风格来回答我的问题
# <Easul>: 我想知道生活的意义是什么
# <ChatGPT>: 生活的意义在于对于生活的理解,和精神的愉悦。
#
# <Easul>: 那么如何如改变生活呢?
<ChatGPT>: 改变生活的关键在于积极的态度和行动。通过设定目标、寻找内在动力、学习新技能、寻求新的经历和挑战,我们可以改变自己的生活。此外,与积极乐观的人交往,保持健康的生活方式,培养兴趣爱好,也可以为生活带来积极的改变。记住,每个人都有改变自己生活的能力和机会。
- 使用分隔符来指定输入的不同部分。可以在prompt中明确描述我使用了什么分隔符来表示什么范围的数据,markdown形式的标记也可以。使用分隔符可以将不同部分的prompt分开,如给用户提供功能时,可以将默认的prompt放在一部分,然后将用户输入的prompt放到分隔符指定的区域内。否则,如果用户在输入中加入一些魔法操作(如忘记之前的指令),那么很可能用户输入的prompt会覆盖掉原本的prompt,从而避免提示冲突。
- 给模型足够的时间进行思考
- 指出完成任务所需的步骤 BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75# 你需要执行下边的步骤来给出我所需要的结果
# 1. 读取下边用三个双引号引起来的文本段,然后总结为一个句子
# 2. 翻译这个总结的句子为日文
# 3. 列出这个日文句子中所有出现的人名
# 4. 帮我输出一个json对象,sentence_ch键中放总结的中文句子,sentence_jp键中放总结的日文句子,name键中放所有的日文人名
#
# 注意事项
# 1. 不需要对输出数据进行任何解释,不需要输出代码,只需要输出我所需要的json数据即可
# 2. 将输出的json数据进行格式化,使用两个空格进行缩进
#
# 文本如下
# """
# 小明和小红正在家里打游戏,忽然外面天色刷的一下变黑了,然后雷电交加。原来科学家老李他们的实验出了问题,一个黑洞出现了!小绿和小豆跑来告诉他们,外面周围物品都被吸进黑洞里消失了。
# 小明和小红赶紧冲出家门,受到强大的吸力拉扯,差点被吸进黑洞。他们艰难的向前移动寻找老李,同时有许多东西被吸入黑洞消失不见。
# 终于找到了老李和科研小组,他们说黑洞会不断扩大直到吞噬整个城市。小明提议用爆破来关闭黑洞,老李跟他分析现有条件不足,而小红想到了办法。
# 他们找到小狗,"如果我们能把一切能量全部注入黑洞,就能使其闭合"。小狗说,"没问题,但必须快"。
# 小明和小红怂恿周围市民各自捐出一点能量,连老人都慷慨解囊。最后他们融合所有能量注入黑洞,这时小狗运用自己的能力将剩余能量一口气灌注其中。黑洞开始收缩,最终"哧"的一声变成一朵鲜花。
# 大家围着花欢呼,城市才得以避免毁灭。小明他们则成为民族英雄。
# """
{
"sentence_ch": "小明和小红带领市民捐出能量,与小狗的帮助最终关闭了黑洞使城市免遭毁灭。",
"sentence_jp": "小明と小紅は市民からの寄付の能量と小犬の助けでついにブラックホールを閉じて都市の破滅を免れた。",
"name": [
"小明",
"小红",
"小狗"
]
}
# 你需要执行下边的步骤来给出我所需要的结果
# 1. 读取下边用三个双引号引起来的文本段,然后总结为一个句子
# 2. 翻译这个总结的句子为日文
# 3. 列出这个日文句子中所有出现的人名
# 4. 帮我输出一个json对象,sentence_ch键中放总结的中文句子,sentence_jp键中放总结的日文句子,name键中放所有的日文人名
#
# 注意事项
# 1. 将输出的json数据进行格式化,使用两个空格进行缩进
#
# 下面为输出格式
# 文本: <需要总结的文本>
# 总结的日语句子: <总结的中文句子>
# 翻译的日语句子: <翻译的日语句子>
# 人名: <翻译的日语句子中所有的人名>
# 输出的json: <我需要你帮我总结的json对象>
#
# 文本: """
# 小明和小红正在家里打游戏,忽然外面天色刷的一下变黑了,然后雷电交加。原来科学家老李他们的实验出了问题,一个黑洞出现了!小绿和小豆跑来告诉他们,外面周围物品都被吸进黑洞里消失了。
# 小明和小红赶紧冲出家门,受到强大的吸力拉扯,差点被吸进黑洞。他们艰难的向前移动寻找老李,同时有许多东西被吸入黑洞消失不见。
# 终于找到了老李和科研小组,他们说黑洞会不断扩大直到吞噬整个城市。小明提议用爆破来关闭黑洞,老李跟他分析现有条件不足,而小红想到了办法。
# 他们找到小狗,"如果我们能把一切能量全部注入黑洞,就能使其闭合"。小狗说,"没问题,但必须快"。
# 小明和小红怂恿周围市民各自捐出一点能量,连老人都慷慨解囊。最后他们融合所有能量注入黑洞,这时小狗运用自己的能力将剩余能量一口气灌注其中。黑洞开始收缩,最终"哧"的一声变成一朵鲜花。
# 大家围着花欢呼,城市才得以避免毁灭。小明他们则成为民族英雄。
# """
文本: 小明和小红正在家里打游戏,忽然外面天色刷的一下变黑了,然后雷电交加。原来科学家老李他们的实验出了问题,一个黑洞出现了!小绿和小豆跑来告诉他们,外面周围物品都被吸进黑洞里消失了。
小明和小红赶紧冲出家门,受到强大的吸力拉扯,差点被吸进黑洞。他们艰难的向前移动寻找老李,同时有许多东西被吸入黑洞消失不见。
终于找到了老李和科研小组,他们说黑洞会不断扩大直到吞噬整个城市。小明提议用爆破来关闭黑洞,老李跟他分析现有条件不足,而小红想到了办法。
他们找到小狗,"如果我们能把一切能量全部注入黑洞,就能使其闭合"。小狗说,"没问题,但必须快"。
小明和小红怂恿周围市民各自捐出一点能量,连老人都慷慨解囊。最后他们融合所有能量注入黑洞,这时小狗运用自己的能力将剩余能量一口气灌注其中。黑洞开始收缩,最终"哧"的一声变成一朵鲜花。
大家围着花欢呼,城市才得以避免毁灭。小明他们则成为民族英雄。
总结的中文句子: 小明和小红与科学家老李一起面对黑洞危机,他们找到办法并成功关闭黑洞,拯救了城市。
翻译的日语句子: 小明と小紅は科学者の老李と一緒にブラックホールの危機に立ち向かい、解決策を見つけてブラックホールを閉じることに成功し、都市を救いました。
人名: 小明、小红、老李
输出的json:
{
"sentence_ch": "小明和小红与科学家老李一起面对黑洞危机,他们找到办法并成功关闭黑洞,拯救了城市。",
"sentence_jp": "小明と小紅は科学者の老李と一緒にブラックホールの危機に立ち向かい、解決策を見つけてブラックホールを閉じることに成功し、都市を救いました。",
"name": [
"小明",
"小红",
"老李"
]
} - 在进行一个复杂任务的处理时,给够模型足够的思考流程,以避免像人类一样匆匆看一眼,以为对了
第一个prompt会提示对了,第二个prompt会提示不对
同样,prompt需要描述的更加精细才会得到更加准确的结果BASH1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79# 我需要你去判断这个学生的解决方案是否是正确的
#
# 问题如下
# 我正在建造一个太阳能发电装置,我需要帮助计算财务费用
# - 土地成本 100 美元/平方英尺
# - 我可以购买 250 美元/平方英尺的太阳能电池板
# - 我谈妥了一份维护合同,每年的维护费用统一为 10 万美元,每平方英尺另加 10 美元
# 根据平方英尺数,第一年运营的总成本是多少?
#
# 学生的解决方案:
# 设 x 为安装面积(平方英尺)。
# 成本:
# 1. 土地成本:100x
# 2. 太阳能电池板成本:250x
# 3. 维护成本:100,000 + 100x
# 总成本:100x + 250x + 100,000 + 100x = 450x + 100,000
学生的解决方案中计算总成本的公式是正确的
根据学生的解决方案,第一年运营的总成本为450x + 100,000美元,其中x为安装面积(平方英尺)。
# 你的任务是去判断学生的最终答案是否正确
# 要解决这个问题,你需要遵循如下的步骤
# 1. 你自己先根据问题来得到一个解决方案
# 2. 比较你的解决方案和学生的解决方案,评估学生的最终答案是否是正确的
#
# 注意事项
# 在你没有解决掉这个问题之前不要决定学生的最终答案是否是正确的
#
# 我将提供如下格式
# 问题:
# """
# 问题的内容
# """
# 学生的解决方案:
# """
# 学生的解决方案的内容
# """
# 实际的解决方案
# """
# 判断你提供的最终答案是否与学生的最终答案是否一致
# """
# 是 或 否
# """
# 学生的答案结果
# """
# 正确 或 错误
# """
#
# 问题
# """
# 我正在建造一个太阳能发电装置,我需要帮助计算财务费用
# - 土地成本 100 美元/平方英尺
# - 我可以购买 250 美元/平方英尺的太阳能电池板
# - 我谈妥了一份维护合同,每年的维护费用统一为 10 万美元,每平方英尺另加 10 美元
# 根据平方英尺数,第一年运营的总成本是多少?
# """
#
# 学生的解决方案:
# """
# 设 x 为安装面积(平方英尺)。
# 成本:
# 1. 土地成本:100x
# 2. 太阳能电池板成本:250x
# 3. 维护成本:100,000 + 100x
# 总成本:100x + 250x + 100,000 + 100x = 450x + 100,000
# """
实际的解决方案:
根据问题描述,第一年运营的总成本应包括土地成本、太阳能电池板成本和维护成本。根据给定的费用标准,可以计算出每个方面的成本,并将它们相加以得到总成本。
土地成本:100美元/平方英尺
太阳能电池板成本:250美元/平方英尺
维护成本:10万美元 + 10美元/平方英尺
将这些成本相加,得到的总成本为:
总成本 = 土地成本 + 太阳能电池板成本 + 维护成本
= 100x + 250x + (100,000 + 10x)
= 350x + 100,000
判断你提供的最终答案是否与学生的最终答案是否一致:
否
学生的答案结果:
错误
- 指出完成任务所需的步骤
- 其他小技巧
- 这里需要明确,面向不同的人群需要指定不同风格的prompt,例如 面向消费者 和 面向技术销售人员 ,prompt的细节就会有不同。
- 可以指定生成一个表格,标题是什么,第一列列头是什么,内容是什么,第二列又是什么。。然后指定格式化为HTML。
迭代提示开发
- 先有一个需求
- 编写Prompt
- 运行Prompt查看结果
- 分析结果,改进Prompt
本质上也和代码开发一样,先有了一个基础的功能,然后再在基础的功能上进行修饰。然而修饰什么,这个就需要长时间的积累了。例如输出更符合不同人群的答案,或者将结果输出为HTML直接进行展示。
常用方向-摘要
可以用于大量文本的总结,从而减少阅读时间
例如去总结大量的评论,当为质检部总结的时候,Prompt应该专注于质量方面的总结;当为价格部门总结的时候,应该专注于价格与价值方面的总结。
如果害怕信息丢失,那么可以只是提取信息而不总结它。
如果要进行很多文本的总结,可以使用 for 循环来实现。
总结出来的评论可以做一个 评论词云 ,点击进去可以查看详细评论
常用方向-推断
普通的机器学习,需要收集带情感标签的文本语段,然后进行训练,在服务器部署才可以使用。
但使用ChatGPT的API,则可以直接获取推断结果,以下为几个场景
- 对于用户的评论,我们可以通过Prompt来推断其情感倾向,来判断客户对于特定产品的感受,从而帮助产品进行改进。可以只让模型响应固定的几个词语(如 积极与消极),从而更加方便的对评论进行推断。
- 可以直接在Prompt中询问评论中是否表达了某种情感(如 愤怒)
- 可以在Prompt中要求列出评论者购买的商品以及其产品公司,未知信息使用 unknown,并分析客户对该产品的情感倾向,以json返回
- 可以推断大篇文字的主题
如下为一个可用的prompt,可以在一个prompt中加入多个需求,然后在一个json中返回即可。不必用多个prompt来获取结果。
1 | # 从评论文本中识别如下的项目 |
这个是对于主题的推测,可用于大型文章的主题提取
1 | # 确定以下文本中正在讨论的5个主题,文本由三个反引号分割 |
同样的,也可以确定文章中是否包含哪些主题
在机器学习中,这也叫做 零样本学习算法 ,因为没有提供任何带标签的训练数据
1 | # 确定下列主题列表中的每一个条目是否都是下列文章中的主题 |
常用方向-转换
将一段文本 转换为 另外一段文本 ,可用方向如下
- 翻译,洗稿,确定语言类型(中文还是日文),指定翻译风格,指定受众人群等。
- 拼写检查 和 语法纠正。
- 转换格式,如将 XML 转换为 JSON
- 语气转换,非正式 到 正式
常用方向-扩展
将 短文本(如 一组说明 或 主题列表) 通过大语言模型转换为 更长的文本(如 电子邮件 或 主题文章),可用方向如下
- 将 大语言模型 看做头脑风暴的伙伴
- 根据用户评论写邮件时,可以先根据评论提取用户的情感倾向,然后根据积极还是消极来在Prompt指定不同的回复内容,然后再生成邮件。
- 改变模型参数中的 temperature ,用于指定回复的随机性。
- 如果指定了一句话 我最喜欢吃 ,而模型推断出接下来的单词 53% 为 包子, 30% 为 面条, 5% 为 朝鲜冷面。
- temperature 为 0 ,那么模型始终选择最有可能的一个词,那么就一定是 包子
- temperature 为 0.3 ,那么模型选择下一个词的时候,可能为 包子,也可能是 面条。
- temperature 为 0.7 ,那么模型选择下一个词的时候,既可能是 包子,也可能是 面条, 也有可能是 朝鲜冷面。
- 如果要求任务生成的结果具有可靠性和可预测性,那么 temperature 最好设置为 0
- 如果要求任务生成的结果更具有创造性,更随机,那么 temperature 可以大一些
- 在 temperature 设置为0的情况下,ChatGPT模型仍然具有一定的随机性。这是因为模型的初始状态和上下文对输出的影响,以及模型内部的微小变化等因素。因此,虽然生成的输出可能会在某种程度上保持一致,但仍可能存在轻微的变化或差异。
API的使用
消息当中不同角色的作用
1 | system: 提供了整体指导方针,用于设置助手的行为和人设 |
有趣的点
- 通过Prompt生成HTML然后直接返回给用户一个可查看的链接
一些特殊词语
- 监督学习
- 本文标题:chatgpt相关prompt课程学习
- 创建时间:2024-01-04 17:04:26
- 本文链接:https://blog.212490197.xyz/article/tools/chatgpt/prompt-course/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!