1
00:00:00,160 --> 00:00:01,640
现在我们又回到了光标处。

2
00:00:01,680 --> 00:00:03,240
我们即将进入第五周。

3
00:00:03,480 --> 00:00:05,040
我们要去第三天了。

4
00:00:05,080 --> 00:00:06,760
欢迎来到第三天。

5
00:00:06,800 --> 00:00:11,160
我们正在构建我们的专家问答系统以确保 Elm。

6
00:00:11,400 --> 00:00:18,520
这将是使用我们创建的向量存储的 Rag 管道的长链一零实现

7
00:00:18,520 --> 00:00:18,920
上次。

8
00:00:18,920 --> 00:00:24,680
现在，您可能还记得上次我们制作矢量存储时，我们首先使用了 Huggingface 的编码器，

9
00:00:24,680 --> 00:00:26,560
全迷你 Ml6 v2。

10
00:00:27,040 --> 00:00:31,120
然后我们回去用几个更好的 OpenAI 模型再次做了一遍。

11
00:00:31,400 --> 00:00:35,880
好吧，实际上我只是回去用原始模型重新运行它，因为我不知道哪个

12
00:00:35,880 --> 00:00:37,360
您最终将使用的一个。

13
00:00:37,360 --> 00:00:40,640
万一你坚持使用原来的、较弱的，那就是这样。

14
00:00:40,640 --> 00:00:42,120
这就是我现在运行的。

15
00:00:42,280 --> 00:00:42,760
你可以选择。

16
00:00:42,760 --> 00:00:46,760
如果您愿意，您可以返回并执行该操作，或者坚持您所做的事情。

17
00:00:47,080 --> 00:00:47,600
好的。

18
00:00:47,600 --> 00:00:49,960
让我们从一些进口开始。

19
00:00:50,040 --> 00:00:52,480
所以这里有很多长链进口。

20
00:00:52,480 --> 00:00:54,120
这些都是有趣的。

21
00:00:54,120 --> 00:00:59,440
所以这第一个是从郎链OpenAI导入聊天OpenAI。

22
00:00:59,760 --> 00:01:03,020
这就是我提到的 LM 抽象。

23
00:01:03,060 --> 00:01:03,460
聊天。

24
00:01:03,460 --> 00:01:07,660
OpenAI 是您可以创建的 llms 之一。

25
00:01:07,700 --> 00:01:12,460
它将响应来自 Cromer import Cromer 的调用。

26
00:01:12,460 --> 00:01:14,180
上次我们有过这样的抽象。

27
00:01:14,380 --> 00:01:18,780
呃，这与我们要处理的一些、一些、一些消息有关。

28
00:01:18,780 --> 00:01:22,580
这些是我们已经研究过的嵌入模型。

29
00:01:22,900 --> 00:01:23,860
我就提一下。

30
00:01:23,980 --> 00:01:24,980
所以我将运行这些导入。

31
00:01:24,980 --> 00:01:25,620
他们就在那里。

32
00:01:26,060 --> 00:01:28,580
嗯，所以，呃，需要几秒钟。

33
00:01:28,580 --> 00:01:29,580
有很多东西要进口。

34
00:01:29,740 --> 00:01:34,140
呃，所以，所以在这里向您展示，我们有 OpenAI 导入聊天。

35
00:01:34,140 --> 00:01:34,740
开放人工智能。

36
00:01:34,980 --> 00:01:37,340
您也可以从 Lang Chain 购买。

37
00:01:39,060 --> 00:01:47,660
呃，llama 导入 llama 我把 Lang chain 拼错了，不过还是填了。

38
00:01:47,900 --> 00:01:57,140
呃，我可以说 from lang chain underscore anthropic import chat anthropic。

39
00:01:57,420 --> 00:02:05,120
呃，如果你这样做，你可以简单地将聊天 OpenAI 替换为 Chat llama 或 Chat Anthropic，它就会

40
00:02:05,120 --> 00:02:11,320
只是工作，这确实是长链的承诺，这些抽象是非常可交换的。

41
00:02:11,320 --> 00:02:16,680
它们都会响应调用，这使您可以很容易地操纵事物，类似于

42
00:02:16,680 --> 00:02:21,240
像轻量级LM这样的抽象方式可以做到这一点，但是对于长链来说，它是更重量级的。

43
00:02:21,240 --> 00:02:25,920
这是一个完全不同的包，您必须安装和导入。

