- Home
- Plugins
- Integrations & Remote
- dsh-bili-pond
dsh-bili-pond
yoyolnfu/dsh-bili-pond
Let the Blue Big Fat Fish browse Bilibili for you: it comments on your behalf, DMs you interesting finds, writes a diary, and keeps a memory for long-term summaries. It filters videos to your taste, creates Markdown digests, and can watch comments and reply for you. In Circle Mode, it replies only inside threads explicitly invited by the video uploader in a top-level comment — ordinary viewer requests do not count, and it never starts a new top-level comment. Commenting, DMs, auto-run, and comment watch are off by default. Needs Node 22, DSH 0.1.7-rc.1+, a signed-in Bilibili account, a model route and Python.
Install
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)。
Related plugins
dsh-web (dsh-ssh)
zhu1090093659/dsh-web
dsh-web (dsh-remote-web-ui)
zhu1090093659/dsh-web
dsh-web-ui (dsh-ssh)
zhu1090093659/dsh-web-ui
dsh-web-ui (dsh-remote-web-ui)
zhu1090093659/dsh-web-ui



