1
00:00:00,120 --> 00:00:00,520
好的。

2
00:00:00,560 --> 00:00:04,360
所以在这里我们正在研究节点的创建。

3
00:00:04,760 --> 00:00:06,840
请记住，节点是一个函数。

4
00:00:06,840 --> 00:00:08,440
所以我们要创建一个函数。

5
00:00:08,440 --> 00:00:10,200
它被称为我们的第一个节点。

6
00:00:10,600 --> 00:00:14,440
它接受一个旧状态并返回一个新状态。

7
00:00:14,760 --> 00:00:16,640
正如我们所说，它的状态是不可变的。

8
00:00:16,680 --> 00:00:18,720
所以我们不会做任何事情。

9
00:00:18,720 --> 00:00:20,520
我们不会来改变旧状态。

10
00:00:20,560 --> 00:00:23,920
事实上，你可能会从这里变灰的方式看到我们实际上并没有触及旧状态，

11
00:00:23,920 --> 00:00:26,560
这很不寻常，但仅针对此示例。

12
00:00:26,800 --> 00:00:28,120
那么我们实际上要做什么呢？

13
00:00:28,160 --> 00:00:30,160
所以我们要创建一个名为reply 的字符串。

14
00:00:30,440 --> 00:00:35,240
该回复将是名词的一些随机单词选择。

15
00:00:35,520 --> 00:00:38,480
然后是单词 r，然后是随机选择的形容词。

16
00:00:38,960 --> 00:00:45,640
我们将创建其中一种消息结构和 OpenAI 熟悉的消息结构

17
00:00:45,800 --> 00:00:47,360
并将其放入消息中。

18
00:00:47,920 --> 00:00:53,640
我们会说新状态是 R 的另一个新状态类。

19
00:00:53,640 --> 00:00:56,800
我们将实例化它并传递此消息。

20
00:00:57,000 --> 00:00:59,680
我们将返回新状态。

21
00:00:59,680 --> 00:01:02,320
这就是我们第一个节点的结束。

22
00:01:02,400 --> 00:01:05,330
然后我们调用图点添加节点。

23
00:01:05,330 --> 00:01:08,650
这就是我们正式将其添加到正在构建的图表中的方式。

24
00:01:08,690 --> 00:01:14,850
我们给它一个名字，我们称之为第一个节点，然后我们将代表该节点的函数传入该函数。

25
00:01:14,850 --> 00:01:17,170
节点称为我们的第一个节点。

26
00:01:17,610 --> 00:01:17,930
好的。

27
00:01:17,970 --> 00:01:19,490
所以我们将运行该单元。

28
00:01:19,490 --> 00:01:22,890
现在我们开始考虑创造我们的优势。

29
00:01:23,250 --> 00:01:28,930
所以你可以在这里看到，我现在调用图形生成器添加边缘来添加几个边缘。

30
00:01:28,930 --> 00:01:32,330
你会看到这些词从那里开始和结束。

31
00:01:32,410 --> 00:01:33,250
那么它们是什么。

32
00:01:33,290 --> 00:01:37,330
这些是我们从图表顶部导入的内容。

33
00:01:37,370 --> 00:01:39,490
它们是常量的开始和结束。

34
00:01:39,490 --> 00:01:43,050
当然，它们标志着我们工作流程的开始和结束。

35
00:01:43,090 --> 00:01:49,650
因此，我们在这里所说的是，我们想要一条边将我们从起点带到第一个节点。

36
00:01:49,650 --> 00:01:53,610
然后我们想要另一条边从第一个节点到末尾。

37
00:01:54,050 --> 00:01:55,970
好吧，这听起来很合乎逻辑不是吗？

38
00:01:56,010 --> 00:01:57,210
所以我们会运行它。

39
00:01:57,410 --> 00:02:02,090
现在我们进入第五步，您会记得编译图表。

40
00:02:02,130 --> 00:02:03,210
它说我们已经完成了。

41
00:02:03,210 --> 00:02:04,730
这是我们的工作流程。

42
00:02:04,930 --> 00:02:06,530
现在我们可以显示它了。

43
00:02:06,570 --> 00:02:10,500
这是一种很好的快速方式来直观地展示我们正在讨论的内容。

44
00:02:10,500 --> 00:02:11,900
希望这不会让人感到意外。

45
00:02:11,900 --> 00:02:16,140
我们已经开始进入我们的第一个节点，进入我们的终点。

46
00:02:16,540 --> 00:02:17,660
还有什么可以更容易呢？

47
00:02:17,900 --> 00:02:18,580
太可爱了。

48
00:02:18,620 --> 00:02:25,460
好的，我们已经完成了五个步骤，这当然是运行图表的第一部分

49
00:02:25,460 --> 00:02:26,060
系统。

50
00:02:26,060 --> 00:02:31,300
我们已经编译了图表，并通过添加节点和边来完成它。

51
00:02:31,300 --> 00:02:33,420
现在是时候运行它了。

52
00:02:33,580 --> 00:02:34,140
好的。

53
00:02:34,180 --> 00:02:36,060
我们要做的就是运行它。

54
00:02:36,100 --> 00:02:39,540
我们将创建一个渐变聊天功能。

55
00:02:39,660 --> 00:02:40,420
为什么不呢。

56
00:02:40,540 --> 00:02:48,060
请记住，gradio 聊天功能会获取用户的当前输入和先前输入的历史记录，并且它是

57
00:02:48,060 --> 00:02:51,300
意味着用下一个输出进行响应。

58
00:02:51,300 --> 00:02:56,260
这正是我们将传递到渐变聊天界面的渐变聊天功能所做的事情

