1
00:00:00,440 --> 00:00:04,520
现在我们回到光标处，我已经折叠了所有文件夹。

2
00:00:04,520 --> 00:00:09,880
但我将返回到基础文件夹并进行实验三。

3
00:00:10,360 --> 00:00:11,960
第一周的第三个实验室。

4
00:00:11,960 --> 00:00:13,800
第四天，这就是我们所处的位置。

5
00:00:14,440 --> 00:00:17,840
这就是事情变得有趣的地方。

6
00:00:18,400 --> 00:00:27,520
所以我在 Foundations 中有一个名为 me in 的目录，并且在我的内部放置了一些文件。

7
00:00:27,520 --> 00:00:29,400
其中之一就是LinkedIn。

8
00:00:30,840 --> 00:00:37,080
LinkedIn 是呃，我明白了，我不认为我可以在这里打开它。

9
00:00:37,080 --> 00:00:39,600
我想这不喜欢 PDF 格式。

10
00:00:39,600 --> 00:00:40,080
没有。

11
00:00:40,400 --> 00:00:42,960
所以你必须相信我的话。

12
00:00:43,000 --> 00:00:48,640
这是我的 LinkedIn 个人资料的 PDF 版本。

13
00:00:48,640 --> 00:00:50,240
您可以从 LinkedIn 内获取该信息。

14
00:00:50,240 --> 00:00:56,320
您可以进入 LinkedIn，然后单击点点省略号菜单之一并下载您的

15
00:00:56,320 --> 00:00:57,400
简介为 PDF。

16
00:00:57,400 --> 00:00:58,480
这就是我所做的。

17
00:00:58,560 --> 00:01:01,050
我已将其作为 LinkedIn PDF 放在这里。

18
00:01:01,570 --> 00:01:06,370
我还有一个摘要文本，称为摘要 txt。

19
00:01:06,610 --> 00:01:09,250
这只是关于我的两句话。

20
00:01:09,410 --> 00:01:11,690
这两件事就在我身上。

21
00:01:11,850 --> 00:01:17,010
当您进行本实验时，您要做的就是用有关您的信息替换这些文档。

22
00:01:17,050 --> 00:01:22,690
LinkedIn 应该是您的 LinkedIn PDF 个人资料或简历的 PDF 或类似内容。

23
00:01:22,770 --> 00:01:27,690
摘要包含一些关于您的信息，并包括一些额外的有趣的内容。

24
00:01:27,730 --> 00:01:35,170
关于你的一个有趣的事实，你希望人们了解你的一些事情，一切都会变得

25
00:01:35,170 --> 00:01:35,530
清除。

26
00:01:35,570 --> 00:01:38,050
别担心，如果没有您的控制，它不会去任何地方。

27
00:01:38,050 --> 00:01:40,890
但这有望很快变得清晰。

28
00:01:41,450 --> 00:01:42,210
好的。

29
00:01:42,370 --> 00:01:44,170
所以如果我们回到实验室。

30
00:01:44,530 --> 00:01:47,610
正如我所说，我们目前还不会实际使用工具。

31
00:01:47,650 --> 00:01:48,890
尽管我们一直在谈论它们。

32
00:01:48,930 --> 00:01:50,170
工具明天就会来。

33
00:01:50,210 --> 00:01:52,290
我们要打好基础。

34
00:01:52,810 --> 00:01:53,330
好的。

35
00:01:53,610 --> 00:01:59,340
所以我现在要导入一些你熟悉的包，但要睁大眼睛，你知道。

36
00:01:59,380 --> 00:02:06,580
好吧，但是 PDF pypdf2 和 gradio 你可能不知道 gradio 我以前的学生会很了解，因为

37
00:02:06,620 --> 00:02:08,540
你知道我是超级的。

38
00:02:08,540 --> 00:02:12,020
我喜欢 Gradio，我对这个平台充满热情。

39
00:02:12,020 --> 00:02:17,700
我是一个糟糕的前端工程师，而 gradio 可以创造出漂亮的前端。

40
00:02:17,740 --> 00:02:19,660
即使对于像我这样可怕的人来说也是如此。

41
00:02:19,700 --> 00:02:20,660
真的很棒。

42
00:02:20,660 --> 00:02:24,900
这确实是一种非常轻松地构建数据科学用户界面的方法。

