1
00:00:00,000 --> 00:00:11,000
Hello,大家好,我是周日金。AI這兩年離咱們普通用戶越來越近。現在甚至不需要單獨買一台服務器,我們就可以直接把手頭閒置在Mac,變成一台屬於自己的本地AI服務器。

2
00:00:11,000 --> 00:00:27,000
這次視頻我會從零開始帶大家把Olama、OpenWeb UI、REG、OCR、Whisper.cpp和N8N一步步串起來。這套方案的重點就是,模型和大部分數據都運行在自己本地的Mac上,也不要求特別高的配置。

3
00:00:27,000 --> 00:00:28,800
如果大家对这类玩法感兴趣

4
00:00:28,800 --> 00:00:32,640
后面还可以继续带大家折腾本地图片和视频生成

5
00:00:32,640 --> 00:00:35,960
本地AI编程以及把AI介入Home Assistant

6
00:00:35,960 --> 00:00:38,520
通过自然语言控制家里的智能设备

7
00:00:38,520 --> 00:00:41,840
视频正式开始前先求一波一进三连加关注支持一下

8
00:00:41,840 --> 00:00:44,920
这样以后有新的教程更新也能第一时间受到推送

9
00:00:44,920 --> 00:00:45,940
非常感谢

10
00:00:45,940 --> 00:00:49,280
接下来我们就从我的这台Mac mini开始

11
00:00:54,400 --> 00:00:55,920
在开始下载模型之前

12
00:00:55,920 --> 00:00:58,920
之前我们需要先在mac上安装olama

13
00:00:58,920 --> 00:01:03,920
你可以把它理解为让普通用户可以在本地运行AI大模型的运行环境

14
00:01:03,920 --> 00:01:06,920
直接前往olama的官网下载对应的安装包

15
00:01:06,920 --> 00:01:09,920
然后拖动到macOS用程式文件夹就可以了

16
00:01:09,920 --> 00:01:12,920
平时使用chatgpt cloud这类AI服务时

17
00:01:12,920 --> 00:01:14,920
模型都是运行在云端服务器上

18
00:01:14,920 --> 00:01:21,920
而olama要做的事情就是把像deepseek签问lama这类开源模型下载安装到你的mac上

19
00:01:21,920 --> 00:01:24,920
让他们直接利用本机的cpu和gpu运行

20
00:01:24,920 --> 00:01:27,160
安装好Olama并打开之后

21
00:01:27,160 --> 00:01:28,520
下一步就是下载模型

22
00:01:28,520 --> 00:01:30,000
不过这里需要注意啊

23
00:01:30,000 --> 00:01:32,580
本地AI和ChatGPT这类云竿的模型

24
00:01:32,580 --> 00:01:33,340
最大的区别

25
00:01:33,340 --> 00:01:35,800
就是模型大小会直接影响运行体验

26
00:01:35,800 --> 00:01:38,620
所以不能盲目追求越大的模型就越好

27
00:01:38,620 --> 00:01:41,540
我这里使用的是一台M4入门款的Mac mini

28
00:01:41,540 --> 00:01:44,920
采用16GB的同一列存加256GB的固态硬盘

29
00:01:44,920 --> 00:01:47,300
确认Olama的服务在正常运行后

30
00:01:47,300 --> 00:01:49,120
我们在MacOS的中段App中

31
00:01:49,120 --> 00:01:50,420
输入这三条命令

32
00:01:50,420 --> 00:01:52,260
它们分别负责不同的功能

33
00:01:52,260 --> 00:01:53,880
第一个是大约模型

34
00:01:53,880 --> 00:01:55,700
也就是本地AI的大脑

35
00:01:55,700 --> 00:01:56,760
负责日常聊天

36
00:01:56,760 --> 00:01:57,500
内容生成

37
00:01:57,500 --> 00:01:58,740
总业资料等任务

38
00:01:58,740 --> 00:02:00,960
其中4B代表40亿参数

39
00:02:00,960 --> 00:02:03,680
Kill4KM代表经过4bit量化

40
00:02:03,680 --> 00:02:05,640
可以在降低模型状的同时

41
00:02:05,640 --> 00:02:07,180
保持不错的运行效果

42
00:02:07,180 --> 00:02:09,680
是目前比较适合普通Mac的选择

43
00:02:09,680 --> 00:02:11,440
第二个是向量模型

44
00:02:11,440 --> 00:02:12,840
主要用于知识库检索

45
00:02:12,840 --> 00:02:15,260
如果你以后想让AI读取自己的PDF

46
00:02:15,260 --> 00:02:16,580
文档视频稿件

47
00:02:16,580 --> 00:02:18,440
然后根据这些资料回答问题

48
00:02:18,440 --> 00:02:20,060
就需要通过Embedding模型

49
00:02:20,060 --> 00:02:22,180
先帮AI找到相关内容

50
00:02:22,180 --> 00:02:24,800
第三个是欧塞亚文字试园模型

51
00:02:24,800 --> 00:02:25,920
负责处理图片

52
00:02:25,920 --> 00:02:27,480
扫描版PDF等内容

53
00:02:27,480 --> 00:02:29,340
把图片里的文字提许出来

54
00:02:29,340 --> 00:02:31,320
再交给语言模型进行分析

55
00:02:31,320 --> 00:02:33,620
这里之所以选择千问的AR模型

56
00:02:33,620 --> 00:02:35,720
是因为千问是目前比较成熟的

57
00:02:35,720 --> 00:02:36,760
开源大模型之一

58
00:02:36,760 --> 00:02:39,360
对中文理解和中文生成比较友好

59
00:02:39,360 --> 00:02:41,420
其次是它提供的模型规格丰富

60
00:02:41,420 --> 00:02:43,700
从4B到更大的参数版本

61
00:02:43,700 --> 00:02:45,380
可以适配不同配置的Mac

62
00:02:45,380 --> 00:02:46,160
还有一个是

63
00:02:46,160 --> 00:02:48,200
它在欧拉玛里的支持比较完善

64
00:02:48,200 --> 00:02:50,020
安装和电用也都比较简单

65
00:02:50,020 --> 00:02:51,280
当然除了千问

66
00:02:51,280 --> 00:02:53,820
DeepSeq,Lama等模型也都可以运行

67
00:02:53,820 --> 00:02:56,100
大家可以根据自己的需求进行选择

68
00:02:56,100 --> 00:02:59,020
那至于不同的Mac应该选择多大的模型

69
00:02:59,020 --> 00:03:01,260
主要看新变性能和统一内存的大小

70
00:03:01,260 --> 00:03:04,460
8GB内存的Mac建议先从4B级别模型开始

71
00:03:04,460 --> 00:03:07,860
16GB内存运行4B会相对轻松

72
00:03:07,860 --> 00:03:11,340
也可以在实际内存压力云雪情况下尝试9B

73
00:03:11,340 --> 00:03:14,640
而24GB,32GB以及更高内存的Mac

74
00:03:14,640 --> 00:03:16,480
则可以继续尝试更大的规格

75
00:03:16,480 --> 00:03:20,180
但具体体验还会受到上下文长度和后台任务的影响

76
00:03:20,180 --> 00:03:21,520
这里需要注意啊

77
00:03:21,520 --> 00:03:23,400
模型标签不能随便改数字

78
00:03:23,400 --> 00:03:25,260
如果继续使用千万3.5

79
00:03:25,260 --> 00:03:26,940
目前Olama还提供9B

80
00:03:26,940 --> 00:03:29,080
27B 35B等更大规格

81
00:03:29,080 --> 00:03:31,120
具体名称一定以Olama模型库

82
00:03:31,120 --> 00:03:32,500
实际存在的标签为准

83
00:03:32,500 --> 00:03:35,160
那咱们还是先把本地AI服务器跑起来

84
00:03:35,160 --> 00:03:37,420
后续再根据实际需求升级模型

