这是什么
一个运行在 B站的 AI Bot(账号叫 新顺德),当用户在评论区 @新顺德 时,自动分析视频内容并回复总结。
运行状态
| 项目 | 状态 |
|---|
| 服务器 | X230i Ubuntu (192.168.1.226) · 7×24 运行 |
| Bot 账号 | 新顺德 |
| 凭证有效期 | ~30 天(QR 扫码登录) |
| 轮询间隔 | 30 秒 |
| 技术栈 | bilibili-api-python + DeepSeek + bcut ASR |
已实现功能(16 项)
基础流程
视频 @新顺德 总结一下 → QR 凭证认证 → 获取字幕 → DeepSeek 处理 → 回复。
| # | 功能 | 说明 |
|---|
| 1 | QR 扫码登录 | QrCodeLogin 扫码获取凭证,持久化 JSON 文件 |
| 2 | @通知轮询 | 每 30 秒检查 session.get_at() |
| 3 | 字幕三层回退 | 手动字幕 → AI 字幕 → bcut ASR 语音转文字 |
| 4 | DeepSeek 总结 | deepseek-chat 模型,800 tokens 输出 |
| 5 | 观点提取 | 分析 UP 主核心立场和逻辑链条 |
| 6 | 歌词整理 | ASR 识别 → AI 校对准排版,适合音乐视频 |
| 7 | ASR 回退 | yt-dlp 下载音频 → bcut 云端免费转写 → LLM 整理 |
访问控制
| # | 功能 | 说明 |
|---|
| 8 | 关注者限定 | 仅已关注新顺德的用户可调用 |
| 9 | 每日次数限制 | 5 次/天/人(环境变量 DAILY_LIMIT 可调) |
| 10 | 主人白名单 | UID 329007652 跳过关注检查 + 次数限制 |
稳定性
| # | 功能 | 说明 |
|---|
| 11 | 去重持久化 | processed_ids.json — 重启不重复回复旧 @ |
| 12 | 崩溃安全 | 先存 ID 再处理,中途崩溃也不重复消费 API |
回复方式
| # | 功能 | 说明 |
|---|
| 13 | 评论区回复 | 默认模式,在 @ 的评论区公开回复 |
| 14 | 私信回复 | @新顺德 总结 私信 — 悄悄发 B站私信 |
| 15 | 邮箱发送 | @新顺德 总结 发邮件 → 三级降级:邮箱→私信→评论区 |
| 16 | 非视频兼容 | 动态/图文 @ 不会静默跳过,会提示仅支持视频 |
调用示例
@新顺德 总结一下 → 评论区 AI 总结
@新顺德 总结 私信 → B站私信送达
@新顺德 总结 发邮件 → QQ邮箱发送
@新顺德 观点提取 → 分析 UP 主立场
@新顺德 歌词 → ASR→歌词排版整理
踩坑记录
项目花了约 8 小时,踩了不少坑:
| 坑 | 根因 |
|---|
| 用户扫码 6 次失败 | check_state() 整数比较枚举,API 版本缺 save() 方法 |
| 重启后重复回复旧 @ | 没有持久化已处理 ID → 加 processed_ids.json |
| 动态/图文 @ 被静默吞掉 | business_id 过滤太死 → 放开 + 友好提示 |
| 主人被自己 Bot 拒绝 | 忘了给自己加白名单 → 加 BOT_OWNER_UID 跳过 |
| LLM API 被重复消费 | 先处理再存 ID → 改为先存 ID 再处理 |
一条铁律:任何第三方库调用前,先 dir() + 读源码确认 API 契约,不靠”我记得”写代码。
项目架构
用户 @新顺德
│
▼
bilibili-api-python ──→ QR 凭证认证
│
▼
get_at() 轮询 @通知
│
├─ 关注检查 + 每日次数
│
▼
获取字幕 (手动 → AI → bcut ASR)
│
▼
DeepSeek API ──→ 总结/观点/歌词
│
▼
回复 (邮箱 → 私信 → 评论区 三级降级)
待办
| 优先级 | 任务 |
|---|
| P2 | 私信回复交互优化 |
| P3 | 视频总结直接私信送达 |
| P4 | 接入 bilibili-mcp → Claude Desktop 调用 |
相关链接