44
00:02:26,200 --> 00:02:26,760
好的。

45
00:02:26,800 --> 00:02:27,920
所以我会把它拿出来。

46
00:02:28,080 --> 00:02:29,480
呃，希望你能明白。

47
00:02:29,480 --> 00:02:35,800
现在我们要设置一些常量，然后我们就可以开始使用我们的抹布了。

48
00:02:35,840 --> 00:02:43,160
现在，首先我们将创建嵌入对象，即 all mini lm l6 v2 对象。

49
00:02:43,360 --> 00:02:47,560
我们还将使用嵌入对象连接到 Cromer。

50
00:02:47,560 --> 00:02:50,800
你可以看到，正如我所说，我正在使用这个拥抱脸开源工具。

51
00:02:50,800 --> 00:02:56,840
因此，如果您仍在使用 OpenAI 嵌入，则需要确保使用 OpenAI 嵌入对象

52
00:02:56,840 --> 00:02:59,240
在这里，导入它，然后在这里使用它。

53
00:02:59,520 --> 00:03:02,220
呃，不然如果你想用这个，那就用吧。

54
00:03:02,260 --> 00:03:04,860
您可能必须返回并重新创建数据库。

55
00:03:05,060 --> 00:03:10,460
使用相同的一致向量非常重要，因为如果数据库中有向量

56
00:03:10,460 --> 00:03:17,500
这是 OpenAI 3000 维度向量，现在我们在这里使用这个，当我们

57
00:03:17,540 --> 00:03:18,700
提出一个查询。

58
00:03:18,740 --> 00:03:19,980
我们提出我们的问题。

59
00:03:19,980 --> 00:03:21,380
我们把它变成一个向量。

60
00:03:21,620 --> 00:03:25,260
如果它们是不同的型号，那么麻烦就会随之而来。

61
00:03:25,300 --> 00:03:29,380
您将从拥抱的脸创建这样的 300 维向量。

62
00:03:29,660 --> 00:03:35,300
您将尝试将其与 3000 个维度的向量（完全不同的向量）进行比较。

63
00:03:35,300 --> 00:03:38,020
您还记得他们在图像中的样子有多么不同。

64
00:03:38,060 --> 00:03:40,860
与您的矢量数据存储完全不同。

65
00:03:41,140 --> 00:03:42,420
并且会出现错误。

66
00:03:42,420 --> 00:03:46,300
由于尺寸不匹配，将会出现令人讨厌的、丑陋的堆栈跟踪。

67
00:03:46,300 --> 00:03:48,540
你会回来问我，艾德，发生了什么事？

68
00:03:48,540 --> 00:03:51,980
我想说的是，你有不同的矢量模型，所以不要这样做。

69
00:03:52,140 --> 00:03:53,860
呃，确保它们是一致的。

70
00:03:54,020 --> 00:03:55,340
那么让我们运行一下吧。

71
00:03:55,340 --> 00:03:57,820
现在我们将创建嵌入。

72
00:03:57,820 --> 00:04:02,320
我们已将数据存储加载到同一目录中。

73
00:04:02,320 --> 00:04:04,480
该目录是矢量db。

74
00:04:04,600 --> 00:04:05,960
你可以在那里看到它。

75
00:04:05,960 --> 00:04:07,000
我们已经把它加载进去了。

76
00:04:07,000 --> 00:04:10,800
我们还告诉了它我们正在使用的嵌入模型。

77
00:04:11,120 --> 00:04:11,760
好的。

78
00:04:12,000 --> 00:04:19,880
现在我们要创建两个大的长链对象：LM 和检索器。

79
00:04:19,920 --> 00:04:21,000
他们俩都在那里。

80
00:04:21,080 --> 00:04:22,200
让我们来创建它们。

81
00:04:22,200 --> 00:04:28,440
所以你可以看到我通过向量存储（色度向量存储点）创建了检索器对象

82
00:04:28,680 --> 00:04:29,920
作为猎犬。

83
00:04:29,920 --> 00:04:35,880
这只是将其打包到一个检索器对象中，我们可以在该对象上调用点调用。

84
00:04:35,880 --> 00:04:37,920
它会进行抹布查找。

85
00:04:37,920 --> 00:04:42,560
如此简单，与聊天与聊天开放人工智能。

86
00:04:42,560 --> 00:04:44,440
我们所要做的就是像这样创建它。