85
00:03:37,420 --> 00:03:39,680
接下来我们在Microsoft中的App中

86
00:03:39,680 --> 00:03:40,840
输入以下命令

87
00:03:40,840 --> 00:03:41,840
Olama List

88
00:03:41,840 --> 00:03:44,120
查看是否已经全部下载完成

89
00:03:44,120 --> 00:03:46,640
如果前面下载的模型都正常列出来

90
00:03:46,640 --> 00:03:47,960
就可以来简单试一下

91
00:03:47,960 --> 00:03:49,900
模型能不能在本地正常运行

92
00:03:49,900 --> 00:03:51,080
输入制传命令

93
00:03:51,080 --> 00:03:52,040
olama run

94
00:03:52,040 --> 00:03:52,900
千万3.5

95
00:03:52,900 --> 00:03:54,540
4b-q4km

96
00:03:54,540 --> 00:03:55,900
然后随便发一句话

97
00:03:55,900 --> 00:03:56,640
比如你好

98
00:03:56,640 --> 00:03:59,080
如果能正常给出回复就没问题了

99
00:03:59,080 --> 00:04:01,060
随后输入制传命令结束对话

100
00:04:01,060 --> 00:04:01,540
Bye

101
00:04:01,540 --> 00:04:03,660
之后我们就可以停止运行

102
00:04:03,660 --> 00:04:04,620
以释放资源

103
00:04:04,620 --> 00:04:05,780
输入制传命令

104
00:04:05,780 --> 00:04:06,820
olama stop

105
00:04:06,820 --> 00:04:07,640
千万3.5

106
00:04:07,640 --> 00:04:09,080
4b-q4km

107
00:04:09,080 --> 00:04:10,680
然后再输入制传命令

108
00:04:10,680 --> 00:04:11,480
olama ps

109
00:04:11,480 --> 00:04:14,140
查看这个AR大模型是否人在运行

110
00:04:14,140 --> 00:04:15,460
此时应该为空

111
00:04:15,460 --> 00:04:18,200
那么就说明我们的大模型已经没有在运行了

112
00:04:18,200 --> 00:04:20,320
接下来咱们就要开始准备部署

113
00:04:20,320 --> 00:04:22,360
家庭局网AI对话界面了

114
00:04:22,360 --> 00:04:30,980
前面我们已经通过Olama把AI模型运行在Mac上

115
00:04:30,980 --> 00:04:33,500
但是目前还需要通过中端的进行操作

116
00:04:33,500 --> 00:04:35,280
对于日常使用来说不太方便

117
00:04:35,280 --> 00:04:37,200
所以接下来我们就要给它搭建一个

118
00:04:37,200 --> 00:04:39,060
类似ChatGP的网页界面

119
00:04:39,060 --> 00:04:40,720
这里使用OpenWebUI

120
00:04:40,720 --> 00:04:43,240
也就是让Olama负责运行AI模型

121
00:04:43,240 --> 00:04:45,620
OpenWebUI负责提供交互界面

122
00:04:45,620 --> 00:04:46,820
那部署完成后

123
00:04:46,820 --> 00:04:49,300
家里的手机平板电脑都可以通过浏览器

124
00:04:49,300 --> 00:04:50,340
访问这台Mac mini

125
00:04:50,340 --> 00:04:52,300
直接使用自己的本地AI

126
00:04:52,300 --> 00:04:54,600
能考虑到中国大陆用户的网络环境

127
00:04:54,600 --> 00:04:56,920
这里直接通过Python安装OpenWeb UI

128
00:04:56,920 --> 00:04:59,440
同时Olama继续只监听本机地址

129
00:04:59,440 --> 00:05:00,920
不会直接暴露到网络中

130
00:05:00,920 --> 00:05:04,160
本教程固定使用OpenWeb UI 0.11.0版本

131
00:05:04,160 --> 00:05:06,580
不使用latest或滚动更新版本

132
00:05:06,580 --> 00:05:09,380
避免版本变化导致操作流程不一炸

133
00:05:09,380 --> 00:05:11,000
首先准备Python环境

134
00:05:11,000 --> 00:05:13,020
如果你的Mac已经安装Homebrew

135
00:05:13,020 --> 00:05:16,120
则可以输入brew install python at 3.11

136
00:05:16,120 --> 00:05:17,540
如果没有安装Homebrew

137
00:05:17,540 --> 00:05:22,200
也可以直接向Python官方网站下载安装Python 3.1对应的MicroOS安装包

138
00:05:22,200 --> 00:05:24,660
后面如果会继续折腾这类工具

139
00:05:24,660 --> 00:05:26,120
建议提前装好Homebrew

140
00:05:26,120 --> 00:05:27,840
管理和升级会方便不少

141
00:05:27,840 --> 00:05:30,540
接下来创建OpenWeb UI独立运行环境

142
00:05:30,540 --> 00:05:32,840
避免影响系统里的其他Python项目

143
00:05:32,840 --> 00:05:35,020
后续相关代码我不再一一进行解释

144
00:05:35,020 --> 00:05:38,060
如果有看不懂可以查看代码上方的文本注释

145
00:05:46,120 --> 00:05:52,640
然后通过轻滑镜像安装OpenWeb UI

146
00:05:52,640 --> 00:06:03,800
安装完成后

147
00:06:03,800 --> 00:06:06,040
第一次启动建议只允许本机访问

148
00:06:06,040 --> 00:06:07,940
先完成账号和安全设置

149
00:06:07,940 --> 00:06:09,300
等命令跑起来以后

150
00:06:09,300 --> 00:06:10,880
不要关闭这个中端窗口

151
00:06:10,880 --> 00:06:13,400
因为OpenWeb UI的服务就运行在这里

152
00:06:13,400 --> 00:06:17,240
然后流量器打开

153
00:06:17,240 --> 00:06:18,760
127.0.0.1

154
00:06:18,760 --> 00:06:19,580
网号3000

155
00:06:19,580 --> 00:06:21,700
第一次进入需要创建账号

156
00:06:21,700 --> 00:06:23,840
第一个账号就会自动成为管理员

157
00:06:23,840 --> 00:06:28,460
进入管理后台后

158
00:06:28,460 --> 00:06:29,940
前往设置身份验证

159
00:06:29,940 --> 00:06:31,460
把newsign apps关闭

160
00:06:31,460 --> 00:06:33,460
也就是不允许新用户自由注册

161
00:06:33,460 --> 00:06:35,800
同时暂时不要安装来源不明的

162
00:06:35,800 --> 00:06:37,980
第三方Tools,Functions或Pipelines

163
00:06:37,980 --> 00:06:39,660
接着就可以在流量器打开

164
00:06:39,660 --> 00:06:40,980
127.0.1

165
00:06:40,980 --> 00:06:42,440
网号11434

166
00:06:42,440 --> 00:06:44,480
-API-version

167
00:06:44,480 --> 00:06:46,880
确认Olama本地API正常响应

168
00:06:46,880 --> 00:06:48,120
回到OpenWeb UI

169
00:06:48,120 --> 00:06:49,640
再检查之前下载的

170
00:06:49,640 --> 00:06:51,760
千万3.5 4B-TU4KM

171
00:06:51,760 --> 00:06:53,780
是否已经出现在母型列表当中

172
00:06:53,780 --> 00:06:54,880
确认没有问题后

173
00:06:54,880 --> 00:06:57,060
在中端APP中按Ctrl-C

174
00:06:57,060 --> 00:06:58,420
停止OpenWeb UI

175
00:06:58,420 --> 00:07:00,160
接下来开放家庭局域网

176
00:07:00,160 --> 00:07:02,020
实际在系统设置网络中

177
00:07:02,020 --> 00:07:03,720
查看Mac mini的局域网IP

178
00:07:03,720 --> 00:07:06,040
实际操作需要替完成你自己的IP

179
00:07:06,040 --> 00:07:07,860
重新启动OpenWeb UI