59
00:02:56,260 --> 00:02:57,020
就在那里。

60
00:02:57,220 --> 00:02:58,100
这就是我们必须要做的。

61
00:02:58,100 --> 00:02:58,940
那么我们想做什么。

62
00:02:58,940 --> 00:03:06,780
好吧，我们将把消息转换成标准的 OpenAI 格式，并将其放入消息中。

63
00:03:07,140 --> 00:03:11,710
然后我们将用它创建一个状态对象作为消息。

64
00:03:12,270 --> 00:03:14,950
然后我们将调用我们的图表。

65
00:03:15,110 --> 00:03:17,870
这是关键的长链词调用。

66
00:03:18,030 --> 00:03:18,790
你可能很熟悉。

67
00:03:18,830 --> 00:03:20,430
抱歉我说的是长链。

68
00:03:20,430 --> 00:03:22,310
这是图形词调用。

69
00:03:22,310 --> 00:03:25,590
但你可能对它很熟悉，因为它也是长链中的单词。

70
00:03:26,150 --> 00:03:32,470
因此，您可以使用状态来调用陆地图中的图形以获得结果。

71
00:03:32,710 --> 00:03:35,510
这就是我们的图表的执行过程。

72
00:03:35,510 --> 00:03:37,950
将会出现什么结果。

73
00:03:37,950 --> 00:03:41,390
我们将打印它，我们也会将其退回。

74
00:03:41,630 --> 00:03:45,430
这将来自我们的聊天功能。

75
00:03:45,590 --> 00:03:49,310
因此，让我们运行它，看看会发生什么。

76
00:03:49,870 --> 00:03:51,150
好吧，我们有一个更好的用户界面。

77
00:03:51,190 --> 00:03:51,790
那挺好的。

78
00:03:51,790 --> 00:03:53,070
我们在那里打个招呼吧。

79
00:03:55,590 --> 00:03:57,070
松饼闹鬼。

80
00:03:58,750 --> 00:04:00,390
是这样吗？

81
00:04:02,430 --> 00:04:04,390
企鹅是闪闪发光的。

82
00:04:05,470 --> 00:04:09,710
你不会说企鹅是无耻的。

83
00:04:11,110 --> 00:04:11,750
真正的。

84
00:04:13,830 --> 00:04:16,520
泡菜是不可信的。

85
00:04:17,640 --> 00:04:18,400
哈哈哈。

86
00:04:18,880 --> 00:04:19,800
你明白了。

87
00:04:20,160 --> 00:04:27,400
呃，所以，呃，这是我们的小语言模型的结果，它随机选择名词和形容词。

88
00:04:27,400 --> 00:04:28,640
我向你展示这个。

89
00:04:28,760 --> 00:04:30,680
如果你想知道你到底在做什么？

90
00:04:30,800 --> 00:04:36,480
我这样做是为了表明图形设置与 Llms 无关。

91
00:04:36,600 --> 00:04:42,080
节点只是一个函数，在本例中是一个愚蠢的函数，但它是一个函数，并且它需要

92
00:04:42,080 --> 00:04:46,320
处于一个状态并且它返回一个状态，并且它不需要与 llms 有任何关系。

93
00:04:46,560 --> 00:04:50,200
现在在这里，我正在打印结果。

94
00:04:50,240 --> 00:04:52,480
让我向您展示该打印声明。

95
00:04:52,720 --> 00:04:57,640
呃，我们正在打印在图表上调用调用返回的内容。

96
00:04:57,960 --> 00:05:02,560
我想指出的是，这可能与您的期望有所不同，因为

97
00:05:02,560 --> 00:05:07,320
这不是只有字符串列表的消息。

98
00:05:07,480 --> 00:05:13,040
它有一个称为人类信息的列表，您可能会从郎连锁工作中了解到。

99
00:05:13,040 --> 00:05:16,680
它就像一个，它是一个将东西打包的构造。

100
00:05:16,680 --> 00:05:20,010
而这当然是reducer运行的结果。

101
00:05:20,010 --> 00:05:24,450
当我之前说过减速器只是将事物连接成一个列表时，我并没有告诉

102
00:05:24,450 --> 00:05:29,490
完整的故事，因为它还对 Landgraf 附带的一些包装进行了处理。

103
00:05:29,490 --> 00:05:34,890
因此，如果它只获取返回的文本，它就知道如何将其打包成人类消息。

104
00:05:34,890 --> 00:05:41,090
就我所说的事情以及松饼或闹鬼和企鹅方面的人工智能信息而言

105
00:05:41,090 --> 00:05:43,370
是闪闪发光的等等。

106
00:05:43,530 --> 00:05:49,810
这就是 Landgraf 在幕后发生的一些事情，

107
00:05:50,210 --> 00:05:51,730
这对我们来说并不重要。

108
00:05:51,770 --> 00:05:53,290
我们正在利用这一点。

109
00:05:53,290 --> 00:05:57,130
但我们只是写了一个简单的、超级简单的状态。

110
00:05:57,370 --> 00:06:00,570
呃，超级简单的节点。

111
00:06:00,570 --> 00:06:02,810
我们创建了一个包含消息的状态。

112
00:06:03,010 --> 00:06:09,530
我们创建了一个处于旧状态的节点，我们返回一个使用这个随机句子的新状态，

113
00:06:09,730 --> 00:06:10,850
它有效。

114
00:06:10,850 --> 00:06:17,650
我们可以调用我们的图表并获得响应，并且我们可以进行一场相当片面的对话

115
00:06:17,650 --> 00:06:19,810
用一个愚蠢的语言模型。

116
00:06:20,570 --> 00:06:22,530
好吧，我们做点更明智的事情吧。