有个做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。