180
00:07:07,860 --> 00:07:14,340
现在Mac mini本机可以继续访问127.0.0.1

181
00:07:14,340 --> 00:07:15,080
网号3000

182
00:07:15,080 --> 00:07:17,960
并使用刚才创建的管理员账号进行登录

183
00:07:17,960 --> 00:07:19,700
通过家庭网络里的手机

184
00:07:19,700 --> 00:07:21,880
电脑则可以通过Mac mini.ipd设计

185
00:07:21,880 --> 00:07:23,540
加段稿号3000来访问

186
00:07:23,540 --> 00:07:25,500
同样使用刚才的账号来登录

187
00:07:25,500 --> 00:07:26,900
这时候可以随便问你问题

188
00:07:26,900 --> 00:07:29,380
看看局域网访问和模型交用是否正常

189
00:07:29,380 --> 00:07:31,040
如果其他设备都无法打开

190
00:07:31,040 --> 00:07:32,360
依次可以清查几个地方

191
00:07:32,360 --> 00:07:33,600
最后提醒一下

192
00:07:33,600 --> 00:07:35,640
这里搭建的家庭局域网AI服务器

193
00:07:35,640 --> 00:07:37,400
不会把服务暴露到公网

194
00:07:37,400 --> 00:07:39,600
因此不需要进行路由器短口转发

195
00:07:39,600 --> 00:07:42,540
也不要直接把OpenWeb AI开放到互联网环境

196
00:07:42,540 --> 00:07:45,000
而这样配置后保持终端App不关闭

197
00:07:45,000 --> 00:07:46,700
AI模式运行在自己的Mac上

198
00:07:46,700 --> 00:07:48,940
数据只在家庭网络里进行流转

199
00:07:48,940 --> 00:07:52,860
同时手机平板和电脑都可以共享这一台本地AI服务器

200
00:07:58,028 --> 00:08:04,368
前面OpenWeb UI已经可以这张访问了,接下来我们再给整个家庭AI服务器建立一个统一的API接口。

201
00:08:04,368 --> 00:08:06,948
这样以后不管是N8N手机快捷指令

202
00:08:06,948 --> 00:08:09,348
还是其他支持OpenAI API的程序

203
00:08:09,348 --> 00:08:11,208
都统一连接OpenWeb UI

204
00:08:11,208 --> 00:08:13,108
不需要直接访问底层的奥拉玛

205
00:08:13,108 --> 00:08:14,148
这样的好处是

206
00:08:14,148 --> 00:08:17,808
模型、照顽和权限都可以在OpenWeb UI这一层统一管理

207
00:08:17,808 --> 00:08:19,048
后面更换模型时

208
00:08:19,048 --> 00:08:21,088
也不用重新修改每一个应用

209
00:08:21,088 --> 00:08:22,608
实际上咱们回到OpenWeb UI

210
00:08:22,608 --> 00:08:25,068
点击左下角头像依次进入设置

211
00:08:25,068 --> 00:08:27,568
身份验证找到API密钥并打开

212
00:08:27,568 --> 00:08:30,188
如果界面提供API密钥端点限制

213
00:08:30,188 --> 00:08:31,128
也一并开启

214
00:08:31,128 --> 00:08:32,488
然后填写这个

215
00:08:32,488 --> 00:08:37,368
这样生成的key就只允许访问模型列表和聊天接口

216
00:08:37,368 --> 00:08:39,328
接下来进入账号API MIAO

217
00:08:39,328 --> 00:08:42,048
点击右侧的显示创建新的API MIAO

218
00:08:42,048 --> 00:08:44,368
生成MIAO通常会以SK开头

219
00:08:44,368 --> 00:08:47,348
这个MIAO相当于访问我们家庭iF5系的密码

220
00:08:47,348 --> 00:08:49,328
不要直接公开或者分享出去

221
00:08:49,328 --> 00:08:52,648
如果后面准备长期让N8N这类的自动化工具使用

222
00:08:52,648 --> 00:08:55,148
建议专门创建一个普通的本地账号

223
00:08:55,148 --> 00:08:57,208
再用这个账号生成API MIAO

224
00:08:57,208 --> 00:08:59,388
不要长期使用管理员账号的MIAO

225
00:08:59,388 --> 00:09:02,048
因为MIAO会继续创建这个账号的权限

226
00:09:02,048 --> 00:09:04,868
而且一个账号通常只保留一个API密钥

227
00:09:04,868 --> 00:09:06,968
接着我们来测试接口是否正常

228
00:09:06,968 --> 00:09:09,008
打开一个新的终端APP窗口

229
00:09:09,008 --> 00:09:12,328
把下面的命令中的SK换成刚才生成的密钥

230
00:09:12,328 --> 00:09:13,588
如果接口正常

231
00:09:13,588 --> 00:09:16,888
终端会访问当前OpenWeb UI可以调用的模型列表

232
00:09:16,888 --> 00:09:20,308
这里可以顺便记一下返回结果里模型队的真实ID

233
00:09:20,308 --> 00:09:23,488
因为后面其他地方对用AI时就需要填写这个名称

234
00:09:23,488 --> 00:09:25,528
接下来再来测试聊天接口

235
00:09:25,528 --> 00:09:28,908
同样的记得把SK开头的这串换成刚才生成的密钥

236
00:09:28,908 --> 00:09:31,508
而Model后面需要填写刚才模型列表里面

237
00:09:31,508 --> 00:09:32,648
实际反规的ID

238
00:09:32,648 --> 00:09:35,108
如果你下载的是其他签问或者其他模型

239
00:09:35,108 --> 00:09:36,508
就替完成对应的模型

240
00:09:36,508 --> 00:09:39,168
如果最后反规Json你能够看到API正常

241
00:09:39,168 --> 00:09:41,748
就说明这一套接口已经可以正常使用了

242
00:09:42,008 --> 00:09:43,848
签问3.5在开启思考时

243
00:09:43,848 --> 00:09:45,248
反规内容里可能还会出现

244
00:09:45,248 --> 00:09:47,108
Reasoning Content这一类字段

245
00:09:47,108 --> 00:09:48,168
这是正常现象

246
00:09:48,408 --> 00:09:50,608
到这里我们就相当于给整个家庭

247
00:09:50,608 --> 00:09:52,448
AI服务器建了一个统一的入口

248
00:09:52,748 --> 00:09:55,008
最底层人是Olama负责运行模型

249
00:09:55,168 --> 00:09:56,508
上面的OpenWeb UI

250
00:09:56,508 --> 00:09:58,208
统一管理模型和API

251
00:09:58,348 --> 00:10:00,948
在网上则可以接N8N手机快点指令

252
00:10:00,948 --> 00:10:01,988
或者其他应用

253
00:10:01,988 --> 00:10:03,668
后面不管增加多少个客户端

254
00:10:03,668 --> 00:10:05,468
都尽量连接OpenWeb UI

255
00:10:05,468 --> 00:10:07,828
而不是让每台设备直接访问欧拉玛

256
00:10:07,828 --> 00:10:09,628
整个架构会更容易管理

257
00:10:14,628 --> 00:10:17,588
前面我们已经把本地AI和聊天的API都搭好了

258
00:10:17,588 --> 00:10:20,188
接下来就再补上一个非常熟能功能

259
00:10:20,188 --> 00:10:21,428
Cell文档知识库

260
00:10:21,428 --> 00:10:22,748
也就是REG

261
00:10:22,748 --> 00:10:23,948
REG可以列成

262
00:10:23,948 --> 00:10:25,508
先从你的资料里找内容

263
00:10:25,508 --> 00:10:27,068
再交给AI声称回答

264
00:10:27,068 --> 00:10:28,748
这样以后不管是自己的PDF

265
00:10:28,748 --> 00:10:29,468
说明书

266
00:10:29,468 --> 00:10:30,108
工作文档

