我用Electron和FastAPI搭了一个直播助手,主播说比SaaS好用
有个做MCN的朋友跟我说,他们用市面上的直播辅助工具,弹幕延迟3秒起步,AI分析是套壳ChatGPT,数据还要传到别人的服务器上。 主播不放心。谁愿意把自己直播间的实时数据交给第三方? 我说我给你做一个。 选型:为什么是Electron + FastAPI 一开始纠结过纯Web方案。部署简单,一个链接就能用。 但问题很硬:本地语音识别怎么办?模型推理怎么跑?浏览器搞不定这些。 最后拆成两层—— Electron壳子负责UI。React画仪表盘,弹幕流实时滚动,AI话术建议弹出来,体验和原生应用差不多。 FastAPI藏在后面做引擎。Python生态里ASR模型、LangChain、Qwen全是现成的,不用折腾。 两个进程通过本地WebSocket通信。各干各的,互不拖后腿。 弹幕这块,轮询是不可能的 抖音直播间的弹幕走的是WebSocket长连接。 有些人用HTTP轮询去抓,3秒一次。3秒在直播里是什么概念?一条弹幕发出来,主播回的时候观众已经刷过去二十条了。 我直接建持久连接,心跳保活,断线自动重连。弹幕来了就推到前端,延迟压到毫秒级。 礼物、评论、进入直播间,分别解析,分别处理。主播的仪表盘上能实时看到哪条弹幕值得回。 SenseVoice vs Whisper 语音转写试过两个。 Whisper很强,但它是"录完再转"的模式。直播场景不行,主播说完一句话,等两秒才出结果,节奏全乱了。 SenseVoice支持流式识别。音频切成小段,边说边转。延迟低,中文准确率也高。 实现上加了VAD(语音活动检测)。不是所有声音都送进模型,有人说话才处理,省算力也减少误识别。 AI话术:不是让AI替主播说话 这里踩过大坑。 第一版做得太激进了,AI直接生成完整话术让主播念。效果很尴尬——主播念得生硬,观众听得别扭。 后来改了思路。AI不替你说,AI告诉你"现在该说什么类型的词"。 比如弹幕里突然有人问"多少钱",AI会在屏幕上亮一个提示:“有人在问价格,准备报价”。 再比如连续五分钟没有互动,AI提醒:“节奏偏冷,可以抽奖或者抛话题”。 主播的判断力还在,AI只是多了一双眼睛。 复盘报告:直播结束不代表工作结束 每次直播结束,系统自动生成一份复盘。 话术时间线——几点几分说了什么关键信息。 弹幕热度图——哪个时段互动最密集。 观众留存拐点——哪些话术导致观众离开或停留。 这些数据主播自己看一遍就知道下次该怎么调整。 关键是全在本地。没有上传,没有云端存储,不用担心数据泄露。 技术栈最后长这样 前端:Electron 38 + React 18 + TypeScript 后端:Python 3.13 + FastAPI AI:LangChain + Qwen + SenseVoice 通信:WebSocket 打完包大概200MB出头。对于一个带本地AI推理能力的桌面应用来说,还行。 项目开源在 GitHub,有兴趣可以看看。 有问题随时提issue。