dsh-bili-pond
yoyolnfu/dsh-bili-pond
让蓝色大肥鱼替你刷 B 站:帮你评论,把发现的有趣内容私信给你,还会写下日记;它也有记忆,能长期总结。视频按你的口味筛选并生成 Markdown 日报,也能守着评论区替你回话。开启「圈地自萌」后,它只回视频 UP 主本人主动邀请的楼中楼,普通观众喊话不算,绝不自己起新楼;评论、私信、自动运行和守护默认关闭。需 Node 22、DSH 0.1.7-rc.1+、已登录的 B 站账号、模型线路与 Python。
安装
dsh plugin --profile web add github:yoyolnfu/dsh-bili-pondREADME
dsh-bili-pond · B站鱼塘
蓝色大肥鱼替你看 B 站、写日报、记住你的偏好、写下鱼日记;需要时还能守着评论区替你回话。 自动运行、自动评论默认关闭,要用再开。
DeepSeek Harness 插件。配置一次后,蓝色大肥鱼会自己检索视频、读字幕、本地转写、 按你的口味筛选并生成日报。它会用记忆把跨天的偏好和线索串起来,用肥鱼日记记录当天 看了什么、为什么挑中,也会把历史视频整理成可按天翻看的封面墙。
它也能拿一个小号守评论区:自己的视频下有人认真提问,就替主人回一句; 别人的视频下,只有白名单用户主动 @ 小号时才回。水评、广告、重复评论都不会回。 需要更克制时,可以打开「圈地自萌」:只接视频 UP 主本人的明确邀请,只回楼中楼, 不主动起新楼,没有邀请就保持沉默。
| 每天替你看 B 站 | 可配每天几轮与间隔,也能只在谷时跑;手动跑不占自动额度 |
| 按你的口味筛 | 读 AGENTS.md 里的关注方向、排除项和判断标准,不是通用推荐 |
| 真读内容 | 字幕优先;没字幕可本地转写;不靠标题和封面瞎猜 |
| 写过日报 | 渲染 Markdown 日报,并按月份归档,之后还能翻回来查 |
| 看过不重复 | 按视频 BV 号记账;下一轮再搜到同一个视频,直接跳过 |
| 会记忆 | 每轮只留下 2~3 条值得跨天保留的偏好、工具动向和踩坑线索,不把报告抄一遍 |
| 肥鱼日记 | 用大肥鱼自己的语气写当天看了什么、为什么挑中、有什么感受,不是操作日志 |
| 封面墙 | 把历史视频整理成标题、封面、UP、播放量和结论都可见的按天记录 |
| 守评论区跟评 | 自己的视频可代回;别人的视频只回白名单 @;水评和广告跳过 |
| 不刷屏 | 每轮、每天都有上限;同一条评论只回一次,并记录真实发送结果 |
| 圈地自萌 | 只回视频 UP 主本人邀请的楼中楼,普通用户喊话不算,绝不自己起新楼 |
| 模型自选 | 从你 DSH 里真实注册的线路里挑,不写死 |
截图
插件界面就在 DSH 里:可以从「设置 → B站鱼塘」进入,也可以点左侧的「B站鱼塘」图标。 下面几张是实际界面:
| 总览与封面墙 | 记忆 |
|---|---|
![]() | ![]() |
| 自动运行与内容筛选 | 封面墙与今日记录 |
|---|---|
![]() | ![]() |
1.3.12 新版重点:蓝色大肥鱼开始学会克制
这次更新不只增加功能,也把「什么时候不发言」写进了产品边界:
- 记忆:每轮最多保留 2~3 条真正值得跨天使用的观察,下次筛选时不用从白纸开始。
- 肥鱼日记:一天一篇,用大肥鱼自己的语气写当天看了什么、为什么挑中、有什么感受。
- 封面墙:把日报里的视频变成可翻阅的视觉记录,哪些挑中、跳过、归档和回复过都能看见。
- 圈地自萌:只扫描视频 UP 主本人发出的一级评论,只识别“鱼来”“大肥鱼快来”这类明确邀请; 普通观众喊话不算,带“别来 / 不要来 / 别刷”的否定评论直接排除。
圈地模式不会发表新楼。回复固定挂到 UP 邀请评论的楼中楼,同一个账号对同一个
BV + 邀请评论 ID 只回一次;没有邀请就一个字都不发。视频照样看,日报、日记、
记忆和私信照常工作,只是不再去没被邀请的评论区里刷存在感。
评论区守护
评论区守护是独立功能,不是圈地自萌。它让一个小号替主人守评论区:
- 自己的视频:有人留下有内容的评论,小号会替主人回一句;不用先 @ 它。
- 别人的视频:只有设置里加入白名单的用户,主动 @ 小号时才回,不会主动去别人评论区串门。
- 不回复什么:纯水、纯表情、哈哈哈、666、前排、广告、加群和链接都会跳过。
- 不会冒充主人:回复里会说明“主人这会儿在忙,我先替他回一句”,并换着句式说。
- 看得见发了什么:设置页有守护记录,扫到什么、跳过什么、真正发出去什么都能核对。
评论区守护默认关闭,要继续打开总开关才会工作。
关于本项目的来源(重要)
本项目基于 dsh-bili-scroll 0.1.10 衍生:
MIT License · Copyright (c) 2026 dsh-bili-duty contributors
但不是 fork,也不跟随上游版本。调度、模型选择、报告渲染、内容筛选、投递逻辑与安全闸均已重写, 与原项目不再兼容(配置字段、条目 id、API 路径都变了)。详见「与原版的差异」。
如果你的需求是「大体按原版跑」,请去用原项目;想要下面这些,用这个。
装之前
- DSH 桌面版(或能跑
dsh命令的环境),版本>= 0.1.7-rc.1 - Node >= 22
- 一个能用的模型线路:headless 那一轮要调模型。可以用 DSH 账号、API Key, 或者 WorkBuddy 这类 provider 插件
- 装完重启 DSH(插件代码只在启动时加载)
安装
dsh plugin --profile desktop add dsh-bili-pond
装完重启 DSH。
其他装法:
# 从 GitHub(npm 不可用时)
dsh plugin --profile desktop add github:YOYOLnFu/dsh-bili-pond
# 从本地目录
dsh plugin --profile desktop add link:/path/to/dsh-bili-pond
第一次使用(3 步)
-
设置 → B站鱼塘 → 安装运行环境 在插件的数据目录(
~/.dsh/bili-duty,见下面「数据都在哪」)里建独立 Python 环境(.venv)并装依赖。几十秒到两分钟。 完成后pythonPath会自动指向它。 -
扫码登录 B站 点「扫码登录」,手机 B站 → 我的 → 扫一扫。 ⚠️ 确认时选「记住我 / 长期」,选 24 小时的第二天就得重扫。 凭证只存在本机
<DSH_HOME>/bili-duty/bili_credential.json。 -
填人设与口味(推荐) 设置页「检索与上下文 → 工作区路径」填一个目录,点旁边的「建模板」, 它会在那个目录里生成一份
AGENTS.md(我是谁 / 关心什么 / 不关心什么 / 判断标准 / 说话口吻), 照着改就行。之后每轮都会把这份文件读进提示词,按它筛内容。 留空 = 按中性语气,不扮演任何人。
然后点「立即运行一轮」看看效果。跑的时候设置页顶部会出现「本轮进度」卡片: 当前阶段、已用时、今日已挑几条,运行输出可以展开看。
如果没跑成,卡片里会直接写原因和下一步点哪(比如「模型线路没通 → 去高级设置重选一条」), 不用自己去翻日志。
大页面首页还放了常用快捷开关:评论模式(关闭 / 圈地自萌 / 普通评论)、私信、自动运行、评论区守护、 自动转写,以及「跑一轮 / 刷新 / 更多设置」。看过、回过、今日 token 和经验也并在这条快捷区里。 评论和私信各自只显示 UID 是否绑定;未绑定私信 UID 时不能直接从首页打开私信,点状态可跳到设置页。 值班、守护和自动刷 B站 使用插件自己的独立会话目录,不会混进 DSH 主界面右侧的「对话任务」。 大页面里的设置采用单列排版,避免不同高度卡片在双列网格里留下空白。左侧只保留顶部图标入口。
设置项
自动运行
| 项 | 默认 | 说明 |
|---|---|---|
| 自动运行 | 关 | 总开关。关着只能手动跑 |
| 每天最多几轮 | 6 | 0 = 不限 |
| 两轮间隔 | 60 分钟 | 默认 60 ⇒ 每小时最多 1 轮 |
| 只在谷时跑 | 关 | 开启后自动轮只排在谷时窗口(12–14 / 18–09) |
排班规则:五级闸门依次判断 —— 总开关 → 每天挑选配额 → 每天轮数配额 → 两轮间隔 → 谷时窗口。
中午保底:夜间窗口有 15 小时,按间隔能跑 15 轮,容易把额度吃光导致中午轮不到。 所以夜间的最后一轮会扣着留给中午;过了 14:00 中午没跑成则释放,不白等一整天。
手动那一轮不占自动额度(不写窗口标记、不计轮次)。
每轮与每天上限
| 项 | 默认 | 说明 |
|---|---|---|
| 每轮最多挑几条 | 3 | 一轮里最多挑中几个视频 |
| 每天最多挑几条 | 18 | 全天上限。默认 18 = 6 轮 × 3 条 |
| 每天最多转写几次 | 10 | 熔断。到上限后只挑有字幕的视频 |
⚠️ 默认值必须自洽:每天轮数 × 每轮条数 ≤ 每天上限,否则每天上限先触发,
「每天几轮」就成了空头支票。
⚠️ 上限提醒:每天 > 24 条 / 每轮 > 5 条 / 每天 > 12 轮 时卡片顶部会弹警告。
一天 120 条 ≈ 每 12 分钟发一条评论,B站 对高频评论 + 固定 @ 同一人有明确的反垃圾识别,
小号很可能当天被封。
内容筛选
| 项 | 默认 | 说明 |
|---|---|---|
| 只看多长的视频 | 0 ~ 60 分钟 | 0 = 该端不限。长视频转写很慢 |
| 字幕优先 | 开 | 先挑有字幕的,省掉转写 |
| 最多查几条字幕 | 3 | 查完还没字幕,就转写优先级最高的那条(不无限翻页) |
查重规则
- 视频按 BV 号判重:挑中的视频会记进数据目录里的
seen.md。下一轮搜到同一个 BV,直接跳过,不重新读字幕、不重复写日报,也不再次发评论。 - 不是按标题相似度猜:同一个视频以后改了标题,仍然认得出来;换了新 BV,才会当成一条新视频。
- 评论按评论 ID 判重:评论区守护回复过哪一条,就记下对应评论 ID,同一条评论不会重复回。
- “挑中”不等于“已评论”:
seen.md的「看过的视频」只负责视频判重; 只有「评论记录」里真正成功的评论,才会阻止后续补评论。 - 记录读不到时不乱猜:如果
seen.md读取失败,不会把它当成“全部没看过”;这一轮会明确报错并宁可少做,避免重复打扰。 - 想重看某一条:在数据目录的
seen.md里删掉对应 BV 记录即可。不要随意删除整份文件,否则历史视频可能被重新处理。
普通手动轮和自动值班轮会拿到
bili_seen_read/bili_seen_append;直接运行裸dsh headless,或运行“守护评论区”轮,不会有这两只工具。
评论区守护
| 项 | 默认 | 说明 |
|---|---|---|
| 守护评论区 | 关 | 打开后,小号才会替你查看评论 |
| 自己的视频下不用 @ 也回 | 开 | 有内容的评论就代回;关闭后只处理白名单里的人 |
| 每天最多回几条 | 30 | 跨所有视频合计的硬上限,范围 0–500 |
| 白名单 UID | 空 | 只决定“别人的视频下,谁 @ 小号时可以回” |
| 守最近几条视频 | 1 | 最多可调到 10 |
| 每轮最多回几条 | 3 | 防止一次处理过多 |
| 多久扫一次 | 3 分钟 | 调得太短会增加请求和风控压力 |
| 回复带表情 | 开 | 可关闭 |
守护轮只做评论回复,不会顺手搜索视频、写推荐或发私信。回复会精确落到原评论; 如果回复失败,下一轮会补,连续失败三次才放弃。
发布与互动
评论和私信是两个独立开关,互不影响 —— 都开就是「评论 + 私信」。
| 项 | 默认 | 说明 |
|---|---|---|
| 评论模式 | 关闭 | 关闭 / 圈地自萌 / 普通评论 / 普通评论 + 回复楼中楼 |
| 每轮评论上限 | 1 | 0 = 不发评论。上限跟着「每轮最多挑几条」走(挑 3 条就只能设 ≤ 3) |
| 在评论里 @ 谁 | 空 | 填 B站 UID,点「识别」自动带出昵称。留空 = 不发评论 |
| 私信 | 关 | 独立开关。打开后才发私信 |
| 私信收件人 UID | 空 | 只能发给这个人,见下面的安全闸。填完点「识别」可确认发给谁 |
页面上「评论模式」下方会实时写「本轮会做:…」(只生成报告 / 只发公开评论 / 只发私信 / 评论 + 私信), 口径与后台判据一致,不用自己推组合。
圈地自萌只认视频 UP 主本人发的一级评论里的明确邀请(例如“鱼来”“大肥鱼快来”),
普通观众说同样的话不算。回复固定落到邀请评论的楼中楼,绝不新开楼层;同一账号对同一
(BV, 邀请 rpid) 只回一次,不同账号仍可各自回复同一个邀请。模式开启后,普通评论和
“回复楼中楼”会被同时关掉。
高级设置(折叠)
运行模型线路 / 具体模型 / 本地语音转写 / 运行环境 / 数据目录。
安全闸
这个插件会用你的账号说话,所以有几道硬闸:
- 自动运行、日报评论、评论区守护默认都关,要用再手动打开。
- 日报评论默认关。要「自动评论」「@ 谁」两个都填了才发。圈地自萌与普通评论硬互斥, 开启圈地模式后 MCP 只下发专用扫描 / 楼中楼工具。
- 私信只能发给设置里那一个 UID。模型传别的 UID 会被直接拒绝 (包括视频 UP 主、评论区里的人)。被拒了不许换 UID 重试。
- 守护评论区默认关。别人的视频下只处理白名单用户的主动 @,不会主动串门。
- 转写熔断:每天最多 N 次,防止机器一直满负荷。
- 评论前必须真读内容:字幕、转写原文或足够明确的上下文,不许拿标题简介硬编。
- 回复有上限、有去重、有回执:每日与每轮都限流,同一条评论只回一次; 只有 B 站接口真正发送成功,才会记成“已回复”。
跑一轮会发生什么
dsh --profile headless --patch <插件生成的 overlay> <提示词>
那一轮里:
- 按关键词搜(或按你 AGENTS.md 的口味)
- 判重(
seen.md按 BV 号记账,看过的不再看) - 按时长过滤
- 字幕优先 → 没有就本地转写(受熔断限制)
- 判断值不值得 → 挑中
每轮最多挑几条条 - 可选:发评论(@ 你)/ 发私信(给你)/ 回复楼中楼
- 写日报(markdown)+ 归档(
digest/年月.md)
跑的时候能看见进度:设置页顶部会出现「本轮进度」卡片,显示当前阶段(检索 / 读字幕 / 转写 / 写报告 / 发评论)、已用时、今日已挑几条,运行输出默认收起、点开可看。 一轮还没结束时,「立即运行一轮」按钮会变灰并显示已用时 —— 同一时间只允许一轮。
没跑成会说明原因:几秒就退出、模型线路不通、没登录、网络失败这些常见情况, 卡片里直接给一句人话和下一步点哪。
工作目录 = 插件的数据目录(~/.dsh/bili-duty,见下一节),那一轮被沙箱关着,只写得进这里。
数据都在哪
插件的运行数据全部集中在一个目录里,下面简称为「数据目录」:
| 系统 | 数据目录 |
|---|---|
| Windows | %USERPROFILE%\.dsh\bili-duty\ |
| macOS / Linux | ~/.dsh/bili-duty/ |
也就是「~/.dsh 这个 DSH 配置文件夹下的 bili-duty 文件夹」。
它跟插件安装位置无关 —— 装插件是在 ~/.dsh/profiles/<profile>/node_modules/ 里,
重装或升级插件不会碰数据目录,所以数据不会丢。
那个目录里的东西:
| 文件 | 内容 |
|---|---|
config.json | 插件自己的配置(以这份为准) |
duty.md | 值班章程(模型每轮读的规则,你可以改) |
seen.md | 判重表(看过哪些、发过哪些评论) |
out/日期.md | 每天的日报 |
digest/年月.md | 归档(可检索) |
bili_credential.json | B站 登录凭证(只存本机) |
duty.log | 事件日志:每轮开始/结束、用时、挑中几条、发布结果(不长) |
run.log | 最近一轮的原始输出(模型边说边打印的全在里面,每轮清空) |
.venv | Python 环境 |
.venv-asr | 转写环境(可选) |
目录名沿用
bili-duty(从原项目继承)。改目录名会丢失判重表、凭证和历史报告。
与原版的差异
| 方面 | 原版 dsh-bili-scroll | 本项目 |
|---|---|---|
| 包名 / 条目 id | dsh-bili-scroll / bili-scroll | dsh-bili-pond / bili-pond |
| 自动运行 | 峰谷是总开关,只有窗口内才跑 | 自动是主开关;峰谷降级为可选项 |
| 排班 | 每个窗口跑一次 | 每小时最多 1 轮、可配间隔、中午保底 |
| 配额 | 单一 perDay | 拆成每轮 / 每天两级,默认值自洽 |
| 模型 | 固定跟随 profile | 设置页自选线路与型号,开跑前预检 |
| 时长过滤 | 无 | 有(分钟范围) |
| 字幕优先 | 无 | 有(最多查 N 条) |
| 转写熔断 | 无 | 有(每日上限) |
| 报告 | <pre> 纯文本 | markdown 渲染 |
| 日志 | 平铺 | 可折叠 |
| @ 谁 | 填昵称 | 填 UID 自动解析昵称 |
| 私信 | 有配置但工具没放行(发不出去) | 修好 + 只能发给自己 |
| 同步提示 | 回读误报「N 项未能同步」 | 修正(写成功即成功) |
保留的原版部分:vendor/bilibili-mcp/(第三方 B站 MCP,MIT · Copyright (c) 2026 AGI_Ananas)、
lib/ 里的工具函数、以及「插件 + headless 跑一轮」的整体架构。
桌面版 DSH(NEXT / 0.2.x)请注意
桌面版是 Electron 安装包,不是 npm i -g 装的,所以有几处和命令行版不同:
- 跑一轮用的是 Electron 里 spawn 的 node ⇒ 必须带
ELECTRON_RUN_AS_NODE=1, 否则它当成"再开一个 Electron 应用"、什么都不干就以 0 退出(插件已处理)。 dshCLI 不在 PATH 上 ⇒ 插件会去应用目录里找;找不到会在duty.log里明说 「请在设置里把 dsh 路径指过去」。- 改完插件代码要重启 DSH(HMR 不监视 node_modules)。
装不上 / 卡住时
装依赖卡住、或扫码时一直不出二维码
插件会自动下一份 uv 到自己的数据目录(免管理员、不用 PATH),依次试
直连 GitHub → 国内加速代理 → PyPI 镜像,并核对官方 sha256。
如果这条链路全不通:
- 手动放一份
uv.exe到%USERPROFILE%\.dsh\bili-duty\bin\—— 插件会用那一份、跳过下载(PATH 里本来就有uv的话直接用那个)。 - 或者自己装 Python 3.10+(安装时勾 Add to PATH),再点一次「安装运行环境」。
- 杀软拦了下载:把
%USERPROFILE%\.dsh\bili-duty\bin\加白。
装完显示"就绪"但其实跑不起来
pythonPath 没指向 .venv。设置页「高级设置 → 运行环境」里能看到实际路径,
应该是 .venv\Scripts\python.exe(Windows)或 .venv/bin/python。
常见问题
「测一下」报 MCP 子进程退出 / No module named 'mcp'
运行环境没装好,或 pythonPath 没指向 .venv。点「安装运行环境」,
确认 pythonPath 指向 .venv/Scripts/python.exe。
跑一轮报 MISSING_CREDENTIAL
headless profile 没有可用的模型凭证。要么给那个 profile 配好线路,
要么在设置页「高级设置 → 运行模型线路」里选一条它真有的(选不到的会置灰)。
一轮跑很久 本地转写很慢(CPU,一条几分钟)。减少关键词、调低每轮条数、或把时长上限设小。
登录失效(发评论返回 -101) B站 cookie 会提前失效。重新扫码即可。
开发
npm run check # 全部四层:双端自检 + 141 条静态断言 + 14 条迁移测试 + 7 条配额钳制测试
拆开跑:
node --import ./tools/register.mjs selfcheck.mjs # 双端预检(不碰真数据目录)
node tools/_check-1016.mjs # 141 条静态断言
node tools/test-migrate.mjs # 老配置迁移(perDay / peakValley / dmMode)
node tools/test-comment-cap.mjs # 评论上限 ≤ 每轮挑中数
npm publish 前会自动跑 npm run check,不过就不发。
改完代码要重启 DSH 才生效(插件代码只在启动时加载,HMR 不监视 node_modules)。
许可
MIT。许可全文见 LICENSE;衍生关系与第三方代码的版权声明见 NOTICE。 内置的 B站 MCP 来自 bilibili-mcp(MIT)。