267
00:10:30,108 --> 00:10:30,908
还是视频稿

268
00:10:30,908 --> 00:10:32,028
都可以放进知识库

269
00:10:32,028 --> 00:10:34,268
让AI尽量根据这些资料来回答

270
00:10:34,268 --> 00:10:36,248
而不是只靠模型本身的记忆

271
00:10:36,248 --> 00:10:38,988
首先进入OpenWeb UI试试里的文档页面

272
00:10:38,988 --> 00:10:40,888
轻入模型引擎选择Olama

273
00:10:40,888 --> 00:10:42,248
API MIO可以留空

274
00:10:42,248 --> 00:10:44,668
地址填写127.0.0.1

275
00:10:44,668 --> 00:10:46,028
冒号11434

276
00:10:46,028 --> 00:10:47,108
轻入模型输入

277
00:10:47,108 --> 00:10:48,828
我们在视频一开始就下载好的

278
00:10:48,828 --> 00:10:50,888
轻入3-embedding0.6b

279
00:10:50,888 --> 00:10:52,448
而这里顺便解释一下

280
00:10:52,448 --> 00:10:53,868
这个模型不负责聊天

281
00:10:53,868 --> 00:10:55,288
它的工作是把文档

282
00:10:55,288 --> 00:10:57,308
转完成便于检索的向量数据

283
00:10:57,308 --> 00:10:58,508
只要你提问以后

284
00:10:58,508 --> 00:10:59,728
系统才能快速找到

285
00:10:59,728 --> 00:11:01,148
和问题最相关的资料

286
00:11:01,148 --> 00:11:03,288
其他参数可以先按照这一套来设置

287
00:11:03,288 --> 00:11:04,628
大部分是我认的

288
00:11:04,628 --> 00:11:06,388
这些参数主要是在减速效果

289
00:11:06,388 --> 00:11:07,668
和上下文本占用之间

290
00:11:07,668 --> 00:11:09,208
做一个比较稳妥的平衡

291
00:11:09,208 --> 00:11:10,748
比如快大小可以列列成

292
00:11:10,748 --> 00:11:12,668
每次把文档切成多大片段

293
00:11:12,668 --> 00:11:14,808
快重叠则是在相邻片段之间

294
00:11:14,808 --> 00:11:16,008
保留的部分重复内容

295
00:11:16,008 --> 00:11:17,848
避免一句话刚好被重点切断

296
00:11:17,848 --> 00:11:19,448
TableK代表每次提问

297
00:11:19,448 --> 00:11:21,508
最多取回多少个相关片段

298
00:11:21,508 --> 00:11:22,968
这里先设置为3

299
00:11:22,968 --> 00:11:24,188
并不是越大越好

300
00:11:24,188 --> 00:11:25,568
因为塞进太多资料

301
00:11:25,568 --> 00:11:27,988
反而会占模型有限的上下文空间

302
00:11:27,988 --> 00:11:30,268
接下来我们创建一个非常简单的测试文件

303
00:11:30,268 --> 00:11:32,728
方便确认RIG是否真的正常工作

304
00:11:32,728 --> 00:11:35,848
用任意文本编定器新建一个TXT文本

305
00:11:35,848 --> 00:11:38,688
如果你用的是MicroOS自带的文本编辑App

306
00:11:38,688 --> 00:11:40,828
记得在菜单里选择制作手文本

307
00:11:40,828 --> 00:11:42,588
比如里面写上这些内容

308
00:11:42,588 --> 00:11:45,448
然后保存为家庭AI测试资料.txt

309
00:11:45,448 --> 00:11:46,628
回到OpenWeb UI

310
00:11:46,628 --> 00:11:48,528
找到左侧边来的工作空间

311
00:11:48,528 --> 00:11:50,068
再点击顶部的知识库

312
00:11:50,068 --> 00:11:51,948
最后点击右上角的创建

313
00:11:51,948 --> 00:11:54,148
名称填写家庭AI测试库

314
00:11:54,148 --> 00:11:55,408
目标可以简单写真

315
00:11:55,408 --> 00:11:58,648
用于测试本地RIG文档检索和应用功能

316
00:11:58,648 --> 00:12:00,048
知识库创建完之后

317
00:12:00,048 --> 00:12:02,428
再点击右上角的加号选择上传文件

318
00:12:02,428 --> 00:12:04,948
把刚才的TXD文件上传进去

319
00:12:04,948 --> 00:12:07,768
后面也可以上传带有文字层的PDF

320
00:12:07,768 --> 00:12:09,688
DOCX或Markdown文档

321
00:12:09,688 --> 00:12:10,608
上传完之后

322
00:12:10,608 --> 00:12:12,328
在新兑化的聊天输入框里

323
00:12:12,328 --> 00:12:14,688
通过警号手动附加这个知识库

324
00:12:14,688 --> 00:12:16,728
而我这里为了教程演示方便

325
00:12:16,728 --> 00:12:17,668
先手动选择

326
00:12:17,668 --> 00:12:19,708
因为小参数模型主动判断

327
00:12:19,708 --> 00:12:21,868
什么时候动用知识库有时候不够稳定

328
00:12:21,868 --> 00:12:23,668
然后我们可以问一个问题

329
00:12:23,668 --> 00:12:25,088
只依据知识库回答

330
00:12:25,088 --> 00:12:27,648
项目代号和设备维护时间分配是什么

331
00:12:27,648 --> 00:12:28,808
请给出引用

332
00:12:28,808 --> 00:12:30,048
正常情况下

333
00:12:30,048 --> 00:12:30,968
耐心等待一会儿

334
00:12:30,968 --> 00:12:33,448
他应该回答项目代号是70

335
00:12:33,448 --> 00:12:36,368
设备维护时间是每月第一周六上午10点

336
00:12:36,368 --> 00:12:39,068
而且回答旁边能够看到对应的资料引用

337
00:12:39,068 --> 00:12:42,888
那么这套最基础的REG知识库就算大奖成功了

338
00:12:42,888 --> 00:12:43,988
不过这样配置下来

339
00:12:43,988 --> 00:12:46,088
你可能会发现还有一个地方容易踩坑

340
00:12:46,088 --> 00:12:47,868
如果你的PDF是扫描件

341
00:12:47,868 --> 00:12:50,048
本身没有可以复制的文字层

342
00:12:50,048 --> 00:12:52,008
就不要拿它来测试REG了

343
00:12:52,008 --> 00:12:54,788
因为知识库首先需要能够读取里面的文字

344
00:12:54,788 --> 00:12:56,048
才能进行后续的处理

345
00:12:56,048 --> 00:12:58,308
所以这种文件就需要先经过OCR

346
00:12:58,308 --> 00:13:01,328
把图片里的文字设备成TXC或者Markdown

347
00:13:01,328 --> 00:13:03,268
再上传到知识库来进行处理

348
00:13:03,268 --> 00:13:07,388
接下来我们就继续把本地OCR的功能也接进来

349
00:13:07,388 --> 00:13:14,788
前面我们已经让AI能够读取自的文档

350
00:13:14,788 --> 00:13:16,988
接下来再补上图片理解和OCR

351
00:13:16,988 --> 00:13:19,808
也就是让这台本地AI不只能读文字

352
00:13:19,808 --> 00:13:20,948
还可以看图片

353
00:13:20,948 --> 00:13:22,868
那这里先区分两个概念

354
00:13:22,868 --> 00:13:25,448
普通图片理解更适合看一张图里有什么

355
00:13:25,448 --> 00:13:26,708
界面再显示什么

356
00:13:26,708 --> 00:13:28,488
再顺便识别其中的文字

357
00:13:28,488 --> 00:13:31,488
OCR则更专注于把图片里的文字

358
00:13:31,488 --> 00:13:34,128
表格或者图表内容尽可能提取出来

359
00:13:34,128 --> 00:13:36,968
先在OpenWeb UI里选择我们前面使用的

