💡阅读指南

本节是一个综合案例。我们会让 Agent 定期监控你关注的 B 站 UP 主,发现新视频后自动总结内容并推送给你。这个案例会用到前面学过的几个能力:浏览器操作、字幕提取,以及定时任务。

7.1 我们要做什么

你关注的 UP 主越来越多,每天打开 B 站一看,几十个视频堆在那里,根本看不过来。

与其自己一个个点进去看,不如让 Agent 帮你盯着:

code
如果某 up 主有新视频 → 提取字幕 → 生成摘要 → 推送给你

你只需要看摘要,感兴趣再去刷原视频。

这个流程涉及三个能力:

  • Computer Use / CDP:连接浏览器,访问 UP 主的个人主页,检测有没有新视频
  • 字幕提取:对新增视频提取字幕(之前在抖音章节学过)
  • 定时任务:让 Hermes 每天/每小时/自定义时间自动跑一遍这个流程

7.2 核心流程

整个流程分三步:

第一步:检查更新。 Hermes 连接你的浏览器,打开"特别关注"分组,获取分组里的 UP 主列表(注意 B 站的关注列表会分页,需要翻页才能拿全),然后依次访问每个 UP 主的主页,看一下最近发布的视频列表,判断有没有 24 小时内的新视频。这一步很快,因为只需要看视频列表的时间戳,不需要进入视频页面。

第二步:提取摘要。 发现新视频后,Agent 提取视频的字幕内容,然后用大模型生成一段 100 字左右的摘要。B 站提取字幕比抖音简单得多,但也有一些坑,具体我们在下一节讲。

第三步:推送通知。 把所有新视频的摘要整理成一份日报,发送到飞书或者其他你常用的渠道。

7.3 难点解析:B 站字幕提取

之前章节在处理抖音视频时,提取字幕是一件比较麻烦的事。绝大多数抖音视频无法直接获取字幕数据,我们需要让浏览器播放视频,然后通过 ASR 音频流反向识别出文字。这个过程需要实际播放视频,耗时长,而且识别结果不一定准确。只有少部分抖音视频可以直接获取到字幕。

B 站不一样,B 站相对来说比较开放。B 站的视频页面上直接嵌入了字幕的 JSON 数据,分为两种来源:UP 主上传的 CC 字幕(人工校对,质量高)和 AI 自动生成的字幕(语音识别转写,大部分视频都有)。不管哪种,Agent 都可以直接从页面数据里拿到完整的文本,不需要播放视频,不需要 ASR,拿到就是文字。

这个差异在批量处理时尤其明显。如果要监控十几个 UP 主的新视频,用 B 站的方式,几秒钟就能拿到所有字幕;用抖音的方式,每个视频都要播放一遍,时间成本完全不在一个量级。

字幕不是万能的:实测数据

不过"直接从页面拿字幕"这个说法容易让人产生误解,以为所有视频都能拿到字幕。实际上不是这样的。

我从 B 站热门榜随机抽了 10 个视频,逐一测试字幕抓取,结果如下:

  • 7 个视频成功拿到 AI 中文字幕,覆盖率都在 95% 以上
  • 3 个视频根本没有字幕,不管是 B 站的哪个 API 都拿不到

那 3 个拿不到字幕的视频有什么共同点?直播回放、vlog、娱乐解说类内容。这类视频 B 站没有为其生成 AI 字幕,换什么方法都没用。

alt text

换句话说,大约 30% 的视频(不准确,样本少)天生没有字幕。这不是技术问题,是 B 站本身的覆盖范围限制。做 UP 主监控器,你必须接受这个现实。既然无法拿到字幕,就应该有相应的降级方案。

之所以在这里讨论这个问题,而不是直接给出方案,其实是想告诉大家,当你遇到问题时,可以让 Hermes 去帮你做数据分析,给出方案:当我发现部分视频字幕获取失败时,就是让 Hermes 这么做的。

这个案例的分析例子很简单,但它在一定程度上说明了,在AI 时代,以前需要耗费很多精力去攻克的问题,现在可以很简单地解决。AI 当然不是任何场景都是万能的,但我认为AI 对于普通人来说,在某个领域就是万能的,但可能你想不到怎么用它。

技术路径:哪个 API 能用?

回到正题,怎么尽可能多地拿到原生字幕?

B 站提供了多个和视频相关的 API 端点,但不是所有都能拿到字幕的下载地址。我实测了几种路径:

/x/player/wbi/v2(推荐)。这是 B 站当前播放器实际加载字幕用的接口,返回的 subtitle_url 可以直接 curl 下载字幕 JSON。但有一个前提:必须带 CDP 浏览器的登录态 cookie。裸 curl 不带登录态的话,这个接口不会返回字幕 URL。

/x/player/v2(备选)。旧版播放器接口,对同一个视频返回的字幕文件路径和 wbi/v2 完全一样,只是 auth_key 不同。能用,但 wbi/v2 是 B 站当前播放器实际使用的权威版本,优先用它。

/x/web-interface/view(只能查有无字幕)。这个接口返回视频元数据,包含字幕列表和 ai_status 字段,但没有字幕的下载 URL。适合做第一步筛查——先看看这个视频有没有字幕,再决定要不要去调 wbi/v2。

裸 curl(无 CDP)。完全不可行。/x/player/wbi/v2 需要登录态,裸 curl 拿不到字幕 URL。

还有一个容易踩的坑:字幕 URL 里的 auth_key 参数有时间戳验证,获取后大约 5-10 分钟就过期。必须拿到 URL 立刻 curl 下载,不能存起来回头再用。

这些问题,如果以前手工写代码去分析,是很花时间的。但现在这些问题,Hermes 大概不到 10 分钟就给出了解决方案。

