start	end	text
0	11000	Hello,大家好,我是周日金。AI這兩年離咱們普通用戶越來越近。現在甚至不需要單獨買一台服務器,我們就可以直接把手頭閒置在Mac,變成一台屬於自己的本地AI服務器。
11000	27000	這次視頻我會從零開始帶大家把Olama、OpenWeb UI、REG、OCR、Whisper.cpp和N8N一步步串起來。這套方案的重點就是,模型和大部分數據都運行在自己本地的Mac上,也不要求特別高的配置。
27000	28800	如果大家对这类玩法感兴趣
28800	32640	后面还可以继续带大家折腾本地图片和视频生成
32640	35960	本地AI编程以及把AI介入Home Assistant
35960	38520	通过自然语言控制家里的智能设备
38520	41840	视频正式开始前先求一波一进三连加关注支持一下
41840	44920	这样以后有新的教程更新也能第一时间受到推送
44920	45940	非常感谢
45940	49280	接下来我们就从我的这台Mac mini开始
54400	55920	在开始下载模型之前
55920	58920	之前我们需要先在mac上安装olama
58920	63920	你可以把它理解为让普通用户可以在本地运行AI大模型的运行环境
63920	66920	直接前往olama的官网下载对应的安装包
66920	69920	然后拖动到macOS用程式文件夹就可以了
69920	72920	平时使用chatgpt cloud这类AI服务时
72920	74920	模型都是运行在云端服务器上
74920	81920	而olama要做的事情就是把像deepseek签问lama这类开源模型下载安装到你的mac上
81920	84920	让他们直接利用本机的cpu和gpu运行
84920	87160	安装好Olama并打开之后
87160	88520	下一步就是下载模型
88520	90000	不过这里需要注意啊
90000	92580	本地AI和ChatGPT这类云竿的模型
92580	93340	最大的区别
93340	95800	就是模型大小会直接影响运行体验
95800	98620	所以不能盲目追求越大的模型就越好
98620	101540	我这里使用的是一台M4入门款的Mac mini
101540	104920	采用16GB的同一列存加256GB的固态硬盘
104920	107300	确认Olama的服务在正常运行后
107300	109120	我们在MacOS的中段App中
109120	110420	输入这三条命令
110420	112260	它们分别负责不同的功能
112260	113880	第一个是大约模型
113880	115700	也就是本地AI的大脑
115700	116760	负责日常聊天
116760	117500	内容生成
117500	118740	总业资料等任务
118740	120960	其中4B代表40亿参数
120960	123680	Kill4KM代表经过4bit量化
123680	125640	可以在降低模型状的同时
125640	127180	保持不错的运行效果
127180	129680	是目前比较适合普通Mac的选择
129680	131440	第二个是向量模型
131440	132840	主要用于知识库检索
132840	135260	如果你以后想让AI读取自己的PDF
135260	136580	文档视频稿件
136580	138440	然后根据这些资料回答问题
138440	140060	就需要通过Embedding模型
140060	142180	先帮AI找到相关内容
142180	144800	第三个是欧塞亚文字试园模型
144800	145920	负责处理图片
145920	147480	扫描版PDF等内容
147480	149340	把图片里的文字提许出来
149340	151320	再交给语言模型进行分析
151320	153620	这里之所以选择千问的AR模型
153620	155720	是因为千问是目前比较成熟的
155720	156760	开源大模型之一
156760	159360	对中文理解和中文生成比较友好
159360	161420	其次是它提供的模型规格丰富
161420	163700	从4B到更大的参数版本
163700	165380	可以适配不同配置的Mac
165380	166160	还有一个是
166160	168200	它在欧拉玛里的支持比较完善
168200	170020	安装和电用也都比较简单
170020	171280	当然除了千问
171280	173820	DeepSeq,Lama等模型也都可以运行
173820	176100	大家可以根据自己的需求进行选择
176100	179020	那至于不同的Mac应该选择多大的模型
179020	181260	主要看新变性能和统一内存的大小
181260	184460	8GB内存的Mac建议先从4B级别模型开始
184460	187860	16GB内存运行4B会相对轻松
187860	191340	也可以在实际内存压力云雪情况下尝试9B
191340	194640	而24GB,32GB以及更高内存的Mac
194640	196480	则可以继续尝试更大的规格
196480	200180	但具体体验还会受到上下文长度和后台任务的影响
200180	201520	这里需要注意啊
201520	203400	模型标签不能随便改数字
203400	205260	如果继续使用千万3.5
205260	206940	目前Olama还提供9B
206940	209080	27B 35B等更大规格
209080	211120	具体名称一定以Olama模型库
211120	212500	实际存在的标签为准
212500	215160	那咱们还是先把本地AI服务器跑起来
215160	217420	后续再根据实际需求升级模型
217420	219680	接下来我们在Microsoft中的App中
219680	220840	输入以下命令
220840	221840	Olama List
221840	224120	查看是否已经全部下载完成
224120	226640	如果前面下载的模型都正常列出来
226640	227960	就可以来简单试一下
227960	229900	模型能不能在本地正常运行
229900	231080	输入制传命令
231080	232040	olama run
232040	232900	千万3.5
232900	234540	4b-q4km
234540	235900	然后随便发一句话
235900	236640	比如你好
236640	239080	如果能正常给出回复就没问题了
239080	241060	随后输入制传命令结束对话
241060	241540	Bye
241540	243660	之后我们就可以停止运行
243660	244620	以释放资源
244620	245780	输入制传命令
245780	246820	olama stop
246820	247640	千万3.5
247640	249080	4b-q4km
249080	250680	然后再输入制传命令
250680	251480	olama ps
251480	254140	查看这个AR大模型是否人在运行
254140	255460	此时应该为空
255460	258200	那么就说明我们的大模型已经没有在运行了
258200	260320	接下来咱们就要开始准备部署
260320	262360	家庭局网AI对话界面了
262360	270980	前面我们已经通过Olama把AI模型运行在Mac上
270980	273500	但是目前还需要通过中端的进行操作
273500	275280	对于日常使用来说不太方便
275280	277200	所以接下来我们就要给它搭建一个
277200	279060	类似ChatGP的网页界面
279060	280720	这里使用OpenWebUI
280720	283240	也就是让Olama负责运行AI模型
283240	285620	OpenWebUI负责提供交互界面
285620	286820	那部署完成后
286820	289300	家里的手机平板电脑都可以通过浏览器
289300	290340	访问这台Mac mini
290340	292300	直接使用自己的本地AI
292300	294600	能考虑到中国大陆用户的网络环境
294600	296920	这里直接通过Python安装OpenWeb UI
296920	299440	同时Olama继续只监听本机地址
299440	300920	不会直接暴露到网络中
300920	304160	本教程固定使用OpenWeb UI 0.11.0版本
304160	306580	不使用latest或滚动更新版本
306580	309380	避免版本变化导致操作流程不一炸
309380	311000	首先准备Python环境
311000	313020	如果你的Mac已经安装Homebrew
313020	316120	则可以输入brew install python at 3.11
316120	317540	如果没有安装Homebrew
317540	322200	也可以直接向Python官方网站下载安装Python 3.1对应的MicroOS安装包
322200	324660	后面如果会继续折腾这类工具
324660	326120	建议提前装好Homebrew
326120	327840	管理和升级会方便不少
327840	330540	接下来创建OpenWeb UI独立运行环境
330540	332840	避免影响系统里的其他Python项目
332840	335020	后续相关代码我不再一一进行解释
335020	338060	如果有看不懂可以查看代码上方的文本注释
346120	352640	然后通过轻滑镜像安装OpenWeb UI
352640	363800	安装完成后
363800	366040	第一次启动建议只允许本机访问
366040	367940	先完成账号和安全设置
367940	369300	等命令跑起来以后
369300	370880	不要关闭这个中端窗口
370880	373400	因为OpenWeb UI的服务就运行在这里
373400	377240	然后流量器打开
377240	378760	127.0.0.1
378760	379580	网号3000
379580	381700	第一次进入需要创建账号
381700	383840	第一个账号就会自动成为管理员
383840	388460	进入管理后台后
388460	389940	前往设置身份验证
389940	391460	把newsign apps关闭
391460	393460	也就是不允许新用户自由注册
393460	395800	同时暂时不要安装来源不明的
395800	397980	第三方Tools,Functions或Pipelines
397980	399660	接着就可以在流量器打开
399660	400980	127.0.1
400980	402440	网号11434
402440	404480	-API-version
404480	406880	确认Olama本地API正常响应
406880	408120	回到OpenWeb UI
408120	409640	再检查之前下载的
409640	411760	千万3.5 4B-TU4KM
411760	413780	是否已经出现在母型列表当中
413780	414880	确认没有问题后
414880	417060	在中端APP中按Ctrl-C
417060	418420	停止OpenWeb UI
418420	420160	接下来开放家庭局域网
420160	422020	实际在系统设置网络中
422020	423720	查看Mac mini的局域网IP
423720	426040	实际操作需要替完成你自己的IP
426040	427860	重新启动OpenWeb UI
427860	434340	现在Mac mini本机可以继续访问127.0.0.1
434340	435080	网号3000
435080	437960	并使用刚才创建的管理员账号进行登录
437960	439700	通过家庭网络里的手机
439700	441880	电脑则可以通过Mac mini.ipd设计
441880	443540	加段稿号3000来访问
443540	445500	同样使用刚才的账号来登录
445500	446900	这时候可以随便问你问题
446900	449380	看看局域网访问和模型交用是否正常
449380	451040	如果其他设备都无法打开
451040	452360	依次可以清查几个地方
452360	453600	最后提醒一下
453600	455640	这里搭建的家庭局域网AI服务器
455640	457400	不会把服务暴露到公网
457400	459600	因此不需要进行路由器短口转发
459600	462540	也不要直接把OpenWeb AI开放到互联网环境
462540	465000	而这样配置后保持终端App不关闭
465000	466700	AI模式运行在自己的Mac上
466700	468940	数据只在家庭网络里进行流转
468940	472860	同时手机平板和电脑都可以共享这一台本地AI服务器
478028	484368	前面OpenWeb UI已经可以这张访问了,接下来我们再给整个家庭AI服务器建立一个统一的API接口。
484368	486948	这样以后不管是N8N手机快捷指令
486948	489348	还是其他支持OpenAI API的程序
489348	491208	都统一连接OpenWeb UI
491208	493108	不需要直接访问底层的奥拉玛
493108	494148	这样的好处是
494148	497808	模型、照顽和权限都可以在OpenWeb UI这一层统一管理
497808	499048	后面更换模型时
499048	501088	也不用重新修改每一个应用
501088	502608	实际上咱们回到OpenWeb UI
502608	505068	点击左下角头像依次进入设置
505068	507568	身份验证找到API密钥并打开
507568	510188	如果界面提供API密钥端点限制
510188	511128	也一并开启
511128	512488	然后填写这个
512488	517368	这样生成的key就只允许访问模型列表和聊天接口
517368	519328	接下来进入账号API MIAO
519328	522048	点击右侧的显示创建新的API MIAO
522048	524368	生成MIAO通常会以SK开头
524368	527348	这个MIAO相当于访问我们家庭iF5系的密码
527348	529328	不要直接公开或者分享出去
529328	532648	如果后面准备长期让N8N这类的自动化工具使用
532648	535148	建议专门创建一个普通的本地账号
535148	537208	再用这个账号生成API MIAO
537208	539388	不要长期使用管理员账号的MIAO
539388	542048	因为MIAO会继续创建这个账号的权限
542048	544868	而且一个账号通常只保留一个API密钥
544868	546968	接着我们来测试接口是否正常
546968	549008	打开一个新的终端APP窗口
549008	552328	把下面的命令中的SK换成刚才生成的密钥
552328	553588	如果接口正常
553588	556888	终端会访问当前OpenWeb UI可以调用的模型列表
556888	560308	这里可以顺便记一下返回结果里模型队的真实ID
560308	563488	因为后面其他地方对用AI时就需要填写这个名称
563488	565528	接下来再来测试聊天接口
565528	568908	同样的记得把SK开头的这串换成刚才生成的密钥
568908	571508	而Model后面需要填写刚才模型列表里面
571508	572648	实际反规的ID
572648	575108	如果你下载的是其他签问或者其他模型
575108	576508	就替完成对应的模型
576508	579168	如果最后反规Json你能够看到API正常
579168	581748	就说明这一套接口已经可以正常使用了
582008	583848	签问3.5在开启思考时
583848	585248	反规内容里可能还会出现
585248	587108	Reasoning Content这一类字段
587108	588168	这是正常现象
588408	590608	到这里我们就相当于给整个家庭
590608	592448	AI服务器建了一个统一的入口
592748	595008	最底层人是Olama负责运行模型
595168	596508	上面的OpenWeb UI
596508	598208	统一管理模型和API
598348	600948	在网上则可以接N8N手机快点指令
600948	601988	或者其他应用
601988	603668	后面不管增加多少个客户端
603668	605468	都尽量连接OpenWeb UI
605468	607828	而不是让每台设备直接访问欧拉玛
607828	609628	整个架构会更容易管理
614628	617588	前面我们已经把本地AI和聊天的API都搭好了
617588	620188	接下来就再补上一个非常熟能功能
620188	621428	Cell文档知识库
621428	622748	也就是REG
622748	623948	REG可以列成
623948	625508	先从你的资料里找内容
625508	627068	再交给AI声称回答
627068	628748	这样以后不管是自己的PDF
628748	629468	说明书
629468	630108	工作文档
630108	630908	还是视频稿
630908	632028	都可以放进知识库
632028	634268	让AI尽量根据这些资料来回答
634268	636248	而不是只靠模型本身的记忆
636248	638988	首先进入OpenWeb UI试试里的文档页面
638988	640888	轻入模型引擎选择Olama
640888	642248	API MIO可以留空
642248	644668	地址填写127.0.0.1
644668	646028	冒号11434
646028	647108	轻入模型输入
647108	648828	我们在视频一开始就下载好的
648828	650888	轻入3-embedding0.6b
650888	652448	而这里顺便解释一下
652448	653868	这个模型不负责聊天
653868	655288	它的工作是把文档
655288	657308	转完成便于检索的向量数据
657308	658508	只要你提问以后
658508	659728	系统才能快速找到
659728	661148	和问题最相关的资料
661148	663288	其他参数可以先按照这一套来设置
663288	664628	大部分是我认的
664628	666388	这些参数主要是在减速效果
666388	667668	和上下文本占用之间
667668	669208	做一个比较稳妥的平衡
669208	670748	比如快大小可以列列成
670748	672668	每次把文档切成多大片段
672668	674808	快重叠则是在相邻片段之间
674808	676008	保留的部分重复内容
676008	677848	避免一句话刚好被重点切断
677848	679448	TableK代表每次提问
679448	681508	最多取回多少个相关片段
681508	682968	这里先设置为3
682968	684188	并不是越大越好
684188	685568	因为塞进太多资料
685568	687988	反而会占模型有限的上下文空间
687988	690268	接下来我们创建一个非常简单的测试文件
690268	692728	方便确认RIG是否真的正常工作
692728	695848	用任意文本编定器新建一个TXT文本
695848	698688	如果你用的是MicroOS自带的文本编辑App
698688	700828	记得在菜单里选择制作手文本
700828	702588	比如里面写上这些内容
702588	705448	然后保存为家庭AI测试资料.txt
705448	706628	回到OpenWeb UI
706628	708528	找到左侧边来的工作空间
708528	710068	再点击顶部的知识库
710068	711948	最后点击右上角的创建
711948	714148	名称填写家庭AI测试库
714148	715408	目标可以简单写真
715408	718648	用于测试本地RIG文档检索和应用功能
718648	720048	知识库创建完之后
720048	722428	再点击右上角的加号选择上传文件
722428	724948	把刚才的TXD文件上传进去
724948	727768	后面也可以上传带有文字层的PDF
727768	729688	DOCX或Markdown文档
729688	730608	上传完之后
730608	732328	在新兑化的聊天输入框里
732328	734688	通过警号手动附加这个知识库
734688	736728	而我这里为了教程演示方便
736728	737668	先手动选择
737668	739708	因为小参数模型主动判断
739708	741868	什么时候动用知识库有时候不够稳定
741868	743668	然后我们可以问一个问题
743668	745088	只依据知识库回答
745088	747648	项目代号和设备维护时间分配是什么
747648	748808	请给出引用
748808	750048	正常情况下
750048	750968	耐心等待一会儿
750968	753448	他应该回答项目代号是70
753448	756368	设备维护时间是每月第一周六上午10点
756368	759068	而且回答旁边能够看到对应的资料引用
759068	762888	那么这套最基础的REG知识库就算大奖成功了
762888	763988	不过这样配置下来
763988	766088	你可能会发现还有一个地方容易踩坑
766088	767868	如果你的PDF是扫描件
767868	770048	本身没有可以复制的文字层
770048	772008	就不要拿它来测试REG了
772008	774788	因为知识库首先需要能够读取里面的文字
774788	776048	才能进行后续的处理
776048	778308	所以这种文件就需要先经过OCR
778308	781328	把图片里的文字设备成TXC或者Markdown
781328	783268	再上传到知识库来进行处理
783268	787388	接下来我们就继续把本地OCR的功能也接进来
787388	794788	前面我们已经让AI能够读取自的文档
794788	796988	接下来再补上图片理解和OCR
796988	799808	也就是让这台本地AI不只能读文字
799808	800948	还可以看图片
800948	802868	那这里先区分两个概念
802868	805448	普通图片理解更适合看一张图里有什么
805448	806708	界面再显示什么
806708	808488	再顺便识别其中的文字
808488	811488	OCR则更专注于把图片里的文字
811488	814128	表格或者图表内容尽可能提取出来
814128	816968	先在OpenWeb UI里选择我们前面使用的
816968	819348	切纹3.5 4B-KL4KM
819348	820808	如果你的Mac配置更高
820808	822068	也可以用9B的版本
822068	824908	上传一张同时包含物体和文字图片
824908	825588	然后输入
825588	826788	先描述画面内容
826788	828528	再逐项提取可见文字
828528	830488	不确定的部分标注为不确定
830488	831588	不需要自信补圈
831588	833728	这里可以分别拿产品包装
833728	834708	软件界面截图
834708	835468	中文表格
835468	839168	或者已经做好隐私透明的发票和数据照片来测试一下
839168	841128	这样可以比较直观的判断出
841128	842948	模型到底是理解了图片内容
842948	845388	还是只是把里面的文字给识别出来
845388	847468	如果你出现类似我这样的提示
847468	849148	就前往OpenWeb UI的设置
849148	849708	模型
849708	851548	找到刚才你前面使用的模型
851548	852668	进入编辑界面
852668	855728	找到高级参数下的NUM CTX OLAMA
855728	857468	针对我16GB的Mac mini
857468	859088	将数字更改为8192
859088	861168	然后重复上的操作就可以了
861168	862908	如果我们的目标不是理解图片
862908	865368	而是尽可能把图片里的文字给提取出来
865368	868528	就可以使用我们前面已经下载好的GLM OCR
868528	870048	OCR模型运行前
870048	872288	如果较大的千万模型还占着同一印寸
872288	873648	先可以把它停掉
873648	875848	接下来我们准备好需要识别图片
875848	877468	放到一个统一的文件夹中
877468	878988	比如我这个目录下
878988	881248	对于我们Mac仿达中的用户文件夹
881248	882228	AI-TEST
882228	884628	这里手动新建一个TEST的文件夹就可以了
884628	886628	对于需要识别不同的内容图片
886628	888668	比如普通收据表格图表
888668	890088	都可以使用不同的命令
890088	891768	注意命令结尾的文件名
891768	893768	需要换成你自己图片的文件名
893768	894868	第一次测试时
894868	896568	建议每次只处理一张图片
896568	898928	先确认整套工作流能够稳定运行
898928	900948	如果遇到扫描PDF
900948	903888	也不用一开始就折腾完整的PDF解析工具
903888	905288	最简单办法就是
905288	907468	先用MicOS自带的预览打开PDF
907468	909188	把其中页导成PN器
909188	911488	再交给GLM OCR进行处理
911488	913668	等确认单页OCR没问题后
913668	916208	再考虑批量处理整份文档
916208	917988	识别出来内容还可以继续利用
917988	919968	保存成Tek-C或者Markdown
919968	922568	再上传到我们上一节创建的知识库
922568	924228	然后交给签问做摘要
924228	926128	自端整理或者检索问答
926128	928048	那么整个流程就传起来了
928048	930988	如果OCR出现空白重复或者乱码
930988	932288	可以先更新OLAMA
932288	934268	然后每次只处理一张图片
934268	935428	图片过大时
935428	939048	可以把长辨锁到大约1600至2200像素
939048	941148	并优先使用PNG或者GPG
941148	943968	同时检查原图有没有明显模糊
943968	945068	倾斜反光
945068	947048	这些都会直接影响识别效果
947048	949048	好
952515	964255	那除了文字和图片之外,本DI还有一个非常实用的场景,就是处理视频和录音。比如把会议录音转成文字,把视频自动生成字幕,或者把自己的素材库快速整理成可搜索的文本。
964255	966175	这里我们使用Whisper.cpp
966175	968615	它是Whisper模型C++实现的
968615	970615	针对Apple Silicon提供Mental加速
970615	973355	可以直接利用Mac的GPU进行本地转写
973355	975235	首先安装需要用到的工具
975235	977835	FMMP1G负责处理音频格式
977835	980155	Whisper.cpp负责语音识别
980155	982095	如果你的Mac已经安装HomeBrew
982095	983935	可以直接输入代码来进行安装
983935	985675	如果你仍然没有安装HomeBrew
985675	988295	安装Whisper.cpp可以走原码编译路线
988295	989795	不过对于普通用户来说
989795	991795	这一步会比HomeBrew更复杂一些
991795	994355	还需要提前安装Xcode command line tools
994355	995695	这里就不展开了
995695	996615	安装完整后
996615	999135	可以通过下面两个命令来确认是否正常
999135	1000735	接下来下载Whisper模型
1000735	1002195	我这里选择的是这个
1002195	1004555	这是一个支持中文和多语言的模型
1004555	1006815	相比完整LARGE模型体积更小
1006815	1008715	同时保留了比较好的转眼效果
1008715	1010155	更适合Mac本地运行
1010155	1013155	我们先创建存放模型和临时文件的目录
1013155	1014195	然后下载模型
1014195	1017235	下载完整后再计算一次SHA-1的值
1017235	1021135	方便和Whisper.cpp模型文档公开的接应值进行核对
1021135	1023535	模型准备好后就可以开始处理视频
1023535	1026255	假设你的视频文件位于这个文件夹
1026255	1029335	也就是MicroOS用户目录的影片文件夹当中
1029335	1032075	大家根据自己的实际文件存储位置进行修改
1032075	1037055	首先使用FMMP1G把视频里的音频转换成Whisper更适合处理的格式
1037055	1038895	这些几个参数简单介绍一下
1038895	1041255	VN表示去掉视频只保留音频
1041255	1044635	AR16表示转换成16000Hz的采样率
1044635	1046315	AC1表示单身道
1046315	1051075	PCM-S16LE则是转换成Whisper更容易处理的WAV格式
1051075	1054355	接下来运行Whisper同时生成文字稿和字幕文件
1054355	1057255	-m用来指定我们前面下载的Whisper模型
1057255	1059915	-f指定需要转写的音频文件
1059915	1063495	-lzh告诉我们模型这段文字主要内容是中文
1063495	1067355	-prompt则可以提前提供一些容易识别错误的中文名词
1067355	1070395	比如Mac mini,Apple Silicon,Olama和签问
1070395	1071935	对于科技类视频有其有用
1071935	1074175	比如这里我就加上了我的Lookup Weekly
1074175	1080955	后面的-otxt-oosrt和-ovtt分别让它同时生成TXT文字稿
1080955	1083295	SRT字幕和VTT字幕
1083295	1086775	最后通过-off指定输出文件的位置和名称
1086775	1089035	运行完成后会生成这些文件
1089035	1090895	其中TXT是纯文字稿
1090895	1093435	适合后续交给AI总结或者整理
1093435	1095335	SRT是常见的字幕格式
1095335	1096815	可以直接导入紧接软件
1096815	1099735	VTT是主要用于网页播放器的字幕
1099735	1101035	如果是8GB的Mac
1101035	1104795	也可以先尝试这里的Large-V3-Turbo Q50
1104795	1105735	电话模型
1105735	1108675	如果实际转写时内存压力较大或者速度不理想
1108675	1110955	再换成体积更小的small多语言模型
1110955	1113435	不要下载来带EAN后制的英文专用模型
1113435	1115095	因为它只针对英文优化
1115095	1116415	如果需要中文转写
1116415	1117695	也不要开启翻译参数
1117695	1119715	否则模型会把内容翻译成英文
1119715	1121315	而不是保留原始的语言
1121315	1122255	那到这里呢
1122255	1124415	整套本地i工作流基本已经闭环
1124415	1126015	视频和录音可以通过whisper
1126015	1126755	转写文字
1126755	1128215	再交给前文做总结
1128215	1128655	整理
1128655	1130855	最后也可以存入前面搭建的知识库
1130855	1133155	实现自己本地的内容管理系统
1133155	1140935	前面我们已经分别完成了本地云转写
1140935	1143275	OpenWebUI API和签问调用
1143275	1145855	这就是使用N8N搭建一条自动化工作流
1145855	1147515	上传音频或者视频后
1147515	1149415	N8N自动调用Whisper来转写
1149415	1151755	再把转写稿交给签问来整理
1151755	1155075	最后返回摘要提纲标题和症结建议
1155075	1156835	不需要每次手动复制粘贴
1156835	1159115	首先把前面安装好的Whisper.cpp
1159115	1161735	变成一个可以被其他程序调用的本地API
1161735	1164215	先尝试允许Mac本机访问
1164215	1165815	保持这个中端窗口开启
1165815	1168135	再新开一个中端APP窗口进行测试
1168135	1170195	如果能够正常返回转写结果
1170195	1172055	Whisper API就已经运行成功
1172055	1174675	后面N8N会运行在Darker容器里
1174675	1176675	如果出现无法连接Whisper的情况
1176675	1178475	可以按Ctrl加C停止服务
1178475	1179395	再这样改
1179395	1180515	这里需要特别注意
1180515	1183955	Whisper server本身没有用户登陆和全线验证的功能
1183955	1186035	所以使用0.0.0.0时
1186035	1188375	只建议放在可信的家庭局网内
1188375	1189955	不要进行路由器端口转发
1189955	1192555	也不要把8178断口直接暴露到公网
1192555	1193875	接下来安装N8N
1193875	1196015	这里使用Docker Desktop来运行
1196015	1197455	并固定N8N版本
1197455	1201155	避免后续更新导致教程界面或者节点配置发生变化
1201155	1203855	先从Docker官网下载安装Docker Desktop
1203855	1205995	拖动到应用程序文件夹并启动
1205995	1207355	确认Docker正常运行后
1207355	1209535	再打开中端App输入下面的命令
1209535	1219175	接下来生成一段随机的加密密钥
1219175	1225175	把生成的结果替换到下面的XXX
1225175	1231835	然后我们访问127.0.0.1
1231835	1232895	冒号5678
1232895	1236115	第一次进入需要创建N8N的本地管理员账号
1236115	1238555	接下来我们来新建一条workflow工作流
1238555	1240475	这套流程一共只有四个节点
1240475	1241315	Webhook
1241315	1243575	httprequest whisper转写
1243575	1245675	httprequest签文整理
1245675	1247215	respond to webhook
1247215	1248875	第一个是webhook节点
1248875	1250595	它相当于整条工作流的入口
1250595	1252895	以后只要把视频post到这个地址
1252895	1254355	工作流就会自动开始
1254355	1256055	外部hook的具体设置如下
1256055	1258055	没提到的设置保持不变即可
1258055	1270295	第二个节点添加http request
1270295	1272415	名称可以改成Whisper转写
1272415	1274735	它负责把刚刚上传的音视频文件
1274735	1276395	交给Mac上的Whisper server
1276395	1279115	第二个节点HTTPRequest的具体设置如下
1279115	1280995	没提到的设置保持不变即可
1280995	1284195	值得注意的是N8MBinaryFile这一类型中
1284195	1287255	InputDataFieldName需要填写WebHook节点
1287255	1289415	实际收到的二进制字段名称
1289415	1291075	点击前一个WebHook节点
1291075	1293555	在Output的Binary中进行查看
1293555	1295795	如果显示为Data那就填写为Data
1295795	1298355	如果显示为Data0那就填写为Data0
1298355	1299855	这个名称必须完全一致
1299855	1303335	否则会出现TheItem has no binary field的报错
1303335	1305895	第三个节点继续添加HTTPRequest
1305895	1307495	名称改成前文整理
1307495	1310615	这个节点负责把Whisper返回完整转写稿
1310615	1313115	交给前面搭建好的OpenWebUI API
1313115	1314995	第三个节点HTTPRequest
1314995	1315915	具体设置如下
1315915	1317995	没提到的设置保持不便即可
1317995	1330095	接下来回到前面的JSON输入框
1330095	1332295	把整个字段切换到Expression模式
1332295	1333895	再粘贴下面的表达式
1333895	1335135	它的逻辑很简单
1335135	1338195	N8N自动读取Whisper转写节点里面的text
1338195	1340795	再连同预设提示词一起发给亲吻
1340795	1346035	最后添加Respond to Webhook节点
1346035	1349015	它负责把整条工作流结果返回给定用者
1349015	1350755	Respond with选择Json
1350755	1353355	然后把Respond body切换成Expression模式
1353355	1354555	粘贴下面的表达式
1354555	1356515	Respond code保持200即可
1365135	1367495	工作流设置完成以后
1367495	1368895	先不要急着正式启用
1368895	1371735	在N8N里点击Listen for Test Event
1371735	1374095	让Webhook等待一次测试请求
1374095	1376115	然后回到终端执行下面的命令
1376115	1378815	注意要把XAI Token后面的站位内容
1378815	1381455	替换成你前面实际设置的随机自书串
1381455	1388815	如果整个流程正常
1388815	1391155	你最终应该会得到类似这样的结果
1391155	1397335	测试成功以后回到N8N的工作流程页面
1397335	1399295	点击右上角的Publish发布
1399295	1403095	发布后就不需要每次先点击Lessens for Test Event了
1403095	1406595	正式Webhook地址也会从Webhook Test AI Video Notes
1406595	1408755	变成Webhook AI Video Notes
1408755	1410755	以后只要把视频传到这个接口
1410755	1413075	整套流程就会自动变成Whisper
1413075	1415075	在本地把视频转成文字
1415075	1418975	亲吻再在本地完成摘要提纲标题和章节建议
1418975	1421695	最后把转写稿和整理结果一起返回
1421695	1423655	整个过程中的语音和文本内容
1423655	1425695	都可以在自己的Mac上完成处理
1425695	1428075	到这里整套工作流已经跑通了
1428075	1430595	不过直接使用Curl调用正式WebHook时
1430595	1432555	终端返回的是标准的Json
1432555	1434515	所以会看到大量的写杠N
1434515	1436115	引号和转译字符
1436115	1437795	比如写杠N其实就是换
1437795	1438775	并不是烂码
1438775	1442495	只是Json保存Markdown和多项文字时的正常格式
1442495	1444655	为了让最终结果更加适合阅读
1444655	1445815	我们可以再用JQ
1445815	1448915	把Json里的转写稿和千万之立结果提取出来
1448915	1450275	如果已经安装Homebrew
1450275	1452315	则可以执行Brew Install JQ
1452315	1453415	安装完整后
1453415	1456115	把刚才电用正式工作流命令稍微改一下
1474207	1476407	哦对了如果你的Mac没有安装Homebrew
1476407	1478607	也不一定非要额外安装JQ
1478607	1480607	前面已经准备了Python3.11
1480607	1484007	可以直接用Python自带的Json模块完成同样的处理
1489207	1492207	视频最后在补一个实际使用时一定会碰到的问题
1492207	1495607	Mac mini重启以后哪些东西需要重新打开
1495607	1498407	我们前面搭载的模型和数据都保存在硬盘里
1498407	1500407	不需要重新安装或者重新下载
1500407	1505647	但Olama,OpenWebUI,WhisperServer和N8N这些运行中的服务需要重新启动
1505647	1507307	建议按照下面这个顺序来
1507607	1509247	首先启动最底层的Olama
1509247	1511147	如果安装的是MicOS版的Olama
1511147	1512847	直接打开OlamaApp即可
1512847	1515747	也可以在中端里执行Open-AOlama
1515747	1518267	然后可以检查Olama是否已经恢复
1518567	1520967	如果能够正常返回Olama的版本信息
1520967	1523267	就说明底层模型服务已经正常
1523267	1525207	接下来再来启动OpenWebUI
1525207	1529067	冲击后可以先确认MacMe的局域网IP地址有没有发生变化
1529067	1531867	因为我们前面的启动命令里填写过这个地址
1531867	1533547	如果地址没有发生变化
1533547	1534767	就继续使用之前的IP
1534767	1535867	如果变化了
1535867	1537787	下面命令行里的也要一起替换
1537787	1539647	这个中轮装口需要保持运行
1539647	1540887	然后617访问
1540887	1542847	127.0.0.1网号3000
1542847	1544207	居于网中的其他设备
1544207	1545767	仍然访问Mac mini的IP地址
1545767	1546487	网号3000
1546487	1547587	长期使用的话
1547587	1548687	也可以在路由器里
1548687	1550667	给Mac mini固定一个局网地址
1550667	1552767	选择每次重建后来进行检查
1552767	1553887	如果只是聊天
1553887	1555467	知识库或者OpenWeb UI
1555467	1557447	其实不用一直启动Whisper server
1557447	1559027	只有需要运行视频转写
1559027	1561027	或者后面的N8n视频工作流时
1561027	1561967	再打开即可
1561967	1563987	同样这个中端窗口需要保持运行
1563987	1565707	可以打开另一个中端测试
1565707	1567487	只要服务器能够这样响应
1567487	1569707	就可以继续交给N8n来调用了
1569707	1571747	接着打开Docker Desktop App
1571747	1573607	因为我们创建N8n容器时
1573607	1576087	已经设置了Restart Unless Stoped
1576087	1577127	所以正常情况下
1577127	1578487	只要Docker App启动
1578487	1580627	之前的N8n容器也会自动回复运行
1580627	1582807	不需要重新执行那一串Docker Run
1582807	1584727	可以先检查Docker PS
1584727	1586487	如果列表里能够看到N8n
1586487	1588347	就说明N8N已经自动恢复
1588347	1589387	如果没有启动
1589387	1591687	可以手动执行Docker StartN8N
1591687	1592947	然后浏览器打开
1592947	1595207	127.0.0.1-5678
1595207	1596947	如果能够进入N8N
1596947	1599047	就说明自动化服务已经恢复正常
1599047	1602167	到这里我们就从一台普通的Mac mini开始
1602167	1605647	完成一套相对完整的家庭本地AI服务
1605647	1607467	Olama负责运行AI模型
1607467	1610447	OpenWeb UI提供对话界面和统一API
1610447	1613327	Embedding和IAG负责自己的文档支援库
1613327	1616187	GLM OCR处理图片和扫描件
1616187	1618827	whisper.cpp负责视频录音转写
1618827	1621387	再通过N8N把这些能力串成一套
1621387	1622987	简单的自动化工作流
1622987	1625287	这套方案其实不只是在Mac上
1625287	1626507	跑了一个AI模型
1626507	1628507	当对话文档图片
1628507	1631027	音视频和自动化都连起来之后
1631027	1632927	这台Mac mini才开始从一台
1632927	1633887	跑模型的电脑
1633887	1636127	变成一台可以长期放在家里
1636127	1638767	由不同设备随时调用的AI服务器
1638767	1641507	当然这只是一个非常技术的框架
1641507	1643527	后面还可以继续加入更大的模型
1643527	1644367	自己的资料库
1644367	1645327	手机快据指令
1645327	1646927	甚至更多自动化流程
1646927	1649227	大家完全可以根据自己的Mac配置
1649227	1651007	和实际需求继续往上搭
1651007	1653367	先把这套技术环境稳定跑起来
1653367	1654667	再逐步增加功能
1654667	1657167	更适合第一次接触本地AI的各位
1657167	1657627	好了
1657627	1659607	那么以上就是本期视频的全部内容了
1659607	1661367	如果觉得本期视频有所帮助的话
1661367	1662227	还请不要忘记
1662227	1663647	剪辑赛链加公主支持一下
1663647	1664167	支持旅金
1664167	1665547	我们下期视频再见
1665547	1666087	拜拜