360
00:13:36,968 --> 00:13:39,348
切纹3.5 4B-KL4KM

361
00:13:39,348 --> 00:13:40,808
如果你的Mac配置更高

362
00:13:40,808 --> 00:13:42,068
也可以用9B的版本

363
00:13:42,068 --> 00:13:44,908
上传一张同时包含物体和文字图片

364
00:13:44,908 --> 00:13:45,588
然后输入

365
00:13:45,588 --> 00:13:46,788
先描述画面内容

366
00:13:46,788 --> 00:13:48,528
再逐项提取可见文字

367
00:13:48,528 --> 00:13:50,488
不确定的部分标注为不确定

368
00:13:50,488 --> 00:13:51,588
不需要自信补圈

369
00:13:51,588 --> 00:13:53,728
这里可以分别拿产品包装

370
00:13:53,728 --> 00:13:54,708
软件界面截图

371
00:13:54,708 --> 00:13:55,468
中文表格

372
00:13:55,468 --> 00:13:59,168
或者已经做好隐私透明的发票和数据照片来测试一下

373
00:13:59,168 --> 00:14:01,128
这样可以比较直观的判断出

374
00:14:01,128 --> 00:14:02,948
模型到底是理解了图片内容

375
00:14:02,948 --> 00:14:05,388
还是只是把里面的文字给识别出来

376
00:14:05,388 --> 00:14:07,468
如果你出现类似我这样的提示

377
00:14:07,468 --> 00:14:09,148
就前往OpenWeb UI的设置

378
00:14:09,148 --> 00:14:09,708
模型

379
00:14:09,708 --> 00:14:11,548
找到刚才你前面使用的模型

380
00:14:11,548 --> 00:14:12,668
进入编辑界面

381
00:14:12,668 --> 00:14:15,728
找到高级参数下的NUM CTX OLAMA

382
00:14:15,728 --> 00:14:17,468
针对我16GB的Mac mini

383
00:14:17,468 --> 00:14:19,088
将数字更改为8192

384
00:14:19,088 --> 00:14:21,168
然后重复上的操作就可以了

385
00:14:21,168 --> 00:14:22,908
如果我们的目标不是理解图片

386
00:14:22,908 --> 00:14:25,368
而是尽可能把图片里的文字给提取出来

387
00:14:25,368 --> 00:14:28,528
就可以使用我们前面已经下载好的GLM OCR

388
00:14:28,528 --> 00:14:30,048
OCR模型运行前

389
00:14:30,048 --> 00:14:32,288
如果较大的千万模型还占着同一印寸

390
00:14:32,288 --> 00:14:33,648
先可以把它停掉

391
00:14:33,648 --> 00:14:35,848
接下来我们准备好需要识别图片

392
00:14:35,848 --> 00:14:37,468
放到一个统一的文件夹中

393
00:14:37,468 --> 00:14:38,988
比如我这个目录下

394
00:14:38,988 --> 00:14:41,248
对于我们Mac仿达中的用户文件夹

395
00:14:41,248 --> 00:14:42,228
AI-TEST

396
00:14:42,228 --> 00:14:44,628
这里手动新建一个TEST的文件夹就可以了

397
00:14:44,628 --> 00:14:46,628
对于需要识别不同的内容图片

398
00:14:46,628 --> 00:14:48,668
比如普通收据表格图表

399
00:14:48,668 --> 00:14:50,088
都可以使用不同的命令

400
00:14:50,088 --> 00:14:51,768
注意命令结尾的文件名

401
00:14:51,768 --> 00:14:53,768
需要换成你自己图片的文件名

402
00:14:53,768 --> 00:14:54,868
第一次测试时

403
00:14:54,868 --> 00:14:56,568
建议每次只处理一张图片

404
00:14:56,568 --> 00:14:58,928
先确认整套工作流能够稳定运行

405
00:14:58,928 --> 00:15:00,948
如果遇到扫描PDF

406
00:15:00,948 --> 00:15:03,888
也不用一开始就折腾完整的PDF解析工具

407
00:15:03,888 --> 00:15:05,288
最简单办法就是

408
00:15:05,288 --> 00:15:07,468
先用MicOS自带的预览打开PDF

409
00:15:07,468 --> 00:15:09,188
把其中页导成PN器

410
00:15:09,188 --> 00:15:11,488
再交给GLM OCR进行处理

411
00:15:11,488 --> 00:15:13,668
等确认单页OCR没问题后

412
00:15:13,668 --> 00:15:16,208
再考虑批量处理整份文档

413
00:15:16,208 --> 00:15:17,988
识别出来内容还可以继续利用

414
00:15:17,988 --> 00:15:19,968
保存成Tek-C或者Markdown

415
00:15:19,968 --> 00:15:22,568
再上传到我们上一节创建的知识库

416
00:15:22,568 --> 00:15:24,228
然后交给签问做摘要

417
00:15:24,228 --> 00:15:26,128
自端整理或者检索问答

418
00:15:26,128 --> 00:15:28,048
那么整个流程就传起来了

419
00:15:28,048 --> 00:15:30,988
如果OCR出现空白重复或者乱码

420
00:15:30,988 --> 00:15:32,288
可以先更新OLAMA

421
00:15:32,288 --> 00:15:34,268
然后每次只处理一张图片

422
00:15:34,268 --> 00:15:35,428
图片过大时

423
00:15:35,428 --> 00:15:39,048
可以把长辨锁到大约1600至2200像素

424
00:15:39,048 --> 00:15:41,148
并优先使用PNG或者GPG

425
00:15:41,148 --> 00:15:43,968
同时检查原图有没有明显模糊

426
00:15:43,968 --> 00:15:45,068
倾斜反光

427
00:15:45,068 --> 00:15:47,048
这些都会直接影响识别效果

428
00:15:47,048 --> 00:15:49,048
好

429
00:15:52,515 --> 00:16:04,255
那除了文字和图片之外,本DI还有一个非常实用的场景,就是处理视频和录音。比如把会议录音转成文字,把视频自动生成字幕,或者把自己的素材库快速整理成可搜索的文本。

430
00:16:04,255 --> 00:16:06,175
这里我们使用Whisper.cpp

431
00:16:06,175 --> 00:16:08,615
它是Whisper模型C++实现的

432
00:16:08,615 --> 00:16:10,615
针对Apple Silicon提供Mental加速

433
00:16:10,615 --> 00:16:13,355
可以直接利用Mac的GPU进行本地转写

434
00:16:13,355 --> 00:16:15,235
首先安装需要用到的工具

435
00:16:15,235 --> 00:16:17,835
FMMP1G负责处理音频格式

436
00:16:17,835 --> 00:16:20,155
Whisper.cpp负责语音识别

437
00:16:20,155 --> 00:16:22,095
如果你的Mac已经安装HomeBrew

438
00:16:22,095 --> 00:16:23,935
可以直接输入代码来进行安装

439
00:16:23,935 --> 00:16:25,675
如果你仍然没有安装HomeBrew

440
00:16:25,675 --> 00:16:28,295
安装Whisper.cpp可以走原码编译路线

441
00:16:28,295 --> 00:16:29,795
不过对于普通用户来说

442
00:16:29,795 --> 00:16:31,795
这一步会比HomeBrew更复杂一些

443
00:16:31,795 --> 00:16:34,355
还需要提前安装Xcode command line tools

444
00:16:34,355 --> 00:16:35,695
这里就不展开了

445
00:16:35,695 --> 00:16:36,615
安装完整后

446
00:16:36,615 --> 00:16:39,135
可以通过下面两个命令来确认是否正常

447
00:16:39,135 --> 00:16:40,735
接下来下载Whisper模型

448
00:16:40,735 --> 00:16:42,195
我这里选择的是这个

449
00:16:42,195 --> 00:16:44,555
这是一个支持中文和多语言的模型