87
00:04:44,480 --> 00:04:50,280
我们传递模型名称，我也传递一个叫做温度的东西，这使得

88
00:04:50,280 --> 00:04:50,800
LM。

89
00:04:51,080 --> 00:04:52,760
那么这个温度是多少呢？

90
00:04:52,760 --> 00:04:55,880
我认为这个问题时常会出现，但我不确定我是否正确地解释过它。

91
00:04:55,880 --> 00:04:59,240
现在让我花一分钟时间了解一下温度。

92
00:04:59,640 --> 00:05:04,820
所以温度这个词你可能已经听说过很多次了，因为所有的 LMS 都采用

93
00:05:04,860 --> 00:05:12,580
温度作为输入，它控制输出的变化量

94
00:05:12,580 --> 00:05:14,020
来自模型。

95
00:05:14,060 --> 00:05:18,660
它是一个参数，控制每次调用它时它的不同程度。

96
00:05:18,700 --> 00:05:24,580
零温度意味着它应该是可预测的、确定性的、更高的温度

97
00:05:24,580 --> 00:05:29,820
意味着答案应该有更多的多样性、更多的风味、更多的差异。

98
00:05:29,860 --> 00:05:31,100
每次你打电话的时候。

99
00:05:31,460 --> 00:05:37,380
现在有人形容这就是创造力，更高的温度才能产出更多的创意。

100
00:05:37,540 --> 00:05:38,940
我认为这不太正确。

101
00:05:39,140 --> 00:05:41,980
这并没有错，但我认为这有点误导。

102
00:05:41,980 --> 00:05:45,180
所以我宁愿澄清一下，以便您能清楚地了解。

103
00:05:45,540 --> 00:05:47,260
那么它实际上在做什么呢？

104
00:05:47,460 --> 00:05:53,820
嗯，它实际上是在推理时控制，当你逐个生成每个令牌时，它是

105
00:05:53,820 --> 00:05:57,380
与你如何选择下一个令牌有关。

106
00:05:57,660 --> 00:06:04,770
模型，LM 实际上不会吐出下一个令牌，我想你知道，它实际上吐出什么

107
00:06:04,770 --> 00:06:08,450
out 是所有可能的下一个标记的概率。

108
00:06:08,450 --> 00:06:12,930
每个可能的下一个单词都有一定的概率，即使概率非常小。

109
00:06:12,930 --> 00:06:14,050
但一切都会有所收获。

110
00:06:14,250 --> 00:06:20,210
呃，通常当我松散地说时，我们会在我所指的内容时选择下一个标记

111
00:06:20,250 --> 00:06:25,610
是你总是可以选择概率最高的令牌，即

112
00:06:25,610 --> 00:06:28,730
模型说的是最有可能的下一个标记。

113
00:06:29,010 --> 00:06:35,930
在温度为零的情况下，你所要做的就是选择概率最高的标记，

114
00:06:35,930 --> 00:06:38,410
你每次都会选择那个和那个。

115
00:06:38,410 --> 00:06:40,570
这就是所谓的零温度。

116
00:06:40,610 --> 00:06:46,050
最可预测、最可靠、最确定的输出。

117
00:06:46,490 --> 00:06:53,930
较高的温度意味着你偶尔会选择那些没有获得最高概率的代币，

118
00:06:53,930 --> 00:06:56,450
但也许得到了第二顶或类似的东西。

119
00:06:56,450 --> 00:07:02,610
事实上，在 OpenAI 的情况下，温度从 0 到 2 变化，温度为 1

120
00:07:02,990 --> 00:07:11,550
意味着如果给定一个令牌的概率为 10%，那么您实际选择的概率为 110%

121
00:07:11,630 --> 00:07:15,870
根据获得的概率对接下来出现的标记进行采样。

122
00:07:15,990 --> 00:07:19,830
所以如果一个代币有 1% 的概率，那它真的不太可能。

123
00:07:19,870 --> 00:07:21,830
仍然是百分之一。

124
00:07:21,830 --> 00:07:24,670
如果温度为 1，您可能会选择那个。

125
00:07:24,830 --> 00:07:27,750
因此，产品的种类更加丰富。

126
00:07:27,750 --> 00:07:32,230
事实上，这可能意味着它更具创造性，但不一定。

127
00:07:32,270 --> 00:07:38,110
这实际上只是意味着单词选择会有所不同，有时如果