写到这里,我想起来,Anthropic 的 Mythos(Claude Mythos Preview)出来时有提到,这个模型扫出了很多知名开源软件的漏洞。这也许不是危言耸听。

推荐的实战流程

理论上,拿到完整的字幕后再让 LLM 做摘要,效果最好。我们会尽全力去拿字幕——能通过 API 直接获取就 API 拿,实在不行也可以像之前抖音那样,播放一遍后录屏转字幕。

但我们得考虑成本。逐视频播放录屏转字幕,开销不小。而我们的需求其实很多时候只是想看一下有没有更新、更新的大致内容是什么,并不需要完整的逐字稿。既然成本高于需求,那就降级,选择更轻量的方案。 根据实测结果,我推荐这样的字幕提取流程:

code
1. CDP 调 /x/web-interface/view → 获取 bvid、cid、字幕是否存在
2. 没有字幕 → 直接用视频标题和简介做摘要(这些视频到此为止)
3. 有字幕 → CDP 调 /x/player/wbi/v2 → 拿 subtitle_url
4. 立即 curl 下载字幕 JSON → 检查段数和覆盖率
5. 覆盖率太低 → 等 5-10 分钟重试(B 站可能刚推送转录结果)
6. 重试仍不合格 → 降级用视频标题和简介

一句话总结:wbi/v2 + CDP 登录态是唯一可行的完整路径。大约三成视频天生没字幕,这时候降级用视频描述就好。

7.4 监控范围:不要监控所有人

B 站重度用户可能关注了几百个 UP 主。理论上 Agent 可以一个个去检查,但这会非常消耗 Token,一次跑下来可能要几分钟甚至更久。

更实际的做法是:只监控一个分组。

你可以在 B 站把想重点关注的 UP 主放进"特别关注"分组,也可以自己创建一个新分组(比如叫"我的阿婆主")。这样 Agent 每次只需要检查这个分组里的十几个人,速度快、Token 消耗也小。

下面的提示词我们就以"特别关注"分组为例。

7.5 怎么写提示词?

打开 Hermes,把下面这段提示词直接发给它(把 xxxxx 换成你自己的 B 站 UID):

code
完成以下任务,只做一次:

1. CDP 连接我的Chrome浏览器,打开我的 B 站"特别关注"分组页面
   (https://space.bilibili.com/xxxxx/fans/follow?tagid=分组ID),
   获取这个分组里的所有 UP 主。
   注意:关注列表可能会分页,需要翻页获取完整列表。

2. 依次访问每个 UP 主的个人主页
   检查他们在过去 24 小时内是否发布了新视频。

3. 对于每个新视频,按以下流程提取内容:
   a. 先用 CDP 调 B 站 /x/web-interface/view 接口,
      检查这个视频是否有字幕(看 subtitle 字段是否为空)。
   b. 如果有字幕,用 CDP 调 /x/player/wbi/v2 接口获取字幕下载 URL,
      然后立即 curl 下载字幕 JSON(URL 有时效性,约 5-10 分钟过期,必须马上下载)。
      拿到字幕后,用字幕内容生成摘要。
   c. 如果没有字幕,直接读取视频的标题和简介,用这些信息生成摘要。

4. 把所有新视频的结果整理成一份日报,格式如下:
   - UP 主名称
   - 视频标题
   - 视频链接
   - 内容摘要(约 100 字,来源标注:字幕/视频简介)
   - 来源:字幕/视频简介

5. 把这份日报通过微信发送给我。

这段提示词最大的变化是在第 3 步加入了字幕抓取的完整流程和降级策略。Agent 不再是无脑去抓字幕,而是先判断有没有,有就抓 wbi/v2,没有就用视频简介兜底。

Hermes 会按照这个描述,用浏览器操作能力依次检查每个 UP 主。关键是把流程说清楚,让 Agent 知道每一步该做什么、做完之后把结果送到哪里。

我的测试结果: alt text

💡为了马上看到效果,上面用的是单次触发的方式。测试没问题之后,只需要补一句「每天早上 8 点帮我定时检查一下」,Hermes 就会自动把它注册为定时任务(cron),到点自己跑,不用你再手动触发。

7.6 优化建议

上面的提示词会让 Agent 提取每个新视频的完整字幕来做摘要。这对大多数视频来说没问题,但如果你关注的 UP 主经常发 30-40 分钟的长视频,完整字幕可能有上万字,全部喂给大模型做摘要会比较消耗 Token。

两种更省的做法:

只取部分字幕。 大部分视频的核心内容都在开头,让 Agent 只取字幕的前 500-1000 行做摘要,Token 消耗很小,效果也够用。

直接用视频简介。 如果你只是想知道 UP 主有没有更新、大概讲了什么,其实就没必要抓字幕了。很多 UP 主会写比较详细的视频简介,直接拿这个做摘要,性价比最高。提示词里把"提取字幕"改成"读取视频简介"就行。

我个人认为,字幕更适合用来留存技术类或高价值内容,把字幕提取出来,加入到自己的知识库,随时翻阅。但如果只是想简单了解一下信息、提醒自己是否感兴趣,视频简介足够了。

💡提示

这个案例的思路不限于 B 站。YouTube、小红书、Twitter,任何有内容更新的平台,都可以用同样的方式做监控。

7.7 ■ 学点英语

中文 English 音标 说明
监控脚本 Monitoring Script /ˈmɑːnɪtərɪŋ skrɪpt/ 定期检查目标状态并触发提醒的脚本
通知 Notification /ˌnoʊtɪfɪˈkeɪʃən/ 系统主动向用户发送的提醒消息
定时任务 Scheduled Task /ˈskedʒuːld tæsk/ 按固定时间或频率自动执行的任务
变化检测 Change Detection /tʃeɪndʒ dɪˈtekʃən/ 判断目标内容是否发生变化的过程