450
00:16:44,555 --> 00:16:46,815
相比完整LARGE模型体积更小

451
00:16:46,815 --> 00:16:48,715
同时保留了比较好的转眼效果

452
00:16:48,715 --> 00:16:50,155
更适合Mac本地运行

453
00:16:50,155 --> 00:16:53,155
我们先创建存放模型和临时文件的目录

454
00:16:53,155 --> 00:16:54,195
然后下载模型

455
00:16:54,195 --> 00:16:57,235
下载完整后再计算一次SHA-1的值

456
00:16:57,235 --> 00:17:01,135
方便和Whisper.cpp模型文档公开的接应值进行核对

457
00:17:01,135 --> 00:17:03,535
模型准备好后就可以开始处理视频

458
00:17:03,535 --> 00:17:06,255
假设你的视频文件位于这个文件夹

459
00:17:06,255 --> 00:17:09,335
也就是MicroOS用户目录的影片文件夹当中

460
00:17:09,335 --> 00:17:12,075
大家根据自己的实际文件存储位置进行修改

461
00:17:12,075 --> 00:17:17,055
首先使用FMMP1G把视频里的音频转换成Whisper更适合处理的格式

462
00:17:17,055 --> 00:17:18,895
这些几个参数简单介绍一下

463
00:17:18,895 --> 00:17:21,255
VN表示去掉视频只保留音频

464
00:17:21,255 --> 00:17:24,635
AR16表示转换成16000Hz的采样率

465
00:17:24,635 --> 00:17:26,315
AC1表示单身道

466
00:17:26,315 --> 00:17:31,075
PCM-S16LE则是转换成Whisper更容易处理的WAV格式

467
00:17:31,075 --> 00:17:34,355
接下来运行Whisper同时生成文字稿和字幕文件

468
00:17:34,355 --> 00:17:37,255
-m用来指定我们前面下载的Whisper模型

469
00:17:37,255 --> 00:17:39,915
-f指定需要转写的音频文件

470
00:17:39,915 --> 00:17:43,495
-lzh告诉我们模型这段文字主要内容是中文

471
00:17:43,495 --> 00:17:47,355
-prompt则可以提前提供一些容易识别错误的中文名词

472
00:17:47,355 --> 00:17:50,395
比如Mac mini,Apple Silicon,Olama和签问

473
00:17:50,395 --> 00:17:51,935
对于科技类视频有其有用

474
00:17:51,935 --> 00:17:54,175
比如这里我就加上了我的Lookup Weekly

475
00:17:54,175 --> 00:18:00,955
后面的-otxt-oosrt和-ovtt分别让它同时生成TXT文字稿

476
00:18:00,955 --> 00:18:03,295
SRT字幕和VTT字幕

477
00:18:03,295 --> 00:18:06,775
最后通过-off指定输出文件的位置和名称

478
00:18:06,775 --> 00:18:09,035
运行完成后会生成这些文件

479
00:18:09,035 --> 00:18:10,895
其中TXT是纯文字稿

480
00:18:10,895 --> 00:18:13,435
适合后续交给AI总结或者整理

481
00:18:13,435 --> 00:18:15,335
SRT是常见的字幕格式

482
00:18:15,335 --> 00:18:16,815
可以直接导入紧接软件

483
00:18:16,815 --> 00:18:19,735
VTT是主要用于网页播放器的字幕

484
00:18:19,735 --> 00:18:21,035
如果是8GB的Mac

485
00:18:21,035 --> 00:18:24,795
也可以先尝试这里的Large-V3-Turbo Q50

486
00:18:24,795 --> 00:18:25,735
电话模型

487
00:18:25,735 --> 00:18:28,675
如果实际转写时内存压力较大或者速度不理想

488
00:18:28,675 --> 00:18:30,955
再换成体积更小的small多语言模型

489
00:18:30,955 --> 00:18:33,435
不要下载来带EAN后制的英文专用模型

490
00:18:33,435 --> 00:18:35,095
因为它只针对英文优化

491
00:18:35,095 --> 00:18:36,415
如果需要中文转写

492
00:18:36,415 --> 00:18:37,695
也不要开启翻译参数

493
00:18:37,695 --> 00:18:39,715
否则模型会把内容翻译成英文

494
00:18:39,715 --> 00:18:41,315
而不是保留原始的语言

495
00:18:41,315 --> 00:18:42,255
那到这里呢

496
00:18:42,255 --> 00:18:44,415
整套本地i工作流基本已经闭环

497
00:18:44,415 --> 00:18:46,015
视频和录音可以通过whisper

498
00:18:46,015 --> 00:18:46,755
转写文字

499
00:18:46,755 --> 00:18:48,215
再交给前文做总结

500
00:18:48,215 --> 00:18:48,655
整理

501
00:18:48,655 --> 00:18:50,855
最后也可以存入前面搭建的知识库

502
00:18:50,855 --> 00:18:53,155
实现自己本地的内容管理系统

503
00:18:53,155 --> 00:19:00,935
前面我们已经分别完成了本地云转写

504
00:19:00,935 --> 00:19:03,275
OpenWebUI API和签问调用

505
00:19:03,275 --> 00:19:05,855
这就是使用N8N搭建一条自动化工作流

506
00:19:05,855 --> 00:19:07,515
上传音频或者视频后

507
00:19:07,515 --> 00:19:09,415
N8N自动调用Whisper来转写

508
00:19:09,415 --> 00:19:11,755
再把转写稿交给签问来整理

509
00:19:11,755 --> 00:19:15,075
最后返回摘要提纲标题和症结建议

510
00:19:15,075 --> 00:19:16,835
不需要每次手动复制粘贴

511
00:19:16,835 --> 00:19:19,115
首先把前面安装好的Whisper.cpp

512
00:19:19,115 --> 00:19:21,735
变成一个可以被其他程序调用的本地API

513
00:19:21,735 --> 00:19:24,215
先尝试允许Mac本机访问

514
00:19:24,215 --> 00:19:25,815
保持这个中端窗口开启

515
00:19:25,815 --> 00:19:28,135
再新开一个中端APP窗口进行测试

516
00:19:28,135 --> 00:19:30,195
如果能够正常返回转写结果

517
00:19:30,195 --> 00:19:32,055
Whisper API就已经运行成功

518
00:19:32,055 --> 00:19:34,675
后面N8N会运行在Darker容器里

519
00:19:34,675 --> 00:19:36,675
如果出现无法连接Whisper的情况

520
00:19:36,675 --> 00:19:38,475
可以按Ctrl加C停止服务

521
00:19:38,475 --> 00:19:39,395
再这样改

522
00:19:39,395 --> 00:19:40,515
这里需要特别注意

523
00:19:40,515 --> 00:19:43,955
Whisper server本身没有用户登陆和全线验证的功能

524
00:19:43,955 --> 00:19:46,035
所以使用0.0.0.0时

525
00:19:46,035 --> 00:19:48,375
只建议放在可信的家庭局网内

526
00:19:48,375 --> 00:19:49,955
不要进行路由器端口转发

527
00:19:49,955 --> 00:19:52,555
也不要把8178断口直接暴露到公网

528
00:19:52,555 --> 00:19:53,875
接下来安装N8N

529
00:19:53,875 --> 00:19:56,015
这里使用Docker Desktop来运行

530
00:19:56,015 --> 00:19:57,455
并固定N8N版本

531
00:19:57,455 --> 00:20:01,155
避免后续更新导致教程界面或者节点配置发生变化

532
00:20:01,155 --> 00:20:03,855
先从Docker官网下载安装Docker Desktop

533
00:20:03,855 --> 00:20:05,995
拖动到应用程序文件夹并启动

534
00:20:05,995 --> 00:20:07,355
确认Docker正常运行后

535
00:20:07,355 --> 00:20:09,535
再打开中端App输入下面的命令

536
00:20:09,535 --> 00:20:19,175
接下来生成一段随机的加密密钥

