
当你的直播间有了 AI 助手,粉丝再也不是对着空气说话
⚠️ 声明:这是一个 Vibe Coding 产物。
什么是 Vibe Coding?我用 AI 帮我写代码,大部分逻辑是 OpenCode 生成的,我负责"验收"和"提需求"。代码可能不够优雅,架构可能有过度设计或不合理的地方,但——它和我总有一个能跑,而且确实在帮我解决一些问题。
如果你发现了 bug,欢迎提 Issue;如果觉得代码写得烂——很正常,我也觉得有些地方写得离谱,但先TM跑起来再说。🫠
你是否遇到过这种情况:
开播时粉丝寥寥几条弹幕,根本来不及一一回复
有人问"主播什么时候开播""今天播什么""这个游戏可以联机吗""为什么我进不去主播的房间""XX为什么打不开",你需要一遍遍重复回答,甚至被干扰到正常的直播节奏与直播内容
想要一个 24/7 在线的小助手,帮你处理日常弹幕,感谢漏掉的礼物投喂
如果你也是B站主播,或者管理着一个粉丝群,可能对这些场景再熟悉不过。
今天要介绍的,是一个我正在开发维护的开源项目——BiliBili AI 弹幕姬。它可以做两件事:
实时监听 B站直播间的弹幕、礼物、SC(醒目留言)
用 AI 自动回复 你可以接入你想要的模型供应商API,也可以用本地模型
更重要的是——完全开源,本地运行,数据不出你的电脑(云端模型的数据收集分析除外)。
基于 B站 WebSocket 协议,毫秒级延迟接收直播间的所有动态(SC醒目留言暂不支持,后续看看有没有零成本方式进行开发测试):
🗨️ 文字弹幕
🎁 礼物(有人刷了小心心)
👤 用户进出通知(待接入)
支持两种匹配模式:
子串匹配:输入"开播",命中"今天什么时候开播"
正则表达式:输入^签到$,精准匹配单条"签到"
每个规则可以设置:
是否区分大小写
匹配范围(仅固定回复 / 仅 AI / 两者皆触发)
这是核心功能。支持两个大模型供应商:
每个供应商可以独立配置:
模型 ID
API Key / Endpoint
温度(Temperature)
Top P(采样策略)
最大 Token 数
请求超时
Ollama 专用:Keep-Alive、Base URL
不是所有弹幕都需要 AI。你可以为特定关键词设置预设回复:
包含"签到" → 回复"感谢签到~ 今天也要一起玩呀"
包含"点歌" → 回复"点歌功能已开启,请私信歌名"(后续考虑看看是否内置点歌姬功能)
固定回复毫秒级响应,不需要等待 AI 推理。
B站有严格的发弹幕频率限制(防风控)。你可以设置:
sendIntervalMs:两条弹幕之间的最小间隔(默认 1800ms)
maxPending:队列上限,防止积压
一个有点"过度设计"但足够硬核的架构:
┌─────────────────────────────────────────────────────────────────┐
│ 📺 B站弹幕服务器 │
│ (WebSocket 实时推送) │
└─────────────────────┬───────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 🐍 Python 弹幕核心 (danmaku-core) │
│ ├── receiver.py ─── WebSocket 连接 │
│ ├── sender.py ─── HTTP API 发弹幕 │
│ └── run.py ─── 入口 + stdio JSON-RPC │
└─────────────────────┬────────────────────────────────────────── ┘
│ stdio (进程间通信)
▼
┌─────────────────────────────────────────────────────────────────┐
│ ⚡ Electron 主进程 (electron-app) │
│ ├── danmaku-service.ts ─── 与 Python 通信 │
│ ├── ai-relay.ts ─── AI 中继 (重点) │
│ ├── quick-reply-engine.ts ─── 固定回复引擎 │
│ └── config-store.ts ─── 配置加密存储 │
└─────────────────────┬───────────────────────────────────────────┘
│ IPC
▼
┌─────────────────────────────────────────────────────────────────┐
│ 🎨 Vue 3 前端 (renderer) │
│ ├── ModelSettingsView.vue ─── AI 模型配置 │
│ ├── KeywordsView.vue ─── 关键词管理 │
│ ├── DanmakuView.vue ─── 弹幕监控面板 │
│ ├── RoomView.vue ─── 直播间控制 │
│ └── AboutView.vue ─── 主题切换 + 关于 │
└─────────────────────────────────────────────────────────────────┘
这是整个项目最"硬核"的部分。我重写了三层管道:
// 1. 原始响应
rawResponse = await askModelRaw(prompt, options)
// 2. 提取回复文本(从 thinking/reasoning 中分离)
replyText = extractReplyText(rawResponse, provider)
// 3. 检查是否需要跳过(毒弹幕防御)
if (shouldSkipReply(replyText)) return
关键设计:
Thinking 隔离:Ollama 的 <think/> 标签会被自动清理,不会发到直播间
毒弹幕防御:检测到 MAX_RETRIES=3 次失败后自动断开重连
竞态修复:disconnect 时等待正在处理的请求完毕,避免卡死
模型热切换:OpenCode + Ollama 原生 API 平滑切换
你的 B站 Cookie 和 API Key 不会裸存。采用:
AES-256-GCM 加密
密钥派生:机器指纹 SHA-512 + 随机 salt
支持导出/导入(可选择是否包含敏感信息)
以下是我在本地测试的截图:

实时显示所有收到的弹幕、礼物,按时间流排序。



下载并运行应用安装包:https://github.com/xgxdmx/BiliBili-AI-Danmaku/releases
打开「📺 直播间」页面,点击「🔑 B站登录」扫码
输入房间号,点击「▶️ 开始监听」
打开「🎯 关键词」添加匹配规则
打开「🤖 大模型」配置 AI(推荐 OpenCode,免费够用)
开播!
# 克隆仓库
git clone https://github.com/xgxdmx/BiliBili-AI-Danmaku.git
cd BiliBili-AI-Danmaku
# 📦 安装 Node 依赖
pnpm install
# 🐍 安装 Python 依赖
cd packages/danmaku-core && pip install -r requirements.txt
# 🚀 启动 Electron 开发模式 (hot-reload)
pnpm dev
# ✅ 仅类型检查
pnpm typecheck
# 🔨 构建
pnpm build
# 🎁 完整打包 (Python EXE + Electron 安装包)
pnpm package
# 🐍 只打包 Python 部分
pnpm package:python
# ⚡ 只打包 Electron 部分
pnpm package:electron
# 🧹 清理构建产物
pnpm package:clean
跨平台构建后期进行测试(咕咕咕~)
B站风控:建议发送间隔不要低于 1500ms,队列不要超过 100
API 费用:OpenCode 的 Go/ Zen 模型有免费额度,本地 Ollama 需要 GPU
敏感信息:配置文件在 .gitignore 中,不要提交到版本控制
Apache License 2.0,可免费商用。
这个项目起源于在B站UP主“麦克雷的小尾巴”的一次直播中用Gemini APP调用手机摄像头识别弹幕时的节目效果让我萌生了这个idea:想要一个用API接口实现的AI弹幕助手。
如果你也是 B站主播,或者对这个方向感兴趣,欢迎:
⭐ Star 一个:https://github.com/xgxdmx/BiliBili-AI-Danmaku
🌐 网站:https://www.xgxdmx.com/2026/04/21/2317/
🐛 提 Issue:遇到问题随时反馈
📥 Fork:欢迎贡献代码
下次开播的时候,让 AI 帮你回复——你只管专心内容。