43
00:02:24,940 --> 00:02:27,620
我们会这样做，但我不会详细介绍它。

44
00:02:28,180 --> 00:02:34,420
Pypdf2 是一个用于解析 PDF 文件的流行库的示例，如果您想了解更多信息

45
00:02:34,420 --> 00:02:40,140
如果您愿意的话，您可以简单地要求 ChatGPT 为您写一份关于它们的快速指南。

46
00:02:40,180 --> 00:02:45,940
要获得合适的流行资源来做某事，您可以询问 Claude 或 ChatGPT。

47
00:02:46,260 --> 00:02:46,940
如果你想。

48
00:02:46,940 --> 00:02:47,620
你可以，你可以。

49
00:02:47,660 --> 00:02:50,500
它们的实际来源称为 PyPI。

50
00:02:50,700 --> 00:02:52,980
这是包索引。

51
00:02:52,980 --> 00:02:56,300
这是开源 Python 包所在的地方。

52
00:02:56,300 --> 00:03:01,590
你可以去那里搜索不同的包，查看他们的 GitHub 存储库并了解更多信息

53
00:03:01,590 --> 00:03:03,270
关于他们也是这样。

54
00:03:03,590 --> 00:03:03,950
好的。

55
00:03:03,950 --> 00:03:06,470
但我要导入这些。

56
00:03:06,790 --> 00:03:09,670
顺便说一下，我已经在右上角设置了。

57
00:03:09,670 --> 00:03:14,230
我呃，确保我的虚拟环境已设置。

58
00:03:14,870 --> 00:03:16,430
那里需要一些时间。

59
00:03:16,430 --> 00:03:22,950
我猜这是一个需要加载一堆东西的渐变，并且完成所有操作需要 14 秒

60
00:03:22,990 --> 00:03:23,870
这些进口。

61
00:03:23,910 --> 00:03:25,190
我猜发生了很多事情。

62
00:03:25,470 --> 00:03:25,910
好的。

63
00:03:25,910 --> 00:03:31,790
现在我们加载环境并初始化 OpenAI 客户端库。

64
00:03:32,190 --> 00:03:32,950
所以看看这个。

65
00:03:32,950 --> 00:03:40,230
现在，我只需创建一个 PDF 阅读器，然后将其指向我的 LinkedIn PDF。

66
00:03:40,590 --> 00:03:44,310
我在调用页面提取文本的页面中阅读。

67
00:03:44,310 --> 00:03:46,710
我只是把它们放在一起。

68
00:03:46,990 --> 00:03:48,870
就这么简单。

69
00:03:48,870 --> 00:03:55,590
现在这个 LinkedIn 变量，让我们打印该 LinkedIn 变量，这样我们就可以看到它打印

70
00:03:55,720 --> 00:04:01,840
LinkedIn，你会看到一大堆关于我的信息，并且输出被截断。

71
00:04:01,840 --> 00:04:03,200
所以你只看到了我的一小部分。

72
00:04:03,200 --> 00:04:06,240
但是，还有比您需要知道的更多的事情。

73
00:04:06,240 --> 00:04:09,680
但既然您肯定已经在 LinkedIn 上与我联系，那么您已经知道这一切了。

74
00:04:10,000 --> 00:04:16,400
嗯，那么，呃，我要在这里加载关于我的摘要文本。

75
00:04:16,600 --> 00:04:20,720
有时，如果您不是 PC 用户，则需要这样做。

76
00:04:20,720 --> 00:04:23,240
是的，我相信您对此很熟悉，但指南中对此进行了介绍。

77
00:04:23,240 --> 00:04:25,480
然后我将一个名为 name 的变量设置为我的名字。

78
00:04:25,480 --> 00:04:27,120
你应该将其设置为你的名字。

79
00:04:27,680 --> 00:04:28,480
好的。

80
00:04:28,520 --> 00:04:32,760
现在我们之前没有讨论的一件事是系统提示和用户提示。

81
00:04:32,760 --> 00:04:34,280
它们现在相当普遍。

82
00:04:34,280 --> 00:04:40,120
所以您可能知道，到目前为止我们一直只是使用单个用户提示进行提示。

83
00:04:40,120 --> 00:04:43,240
但您实际上可以指定两个不同的提示。