537
00:20:19,175 --> 00:20:25,175
把生成的结果替换到下面的XXX

538
00:20:25,175 --> 00:20:31,835
然后我们访问127.0.0.1

539
00:20:31,835 --> 00:20:32,895
冒号5678

540
00:20:32,895 --> 00:20:36,115
第一次进入需要创建N8N的本地管理员账号

541
00:20:36,115 --> 00:20:38,555
接下来我们来新建一条workflow工作流

542
00:20:38,555 --> 00:20:40,475
这套流程一共只有四个节点

543
00:20:40,475 --> 00:20:41,315
Webhook

544
00:20:41,315 --> 00:20:43,575
httprequest whisper转写

545
00:20:43,575 --> 00:20:45,675
httprequest签文整理

546
00:20:45,675 --> 00:20:47,215
respond to webhook

547
00:20:47,215 --> 00:20:48,875
第一个是webhook节点

548
00:20:48,875 --> 00:20:50,595
它相当于整条工作流的入口

549
00:20:50,595 --> 00:20:52,895
以后只要把视频post到这个地址

550
00:20:52,895 --> 00:20:54,355
工作流就会自动开始

551
00:20:54,355 --> 00:20:56,055
外部hook的具体设置如下

552
00:20:56,055 --> 00:20:58,055
没提到的设置保持不变即可

553
00:20:58,055 --> 00:21:10,295
第二个节点添加http request

554
00:21:10,295 --> 00:21:12,415
名称可以改成Whisper转写

555
00:21:12,415 --> 00:21:14,735
它负责把刚刚上传的音视频文件

556
00:21:14,735 --> 00:21:16,395
交给Mac上的Whisper server

557
00:21:16,395 --> 00:21:19,115
第二个节点HTTPRequest的具体设置如下

558
00:21:19,115 --> 00:21:20,995
没提到的设置保持不变即可

559
00:21:20,995 --> 00:21:24,195
值得注意的是N8MBinaryFile这一类型中

560
00:21:24,195 --> 00:21:27,255
InputDataFieldName需要填写WebHook节点

561
00:21:27,255 --> 00:21:29,415
实际收到的二进制字段名称

562
00:21:29,415 --> 00:21:31,075
点击前一个WebHook节点

563
00:21:31,075 --> 00:21:33,555
在Output的Binary中进行查看

564
00:21:33,555 --> 00:21:35,795
如果显示为Data那就填写为Data

565
00:21:35,795 --> 00:21:38,355
如果显示为Data0那就填写为Data0

566
00:21:38,355 --> 00:21:39,855
这个名称必须完全一致

567
00:21:39,855 --> 00:21:43,335
否则会出现TheItem has no binary field的报错

568
00:21:43,335 --> 00:21:45,895
第三个节点继续添加HTTPRequest

569
00:21:45,895 --> 00:21:47,495
名称改成前文整理

570
00:21:47,495 --> 00:21:50,615
这个节点负责把Whisper返回完整转写稿

571
00:21:50,615 --> 00:21:53,115
交给前面搭建好的OpenWebUI API

572
00:21:53,115 --> 00:21:54,995
第三个节点HTTPRequest

573
00:21:54,995 --> 00:21:55,915
具体设置如下

574
00:21:55,915 --> 00:21:57,995
没提到的设置保持不便即可

575
00:21:57,995 --> 00:22:10,095
接下来回到前面的JSON输入框

576
00:22:10,095 --> 00:22:12,295
把整个字段切换到Expression模式

577
00:22:12,295 --> 00:22:13,895
再粘贴下面的表达式

578
00:22:13,895 --> 00:22:15,135
它的逻辑很简单

579
00:22:15,135 --> 00:22:18,195
N8N自动读取Whisper转写节点里面的text

580
00:22:18,195 --> 00:22:20,795
再连同预设提示词一起发给亲吻

581
00:22:20,795 --> 00:22:26,035
最后添加Respond to Webhook节点

582
00:22:26,035 --> 00:22:29,015
它负责把整条工作流结果返回给定用者

583
00:22:29,015 --> 00:22:30,755
Respond with选择Json

584
00:22:30,755 --> 00:22:33,355
然后把Respond body切换成Expression模式

585
00:22:33,355 --> 00:22:34,555
粘贴下面的表达式

586
00:22:34,555 --> 00:22:36,515
Respond code保持200即可

587
00:22:45,135 --> 00:22:47,495
工作流设置完成以后

588
00:22:47,495 --> 00:22:48,895
先不要急着正式启用

589
00:22:48,895 --> 00:22:51,735
在N8N里点击Listen for Test Event

590
00:22:51,735 --> 00:22:54,095
让Webhook等待一次测试请求

591
00:22:54,095 --> 00:22:56,115
然后回到终端执行下面的命令

592
00:22:56,115 --> 00:22:58,815
注意要把XAI Token后面的站位内容

593
00:22:58,815 --> 00:23:01,455
替换成你前面实际设置的随机自书串

594
00:23:01,455 --> 00:23:08,815
如果整个流程正常

595
00:23:08,815 --> 00:23:11,155
你最终应该会得到类似这样的结果

596
00:23:11,155 --> 00:23:17,335
测试成功以后回到N8N的工作流程页面

597
00:23:17,335 --> 00:23:19,295
点击右上角的Publish发布

598
00:23:19,295 --> 00:23:23,095
发布后就不需要每次先点击Lessens for Test Event了

599
00:23:23,095 --> 00:23:26,595
正式Webhook地址也会从Webhook Test AI Video Notes

600
00:23:26,595 --> 00:23:28,755
变成Webhook AI Video Notes

601
00:23:28,755 --> 00:23:30,755
以后只要把视频传到这个接口

602
00:23:30,755 --> 00:23:33,075
整套流程就会自动变成Whisper

603
00:23:33,075 --> 00:23:35,075
在本地把视频转成文字

604
00:23:35,075 --> 00:23:38,975
亲吻再在本地完成摘要提纲标题和章节建议

605
00:23:38,975 --> 00:23:41,695
最后把转写稿和整理结果一起返回

606
00:23:41,695 --> 00:23:43,655
整个过程中的语音和文本内容

607
00:23:43,655 --> 00:23:45,695
都可以在自己的Mac上完成处理

608
00:23:45,695 --> 00:23:48,075
到这里整套工作流已经跑通了

609
00:23:48,075 --> 00:23:50,595
不过直接使用Curl调用正式WebHook时

610
00:23:50,595 --> 00:23:52,555
终端返回的是标准的Json

611
00:23:52,555 --> 00:23:54,515
所以会看到大量的写杠N

612
00:23:54,515 --> 00:23:56,115
引号和转译字符

613
00:23:56,115 --> 00:23:57,795
比如写杠N其实就是换

614
00:23:57,795 --> 00:23:58,775
并不是烂码

615
00:23:58,775 --> 00:24:02,495
只是Json保存Markdown和多项文字时的正常格式

616
00:24:02,495 --> 00:24:04,655
为了让最终结果更加适合阅读

617
00:24:04,655 --> 00:24:05,815
我们可以再用JQ

618
00:24:05,815 --> 00:24:08,915
把Json里的转写稿和千万之立结果提取出来

619
00:24:08,915 --> 00:24:10,275
如果已经安装Homebrew

620
00:24:10,275 --> 00:24:12,315
则可以执行Brew Install JQ

621
00:24:12,315 --> 00:24:13,415
安装完整后

622
00:24:13,415 --> 00:24:16,115
把刚才电用正式工作流命令稍微改一下

623
00:24:34,207 --> 00:24:36,407
哦对了如果你的Mac没有安装Homebrew

624
00:24:36,407 --> 00:24:38,607
也不一定非要额外安装JQ

625
00:24:38,607 --> 00:24:40,607
前面已经准备了Python3.11

