BiliBili AI 弹幕姬——B站直播间弹幕监听 + AI 自动回复小工具
星光下的梦想xg
编辑于 2026年04月21日 12:12

🎙️ BiliBili AI 弹幕姬:一个把 AI 接入 B站直播间的硬核方案

当你的直播间有了 AI 助手,粉丝再也不是对着空气说话


⚠️ 声明:这是一个 Vibe Coding 产物。

什么是 Vibe Coding?我用 AI 帮我写代码,大部分逻辑是 OpenCode 生成的,我负责"验收"和"提需求"。代码可能不够优雅,架构可能有过度设计或不合理的地方,但——它和我总有一个能跑,而且确实在帮我解决一些问题

如果你发现了 bug,欢迎提 Issue;如果觉得代码写得烂——很正常,我也觉得有些地方写得离谱,但先TM跑起来再说。🫠


📺 写在前面

你是否遇到过这种情况:

  • 开播时粉丝寥寥几条弹幕,根本来不及一一回复

  • 有人问"主播什么时候开播""今天播什么""这个游戏可以联机吗""为什么我进不去主播的房间""XX为什么打不开",你需要一遍遍重复回答,甚至被干扰到正常的直播节奏与直播内容

  • 想要一个 24/7 在线的小助手,帮你处理日常弹幕,感谢漏掉的礼物投喂

如果你也是B站主播,或者管理着一个粉丝群,可能对这些场景再熟悉不过。

今天要介绍的,是一个我正在开发维护的开源项目——BiliBili AI 弹幕姬。它可以做两件事:

  1. 实时监听 B站直播间的弹幕、礼物、SC(醒目留言)

  2. 用 AI 自动回复 你可以接入你想要的模型供应商API,也可以用本地模型

更重要的是——完全开源,本地运行,数据不出你的电脑(云端模型的数据收集分析除外)


✨ 它能做什么

1. 实时弹幕监听

基于 B站 WebSocket 协议,毫秒级延迟接收直播间的所有动态(SC醒目留言暂不支持,后续看看有没有零成本方式进行开发测试):

  • 🗨️ 文字弹幕

  • 🎁 礼物(有人刷了小心心)

  • 👤 用户进出通知(待接入)

2. 关键词精准匹配

支持两种匹配模式:

  • 子串匹配:输入"开播",命中"今天什么时候开播"

  • 正则表达式:输入^签到$,精准匹配单条"签到"

每个规则可以设置:

  • 是否区分大小写

  • 匹配范围(仅固定回复 / 仅 AI / 两者皆触发)

3. AI 自动回复

这是核心功能。支持两个大模型供应商:

每个供应商可以独立配置:

  • 模型 ID

  • API Key / Endpoint

  • 温度(Temperature)

  • Top P(采样策略)

  • 最大 Token 数

  • 请求超时

  • Ollama 专用:Keep-Alive、Base URL

4. 固定回复引擎

不是所有弹幕都需要 AI。你可以为特定关键词设置预设回复:

代码块
PlainText
自动换行
复制代码
包含"签到" → 回复"感谢签到~ 今天也要一起玩呀"
包含"点歌" → 回复"点歌功能已开启,请私信歌名"(后续考虑看看是否内置点歌姬功能)
复制成功

固定回复毫秒级响应,不需要等待 AI 推理。

5. 发送间隔控制

B站有严格的发弹幕频率限制(防风控)。你可以设置:

  • sendIntervalMs:两条弹幕之间的最小间隔(默认 1800ms)

  • maxPending:队列上限,防止积压


🏗️ 技术架构

一个有点"过度设计"但足够硬核的架构:

代码块
PlainText
自动换行
复制代码
┌─────────────────────────────────────────────────────────────────┐
│                     📺 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   ───  主题切换 + 关于                        │
└─────────────────────────────────────────────────────────────────┘
复制成功

核心亮点:AI 中继 (ai-relay.ts)

这是整个项目最"硬核"的部分。我重写了三层管道:

代码块
TypeScript
自动换行
复制代码
// 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

  • 支持导出/导入(可选择是否包含敏感信息)


🎯 实际效果

以下是我在本地测试的截图:

主界面

弹幕监控

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

弹幕监控界面

AI 配置

模型参数配置界面

AI弹幕回复状态预览

🚀 快速开始

安装与运行

  • 下载并运行应用安装包:https://github.com/xgxdmx/BiliBili-AI-Danmaku/releases

配置

  1. 打开「📺 直播间」页面,点击「🔑 B站登录」扫码

  2. 输入房间号,点击「▶️ 开始监听」

  3. 打开「🎯 关键词」添加匹配规则

  4. 打开「🤖 大模型」配置 AI(推荐 OpenCode,免费够用)

  5. 开播!


项目开发环境要求

项目拉取与构建

代码块
Shell
自动换行
复制代码
# 克隆仓库
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
复制成功

🛠️ 开发

代码块
Shell
自动换行
复制代码
# 🚀 启动 Electron 开发模式 (hot-reload)
pnpm dev

# ✅ 仅类型检查
pnpm typecheck

# 🔨 构建
pnpm build
复制成功

📦 打包发布

代码块
Shell
自动换行
复制代码
# 🎁 完整打包 (Python EXE + Electron 安装包)
pnpm package

# 🐍 只打包 Python 部分
pnpm package:python

# ⚡ 只打包 Electron 部分
pnpm package:electron

# 🧹 清理构建产物
pnpm package:clean
复制成功

跨平台构建后期进行测试(咕咕咕~)


🔧 技术栈


⚠️ 注意

  1. B站风控:建议发送间隔不要低于 1500ms,队列不要超过 100

  2. API 费用:OpenCode 的 Go/ Zen 模型有免费额度,本地 Ollama 需要 GPU

  3. 敏感信息:配置文件在 .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 帮你回复——你只管专心内容。