84
00:04:43,240 --> 00:04:50,600
系统提示更多的是为任务设置上下文的整体说明

85
00:04:50,600 --> 00:04:56,330
手头的内容，以及应该响应的格式和方式，然后用户提示就是实际的

86
00:04:56,330 --> 00:04:58,130
来自用户的问题。

87
00:04:58,130 --> 00:05:02,530
在这种情况下，我们可以很方便地将这两个问题分开。

88
00:05:02,690 --> 00:05:07,650
所以对于系统提示我说你正在扮演名字。

89
00:05:07,650 --> 00:05:10,130
所以这将是我，也将是你。

90
00:05:10,410 --> 00:05:15,810
您正在回答该人网站上的问题，特别是与他们的职业相关的问题，

91
00:05:15,850 --> 00:05:17,810
背景、技能和经验。

92
00:05:18,050 --> 00:05:23,890
您的责任是尽可能忠实地代表网站上的互动。

93
00:05:24,330 --> 00:05:27,610
LinkedIn 个人资料中会向您提供背景摘要，等等等等。

94
00:05:28,090 --> 00:05:29,570
它要专业且有吸引力。

95
00:05:29,570 --> 00:05:33,010
所以这是关于定基调的，这是在系统提示中做的一件好事。

96
00:05:33,010 --> 00:05:36,810
如果你不知道答案，直接说出来就很好。

97
00:05:36,850 --> 00:05:39,250
提示上下文给出。

98
00:05:39,770 --> 00:05:40,410
好的。

99
00:05:40,690 --> 00:05:45,050
然后我使用该摘要变量添加摘要。

100
00:05:45,050 --> 00:05:47,490
我还添加了 LinkedIn 个人资料。

101
00:05:47,490 --> 00:05:51,370
我使用 Markdown 标签将其显示为标题。

102
00:05:51,930 --> 00:05:56,410
然后我以这个上下文结束，请与用户聊天。

103
00:05:56,450 --> 00:06:00,970
始终保持像你一样的性格。

104
00:06:01,570 --> 00:06:02,050
好的。

105
00:06:02,090 --> 00:06:02,970
现在情节变得更加复杂。

106
00:06:02,970 --> 00:06:03,450
现在你知道什么了吗？

107
00:06:03,450 --> 00:06:04,890
我就是我在这里玩的游戏。

108
00:06:04,890 --> 00:06:05,890
你知道我们在做什么。

109
00:06:06,010 --> 00:06:08,890
让我们运行它并打印它。

110
00:06:08,890 --> 00:06:12,090
这样我们就可以看到系统提示符实际上是什么样子了。

111
00:06:13,010 --> 00:06:13,810
我们开始吧。

112
00:06:13,850 --> 00:06:17,330
您可以看到它的形状完全符合我们的预期。

113
00:06:17,810 --> 00:06:19,050
它里面会有。

114
00:06:19,090 --> 00:06:28,090
当然，关于我的信息以及 LinkedIn URL、LinkedIn PDF 内容等，希望也是您的

115
00:06:28,090 --> 00:06:29,170
会有你的。

116
00:06:29,210 --> 00:06:31,130
并且您应该输入一些打印语句来检查它。

117
00:06:31,170 --> 00:06:34,090
确保您对迄今为止发生的一切感到非常满意。

118
00:06:34,850 --> 00:06:41,370
因此，我们将使用 Gradio 启动一个用户界面，允许我们基于 LLM 进行聊天

119
00:06:41,370 --> 00:06:43,570
配备了此系统提示符。

120
00:06:43,770 --> 00:06:49,370
使用 Gradio 的方式是您需要编写一个类似于回调函数的函数

121
00:06:49,370 --> 00:06:54,460
当用户输入某些内容时，Gradio 会在需要进行某些处理时回调

122
00:06:54,460 --> 00:06:54,900
在。

123
00:06:54,900 --> 00:07:00,500
这个特定回调函数的风格是你编写一个名为 chat 的函数的风格，

124
00:07:00,540 --> 00:07:07,100
它获取用户正在输入的消息、正在发送的消息以及所有先前的历史记录

125
00:07:07,100 --> 00:07:10,340
消息，采用 OpenAI 的格式。