626
00:24:40,607 --> 00:24:44,007
可以直接用Python自带的Json模块完成同样的处理

627
00:24:49,207 --> 00:24:52,207
视频最后在补一个实际使用时一定会碰到的问题

628
00:24:52,207 --> 00:24:55,607
Mac mini重启以后哪些东西需要重新打开

629
00:24:55,607 --> 00:24:58,407
我们前面搭载的模型和数据都保存在硬盘里

630
00:24:58,407 --> 00:25:00,407
不需要重新安装或者重新下载

631
00:25:00,407 --> 00:25:05,647
但Olama,OpenWebUI,WhisperServer和N8N这些运行中的服务需要重新启动

632
00:25:05,647 --> 00:25:07,307
建议按照下面这个顺序来

633
00:25:07,607 --> 00:25:09,247
首先启动最底层的Olama

634
00:25:09,247 --> 00:25:11,147
如果安装的是MicOS版的Olama

635
00:25:11,147 --> 00:25:12,847
直接打开OlamaApp即可

636
00:25:12,847 --> 00:25:15,747
也可以在中端里执行Open-AOlama

637
00:25:15,747 --> 00:25:18,267
然后可以检查Olama是否已经恢复

638
00:25:18,567 --> 00:25:20,967
如果能够正常返回Olama的版本信息

639
00:25:20,967 --> 00:25:23,267
就说明底层模型服务已经正常

640
00:25:23,267 --> 00:25:25,207
接下来再来启动OpenWebUI

641
00:25:25,207 --> 00:25:29,067
冲击后可以先确认MacMe的局域网IP地址有没有发生变化

642
00:25:29,067 --> 00:25:31,867
因为我们前面的启动命令里填写过这个地址

643
00:25:31,867 --> 00:25:33,547
如果地址没有发生变化

644
00:25:33,547 --> 00:25:34,767
就继续使用之前的IP

645
00:25:34,767 --> 00:25:35,867
如果变化了

646
00:25:35,867 --> 00:25:37,787
下面命令行里的也要一起替换

647
00:25:37,787 --> 00:25:39,647
这个中轮装口需要保持运行

648
00:25:39,647 --> 00:25:40,887
然后617访问

649
00:25:40,887 --> 00:25:42,847
127.0.0.1网号3000

650
00:25:42,847 --> 00:25:44,207
居于网中的其他设备

651
00:25:44,207 --> 00:25:45,767
仍然访问Mac mini的IP地址

652
00:25:45,767 --> 00:25:46,487
网号3000

653
00:25:46,487 --> 00:25:47,587
长期使用的话

654
00:25:47,587 --> 00:25:48,687
也可以在路由器里

655
00:25:48,687 --> 00:25:50,667
给Mac mini固定一个局网地址

656
00:25:50,667 --> 00:25:52,767
选择每次重建后来进行检查

657
00:25:52,767 --> 00:25:53,887
如果只是聊天

658
00:25:53,887 --> 00:25:55,467
知识库或者OpenWeb UI

659
00:25:55,467 --> 00:25:57,447
其实不用一直启动Whisper server

660
00:25:57,447 --> 00:25:59,027
只有需要运行视频转写

661
00:25:59,027 --> 00:26:01,027
或者后面的N8n视频工作流时

662
00:26:01,027 --> 00:26:01,967
再打开即可

663
00:26:01,967 --> 00:26:03,987
同样这个中端窗口需要保持运行

664
00:26:03,987 --> 00:26:05,707
可以打开另一个中端测试

665
00:26:05,707 --> 00:26:07,487
只要服务器能够这样响应

666
00:26:07,487 --> 00:26:09,707
就可以继续交给N8n来调用了

667
00:26:09,707 --> 00:26:11,747
接着打开Docker Desktop App

668
00:26:11,747 --> 00:26:13,607
因为我们创建N8n容器时

669
00:26:13,607 --> 00:26:16,087
已经设置了Restart Unless Stoped

670
00:26:16,087 --> 00:26:17,127
所以正常情况下

671
00:26:17,127 --> 00:26:18,487
只要Docker App启动

672
00:26:18,487 --> 00:26:20,627
之前的N8n容器也会自动回复运行

673
00:26:20,627 --> 00:26:22,807
不需要重新执行那一串Docker Run

674
00:26:22,807 --> 00:26:24,727
可以先检查Docker PS

675
00:26:24,727 --> 00:26:26,487
如果列表里能够看到N8n

676
00:26:26,487 --> 00:26:28,347
就说明N8N已经自动恢复

677
00:26:28,347 --> 00:26:29,387
如果没有启动

678
00:26:29,387 --> 00:26:31,687
可以手动执行Docker StartN8N

679
00:26:31,687 --> 00:26:32,947
然后浏览器打开

680
00:26:32,947 --> 00:26:35,207
127.0.0.1-5678

681
00:26:35,207 --> 00:26:36,947
如果能够进入N8N

682
00:26:36,947 --> 00:26:39,047
就说明自动化服务已经恢复正常

683
00:26:39,047 --> 00:26:42,167
到这里我们就从一台普通的Mac mini开始

684
00:26:42,167 --> 00:26:45,647
完成一套相对完整的家庭本地AI服务

685
00:26:45,647 --> 00:26:47,467
Olama负责运行AI模型

686
00:26:47,467 --> 00:26:50,447
OpenWeb UI提供对话界面和统一API

687
00:26:50,447 --> 00:26:53,327
Embedding和IAG负责自己的文档支援库

688
00:26:53,327 --> 00:26:56,187
GLM OCR处理图片和扫描件

689
00:26:56,187 --> 00:26:58,827
whisper.cpp负责视频录音转写

690
00:26:58,827 --> 00:27:01,387
再通过N8N把这些能力串成一套

691
00:27:01,387 --> 00:27:02,987
简单的自动化工作流

692
00:27:02,987 --> 00:27:05,287
这套方案其实不只是在Mac上

693
00:27:05,287 --> 00:27:06,507
跑了一个AI模型

694
00:27:06,507 --> 00:27:08,507
当对话文档图片

695
00:27:08,507 --> 00:27:11,027
音视频和自动化都连起来之后

696
00:27:11,027 --> 00:27:12,927
这台Mac mini才开始从一台

697
00:27:12,927 --> 00:27:13,887
跑模型的电脑

698
00:27:13,887 --> 00:27:16,127
变成一台可以长期放在家里

699
00:27:16,127 --> 00:27:18,767
由不同设备随时调用的AI服务器

700
00:27:18,767 --> 00:27:21,507
当然这只是一个非常技术的框架

701
00:27:21,507 --> 00:27:23,527
后面还可以继续加入更大的模型

702
00:27:23,527 --> 00:27:24,367
自己的资料库

703
00:27:24,367 --> 00:27:25,327
手机快据指令

704
00:27:25,327 --> 00:27:26,927
甚至更多自动化流程

705
00:27:26,927 --> 00:27:29,227
大家完全可以根据自己的Mac配置

706
00:27:29,227 --> 00:27:31,007
和实际需求继续往上搭

707
00:27:31,007 --> 00:27:33,367
先把这套技术环境稳定跑起来

708
00:27:33,367 --> 00:27:34,667
再逐步增加功能

709
00:27:34,667 --> 00:27:37,167
更适合第一次接触本地AI的各位

710
00:27:37,167 --> 00:27:37,627
好了

711
00:27:37,627 --> 00:27:39,607
那么以上就是本期视频的全部内容了

712
00:27:39,607 --> 00:27:41,367
如果觉得本期视频有所帮助的话

713
00:27:41,367 --> 00:27:42,227
还请不要忘记

714
00:27:42,227 --> 00:27:43,647
剪辑赛链加公主支持一下

715
00:27:43,647 --> 00:27:44,167
支持旅金

716
00:27:44,167 --> 00:27:45,547
我们下期视频再见

717
00:27:45,547 --> 00:27:46,087
拜拜