128
00:07:38,110 --> 00:07:39,270
温度足够高。

129
00:07:39,310 --> 00:07:42,510
事实上，当温度达到两度时，你会得到相当奇怪的答案。

130
00:07:42,590 --> 00:07:45,990
这就是温度的含义及其控制的意义。

131
00:07:46,030 --> 00:07:47,870
并为此添加两个注释。

132
00:07:48,190 --> 00:07:52,430
其中之一是，呃，我使用了诸如确定性和可再现之类的词。

133
00:07:52,430 --> 00:07:56,870
这也不太正确，因为即使温度为零，输出也不一定

134
00:07:56,870 --> 00:07:57,590
是可重复的。

135
00:07:57,630 --> 00:07:59,790
因为有就有，有随机。

136
00:07:59,830 --> 00:08:02,390
运行 llms 涉及随机数。

137
00:08:02,510 --> 00:08:07,250
您可以执行称为设置随机种子的操作，这意味着随机数将是

138
00:08:07,250 --> 00:08:08,050
每次都一样。

139
00:08:08,050 --> 00:08:10,930
事实上，我们将在第 6 周到第 8 周内做到这一点。

140
00:08:10,930 --> 00:08:14,850
当您进行测试并试图确保您确实做到了这一点时，这一点尤其重要

141
00:08:14,890 --> 00:08:16,530
每次都得到相同的答案。

142
00:08:16,650 --> 00:08:19,730
因此，我们稍后将设置随机种子，您将会看到这一点。

143
00:08:19,730 --> 00:08:24,370
即使您设置了随机种子，仍然不能保证每次都相同。

144
00:08:24,370 --> 00:08:29,050
因为实验室的前沿模型发生了变化，所以他们改变了模型。

145
00:08:29,050 --> 00:08:34,250
而且因为性能优化意味着大量计算是并行发生的

146
00:08:34,250 --> 00:08:38,810
以一种无法总是保证的方式，同样的事情会以完全相同的方式出现。

147
00:08:38,930 --> 00:08:43,370
因此，没有什么能够完全保证可重现。

148
00:08:43,370 --> 00:08:47,930
但是如果你的温度为零并且你做了这件事称为设置随机种子，那么你就是

149
00:08:47,930 --> 00:08:50,370
很可能每次都会得到相同的答案。

150
00:08:50,370 --> 00:08:53,010
我们将在课程稍后进行。

151
00:08:53,010 --> 00:08:57,530
但现在，我们将温度设置为零，这对于 Rag 系统来说很常见，因为您

152
00:08:57,530 --> 00:09:04,310
确实希望在可靠性方面有更强有力的保证，但通常也会看到温度

153
00:09:04,310 --> 00:09:07,150
0.5 0.7 左右也是如此。

154
00:09:07,590 --> 00:09:12,030
我提到温度与创造力并不相同。

155
00:09:12,270 --> 00:09:18,470
如果您正在寻找您的模型更具创意并具有更高的创造力，那么正确的方法就是

156
00:09:18,470 --> 00:09:20,590
也就是通过系统提示。

157
00:09:20,630 --> 00:09:24,190
正确的方法是指导模型发挥创造力。

158
00:09:24,230 --> 00:09:27,510
举例说明创造力对您意味着什么。

159
00:09:27,710 --> 00:09:29,790
这就是创造力的意义所在。

160
00:09:29,830 --> 00:09:35,870
如果你想让它给出不同的答案，最好的方法就是告诉它之前的答案

161
00:09:35,870 --> 00:09:39,030
它说，我现在想要一些不同的东西。

162
00:09:39,030 --> 00:09:41,070
这是最可靠的方法。

163
00:09:41,070 --> 00:09:45,950
您可以使用温度来进行此类操作，但根据我的经验，它并不那么可靠。

164
00:09:45,990 --> 00:09:51,590
如果您想从模型中获得特定行为，最好专注于提示。

165
00:09:51,870 --> 00:09:56,190
好的，这是一个侧边栏，但我认为这是一个非常重要的侧边栏，所以我很高兴我们做到了。

166
00:09:56,190 --> 00:09:57,270
让我们继续努力吧。

167
00:09:57,270 --> 00:10:04,390
现在，随着创建两个抽象（检索器和 LM）的重要一步，我运行了它，它是

168
00:10:04,390 --> 00:10:04,910
完毕。