126
00:07:10,620 --> 00:07:18,860
我们需要做的是调用 LLM 并返回 LLM 的下一个响应以进入

127
00:07:18,860 --> 00:07:19,380
聊天。

128
00:07:19,660 --> 00:07:23,620
所以我会让你仔细看看这个，让你自己相信我正在做的事情是正确的。

129
00:07:23,620 --> 00:07:28,580
但基本上我构建了一个 OpenAI 风格的字典列表。

130
00:07:28,580 --> 00:07:33,660
我先从系统提示角色系统内容和系统提示开始。

131
00:07:33,660 --> 00:07:40,660
我添加了来自 Gradio 的历史记录，然后我插入了刚刚收到的这条缪斯消息。

132
00:07:41,100 --> 00:07:51,310
然后，我使用这些消息调用 OpenAI Dot create for GPT 4 mini，然后返回响应

133
00:07:51,350 --> 00:07:53,950
选择零消息内容。

134
00:07:54,150 --> 00:07:57,830
所以这对你来说应该是相当熟悉的东西。

135
00:07:57,830 --> 00:08:00,590
然后使用 Gradio 就非常简单了。

136
00:08:00,750 --> 00:08:01,550
你只要打电话。

137
00:08:01,550 --> 00:08:02,790
在这种情况下，我们想要聊天。

138
00:08:02,790 --> 00:08:04,750
这样就可以调用聊天接口了。

139
00:08:04,750 --> 00:08:08,910
我们告诉它我们编写的函数，以便它知道可以将此作为回调调用。

140
00:08:09,190 --> 00:08:11,070
我们要求它启动。

141
00:08:11,510 --> 00:08:14,990
当我运行它时，我得到一个像这样的界面。

142
00:08:15,350 --> 00:08:17,750
我可以在那里打个招呼。

143
00:08:18,710 --> 00:08:19,830
您好，欢迎来到我的网站。

144
00:08:19,830 --> 00:08:21,070
我该如何帮助您？

145
00:08:21,070 --> 00:08:27,030
所以我可以说，你最大的成就是什么？

146
00:08:27,870 --> 00:08:29,150
我们会看看它说了什么。

147
00:08:29,750 --> 00:08:36,310
我认为我最大的成就是共同创立了 Nebula，我们正在利用生成技术

148
00:08:36,310 --> 00:08:40,470
人工智能和专有法学硕士将改变人们寻找和聘用人才的方式。

149
00:08:40,590 --> 00:08:41,670
极好的。

150
00:08:41,950 --> 00:08:45,070
它还谈论了我创办的公司。

151
00:08:45,350 --> 00:08:49,120
所以这是一个非常合法、非常好的答案。

152
00:08:49,120 --> 00:08:51,400
我认为这可能是真的，这总是一件好事。

153
00:08:51,600 --> 00:08:54,880
可以说，处理得非常好。

154
00:08:55,040 --> 00:09:03,160
您遇到并需要克服的挑战是什么？

155
00:09:03,440 --> 00:09:07,840
这是面试中可能会被问到的一个很难的专业问题。

156
00:09:08,480 --> 00:09:09,200
好的。

157
00:09:09,400 --> 00:09:13,200
我在摩根大通成功的职业生涯过渡期间面临的重大挑战之一

158
00:09:13,200 --> 00:09:16,440
创办自己的公司，直到这一切成为现实。

159
00:09:16,480 --> 00:09:19,360
我不知道他是如何从我的 LinkedIn 个人资料中得知这一信息的。

160
00:09:19,360 --> 00:09:21,280
我想它一定在某个地方或什么东西。

161
00:09:21,280 --> 00:09:23,120
这就是其中所暗示的。

162
00:09:23,120 --> 00:09:25,640
但我的意思是，它恰好是正确的。

163
00:09:25,840 --> 00:09:28,160
所以这是一个非常好的答案。

164
00:09:28,160 --> 00:09:35,880
奇妙的是，在短短几分钟内，我们就构建了一个聊天界面，并且使用了

165
00:09:35,880 --> 00:09:42,920
为其提供有关我的信息的资源，以便它能够像我一样行事并像专业人士一样

166
00:09:42,960 --> 00:09:48,080
阿凡达，是我回答有关我职业生涯的问题时的另一个自我。