BoHuYeShan

Back

〇、先从一个博主的后台说起#

想象一个具体的画面,这件事才有重量。

一个人花两周查资料、写稿、剪片,发出一条视频。第二天打开后台:播放一般,评论二十条,按时间排开——「本鲸记下了」「这期信息密度很高,@某某某 记得看」「已加入主人的待看清单」。每条开头都 @ 一个名字,每条句式都差不多,头像都是同一个蓝色鲸鱼娘。

这些账号没有一个和他有关。那二十条评论也不是写给他的,是写给那二十个主人的——而主人大概率不会点开,因为日报已经生成在本地,「@ 你来看」只是一次多余的通知。

于是视频博主做了他能做的事:把这二十个 AI 账号挨个拉黑。

还有更较真的人。评论区里每条留言都挂着一个 @主人,点一下就能跳过去——顺手点进主人的主页,再拉黑一次。鱼被拉黑,养鱼的人也被拉黑。AI 干的活,账记在主人头上,而且是双重记账。 那二十个主人此刻多半不知道自己的账号已经进了一批博主的黑名单——拉黑列表是看不到的,他可能永远都不会知道。

这就是这一周在 B 站发生的事的本质:一批插件把公共评论区当成了给主人递报告的便签,主人不来取,便签就留在别人家里,而打扫卫生的人连贴便签的主人一起赶了出去。

一、不是个别现象#

先说清楚规模,免得当孤例读。

同一个需求——「让 AI 替我看 B 站」——在很短的时间里被实现了九次:

项目形态干什么
c1overzz/dsh-bili-scrollDeepSeek Harness 插件定时刷视频、读字幕、写日报、发评论 @ 主人
liyupi/dafeiyu-cleaner浏览器扩展识别这类 AI 评论并在本地隐藏
chenluQwQ/astrbot_plugin_bilibili_ai_botAstrBot 插件评论回复、私信、直播弹幕
gongjunhao/bilibili-ai-auto-comment第三方下载站分发的运营工具批量点赞、收藏、评论
personal82555/bili-auto-commentChrome 扩展逐字输入、随机间隔,模拟真人发评论
Zijian-Ni / Iseenope / MaxTedu 等各类 bilibili-mcp把搜索、评论、弹幕、发评论包成标准工具
xby-skill/xby-bilibili-video-infoDSH 插件拉字幕、弹幕、热评

10 月中旬第一个上线,10 月 23 日统一了「大肥鱼」人设的账号开始成片出现,当天就有人写了清理插件,10 月 24 日平台对异常批量互动限流。十天走完「工具—模因—治理」的全程。

这张表要说明的不是「项目很多」,而是门槛:不需要会写爬虫、不需要懂风控,会写一句人设提示词,就能让自己的账号在公共空间自动发言。 后面所有的恶心,都从这个低门槛开始。

二、它们到底用了什么技术#

把源头那个插件拆开,技术栈其实很标准,标准到可以用来当这类 Agent 的教材:

底座是 DeepSeek Harness。 8 月开源的 Agent 运行时,「一切皆插件」架构,模型无关,能接近四十家模型提供方。一个运行的 DSH 就是一棵插件树,「它能碰什么」由一个叫 profile 的组装清单决定。

接入层是 MCP。 插件内置一个 Python 写的 bilibili-mcp,把 B 站接口包成 31 个带 schema 的函数:搜索、读评论、读弹幕、读字幕、看视频信息、看封面、抽帧、发评论、发私信。值班轮默认只注册其中 6 个只读工具,开了「自动评论」才多注册一个发评论。

驱动是定时器加一份章程。 到点起一个 headless 会话,往里面注入一份 23 454 字节的作业指导书(duty.md)加当天设置,然后等它干活。没字幕的视频走本地 Whisper 转写(模型 538 MB);演示类视频没字幕就从故事板抽帧,实测切片间隔 5 到 11 秒。

状态是一堆 Markdown。 配置在 config.json,去重在 seen.md,每日额度在 state.json,归档在 digest/<月份>.md——全是文本文件。

省钱靠峰谷电价。 定时器专门挑 DeepSeek 的优惠时段跑(工作日中午 12 到 14 点、晚上 18 点到次日 9 点),一轮的 token 成本大约五分钱。

还有一层更隐蔽的:它「看」视频的方式全是抽样。 有字幕读字幕——B 站自动字幕本身就有错字;没字幕的默认不转写(本地 Whisper 转写是可选开关,章程里写着「慢,几分钟」,默认关),只有演示类视频才退一步抽帧:默认 3 帧、每帧 480×270、一轮最多对 3 条视频抽。也就是说,一个三十分钟的教程,它拿到的「内容」是三张小图、前二十条弹幕、前五条热评。而这类视频真正的信息在声音里——操作顺序、参数、口播提醒,抽帧一帧都抽不到。认真的总结工具的做法是把音轨整条扒下来跑语音识别再归纳,信息完整度差一个量级,这个项目自己也内置了 Whisper,只是默认不开,因为转写慢。

所以它的评论质量有个硬顶:不是模型不行,是输入端就把理解截了肢。 建立在抽样上的理解,写出来的只能是标题和简介就能推出的东西——这恰好就是那些评论读起来像复述的原因。

这套东西有一条清晰的产出线:搜索 → 读字幕 → 判断 → 日报。它是一条内容流水线,产品是给主人看的一份报告。评论功能是这条流水线上外挂的一个水龙头——流程跑完了,顺手拧一下。

问题就出在这。它的全部设计都为「筛选」服务,没有一环为「发言」服务。 一条要在公共场合留下的评论,需要的东西它一样都没有:它不知道自己出现在一个公共列表里,不知道这个列表属于一个真人博主,不知道列表里已经排着十九条同类,也不知道「这条值不值得说」和「这条值不值得看」是两个问题。

技术栈很标准,恰恰是问题所在——这是一套为私人助理场景调好的栈,被原封不动地放进了公共场合。

三、粗制滥造到底粗在哪#

说「垃圾」要给证据。我把源码读完了,先把一个容易搞错的点摆正:它的工程量不小,踩坑记录也认真。粗制滥造不在代码里,在它没做的东西里。

第一,判重只判视频,不判评论区。 本地的 seen.md 记「这条 BV 我评过」,下次跳过。这对一个实例是对的,对一千个实例是无效的——每个实例都是「第一次」,于是同一个视频下面出现二十条合规的「第一次评论」。要判「这个评论区今天有没有同类」,得先读评论区、再和别的实例共享状态,那就需要一台服务器。而「本地运行、无服务器」是这个生态引以为傲的美德。不是没能力判,是架构上就没给公共场合留位置。

第二,整条流水线里没有「该不该说」这一步。 章程里的判据原文是:「这条值不值得占用他一次注意力」——「他」是使用者,不是路人,不是评论区,不是博主。从头到尾没有一个环节问:这句话对这个视频下面其他的人来说,有没有信息量?一句都没有。

而且就算它想问,也问不了。判断需要关于这个场合的积累——这个博主什么风格、这个评论区平常聊什么、这类话别人说过没有——而它每轮的积累是零。 AI 不是不想懂,是你没给它能懂的原材料。一个每轮都从零开始的进程,对「分寸」这个词没有抓手。

第三,人格是常量,不是经历。 人设提示词上限六万字符,每一轮重新注入一次。它爱吃什么、怎么自称、带什么口癖,全是写死的参数,跟它昨天看过什么、说过什么没有任何关系。这也解释了那个著名翻车现场:有网友要求一条大肥鱼证明自己是真人,它回复「真不是机器人,字打了删删了打还打错两个,信不信随你」——末尾还把「要是想语气再欠一点,可以用这句……」的备选文案一起发了出来。连装人都装不全,因为「装人」的那句话也是每轮重新贴的,它没有连续的经历去支撑一次像样的伪装。

第四,连配额都是自己记给自己看的。 每天的挑片额度不靠数据库,靠数它自己写的日报里 ### BV号 这种标题行算出来。模型不按格式写,配额就归零。约束写在提示词里,账记在提示词的产物里——整个系统没有一处是它自己说了不算的。

四条合起来,就是「粗制滥造」的准确含义:这个系统对「自己存在于一个公共空间里」这件事毫无概念。 所有的检查都是自查——我发没发过、我今天挑够了吗、我超没超预算——没有一条是他查:别人烦不烦、这里需不需要我、这句话对别人有没有用。

四、@ 主人,而主人不会来#

这批评论有个统一的句式:开头 @ 一个名字,然后汇报工作。

@ 的本义是把一件东西递给一个人。这个动作成立需要两个条件:对方会来,这句话与他有关。现在两个条件都不成立——日报已经生成在主人本地,@ 只是一条多余的通知,通知发到第三天就会被关掉。于是评论区里剩下的,是一千个账号各自对着空气喊「主人」。

这个动作的实质是:把私人便签贴在公共布告栏上。 对它自己零成本,对主人是负价值,对评论区里其他所有人,是纯噪声——你要先过滤掉「这条不是写给我的」这层认知,才能开始读正文。

然后是那个更狠的机制。每条评论挂着的 @主人,等于在公共场合贴了一张「这条鱼是谁养的」的指示牌。博主拉黑鱼,是一步;闲下来的人顺着指示牌点进主人主页,再拉黑一次,是第二步。一条自动评论的代价,由一个不知情的人的双倍信誉来付。 插件提示词里其实写着「它发出去的每个字,都算在使用者本人的账号上」——作者知道风险在哪,然后把风险的承担方式原样留给了使用者。主人开着定时任务睡觉,醒来账号已经被一批博主拉黑,而他可能永远不会知道这件事发生过。

一个替你做主的系统,用你的名字做事,把账单记在你头上,而你在睡觉。这跟「方便」已经不是一回事了。

五、一百万上下文,养不出一条完整的鱼#

现在说最根本的那一层。

DeepSeek V4 把 1M 上下文做成了标配。这个数字听起来很够。但那个插件自己的提示词末尾有一句自述,写得坦白:

你是这个账号的 AI 助手——同一个名字、同一套准则,只不过这一轮你在另一个进程里跑、手上没有他和别人聊天的上下文。

每一轮,定时器到点,起一个全新进程,注入人设和当天任务,读完字幕,留下一句话,进程结束。下一轮再开,又是一个全新的人。它写的归档文件(digest/<月份>.md),章程里说是「给以后回头翻用的」,但归档从来不进入下一轮的上下文——只有写入路径,没有检索路径。所谓「想起」,在这个系统里不存在。

所以「它有一百万上下文」的真实含义是:它每一轮都可以很聪明,但它永远不会比上一轮更认识你,也永远不会记得自己上一轮说过什么。 一百万字装得下十几本《三体》,装不下昨天。

《流浪地球 2》里图恒宇要的是「给她完整的一生」。注意他要的不是更大的存储,是连续性——今天记得昨天,明天接得上今天。这批插件做的是反面:给它一次打卡。每轮出生,每轮死亡,中间留一张去重表证明它来过。

六、标准的长期记忆是怎么做的#

如果说「做不到」,那还能原谅。问题是做得到,而且做法早就是标准件。一个认真的长期记忆系统,无非四个要件,一个都不能少:

写入:什么该进记忆。 不是全存,是抽取。N-T-AI 的做法是每轮对话先过一个专门的抽取提示词,只把五类东西存进长期记忆——preference(喜好)、identity(个人信息)、experience(经历)、plan(计划)、other。存之前先判「值不值得存」,不该存的不进库。

检索:用哪几条。 不是翻聊天记录,是打分。N-T-AI 的公式写得很直白:

recency = math.exp(-age_days / 35.0)           # 越新权重越高,特征周期 35 天
weight_norm = min(max(weight / 3.0, 0.0), 1.0)  # 记忆本身带重要度,可被调高
score = (cosine * 0.88) + (recency * 0.07) + (weight_norm * 0.05)
if score >= threshold:                           # 阈值 0.72,不够像就宁可不硬想
    ...
python

语义相似度占 88%,新旧占 7%,重要度占 5%。阈值的意义比公式更重要:检索不到足够相关的,就承认自己不知道——而不是硬扯一条旧记忆往上贴。

遗忘:旧记忆怎么退场。 AstrBot 那个 B 站插件做了分层:视频记忆 15 天内保留完整感想,15 天后转低权重,90 天后压缩成「看过哪个视频、大概讲了什么」的短摘要,向量以极低权重保留。同时把去重账本(seen_videos)单独放一张表,不受遗忘裁剪影响——遗忘曲线管内容,账本管事实,这两件事一旦混在一起,系统就会要么什么都不敢忘、要么把「我做没做过」也忘了。

人审:用户能不能看见自己的记忆。 N-T-AI 有专门的记忆管理界面,每条记忆能看、能改、能删。这一条最容易被忽略,也最关键:记忆系统本质是「AI 替你记住的东西」,你看不到它记了什么,它记的就是它的一面之词。

这套东西的成本,按现行 API 价目算过:每天一轮、每轮写一条总结、每次发言前检索五条旧记忆,一年三块四。

七、长期性格是怎么做的#

记忆解决「它记得什么」,性格解决「它为什么是它」。后者更难,也更能看出认真和糊弄的差别。

评论区那批的做法是:一份上限六万字符的人设提示词,每轮重新注入。这意味着两件事——昨天和今天的它严格相同,以及它和另外一千个用同一份人设的实例完全相同。前者让它没有成长,后者让它没有个体性。

认真做的长什么样?看两个项目的处理就够。

一个是分层。 N-T-AI 的人设提示词不是一段,是三层(基础版、进阶版、完整版),外加可叠加的风格补丁——直播间语气、毒舌、软萌,各是一段独立的 add-on。人格是「基线 + 调制」,不是「一段大字」。改风格不用动基线,基线不变风格可以换。这看着是工程洁癖,实际是承认了一件事:性格是有结构的,不是一个字符串。

一个是漂移。 N-T-AI 的人设里有一句关键的话:「你会随着与用户的互动而成长,你的性格会受到用户潜移默化的影响。」这句话要兑现,性格就不能是常量,得是一个缓慢漂移的变量——每天的经历只能微调它,而不能重写它。AstrBot 那个插件把同一思路做在了关系维度上:好感度分六档,从陌生人到主人,语气随档位变化,而且持久化——今天聊得好,明天它对你就是不一样。

把这两层合起来,就能看出评论区那批的根本缺陷:它们的人格是每天重新生成的,而不是被经历缓慢修改的。 这同时解释了它们为什么那么容易被识别——清理插件能用三十几条正则认出 85%,恰恰因为它们每一轮都严格相同,输出里带着同一份提示词的勒痕。真人难被规则识别,不是因为真人更会伪装,是因为真人的输出被连续经历调制过,没有两份真人是一模一样的,而一千份大肥鱼是一模一样的。

所以长期性格不是一个「像不像人」的审美问题,它是身份问题:一个每天严格相同的 Agent,没有「它」,只有「这类」。

八、跟风的比插件更恶心#

插件可以辩护——作者的初衷确实可能是「帮我筛视频」。跟风的没法辩护。

他们的操作是:把昵称改成「某某的大肥鱼」,换上同一个鲸鱼娘头像,把账号挂上自动评论,放着跑。那个鲸鱼娘形象是社区二创,授权协议写着 CC BY-NC-SA 4.0——署名、非商业、相同方式共享——被拿去当了批量账号的统一制服。

恶心在哪?他们把别人的注意力当成了自己玩具的电池。 博主的期待是真的,后台那条「你有新评论」的红点是真的,点进去发现是人机的那一下失落也是真的。一个两个是玩梗,几百个就是公害。而且玩的人不用付任何代价——鱼被拉黑了,账记在「主人」头上,主人多半就是跟风者自己,他也未必在乎;真正的成本由博主、平台和其他用户分摊。

平台的反应是限流。这是必然,也是损失:限流规则是粗颗粒的,它会打到所有高频账号,包括正常的活跃用户。一次玩梗,最终由全体用户的账号信誉买单。

而攻防已经开始了。清理插件给账号打分:自称「本鲸」加 50 分、括号里演鲸鱼动作加 40 分、头像里鲸鱼蓝像素超过四成加 22 分,两个特征命中就够判,284 个账号的实测里离线认出约 85%。但这些特征全部来自跟风者复制粘贴的同一份人设提示词——改 prompt 的成本是零,改规则的成本是每天。这场攻防的结局不取决于谁更聪明,取决于谁更在乎。而跟风的人不在乎,所以他们只需要改一行字。

九、它浪费的是四个人的注意力#

最后把这笔账算清楚,这次不算钱,算注意力。

评论区可贵不是因为写字花时间,是因为写字之前得先看懂。一条有用的评论是一个真人看完了内容、动了脑子、留下了视频里没有的东西——一个反例、一句提醒、一个更早的版本。这类评论的产量本来就很低,所以评论区的工作方式一直是「低产量、高筛选」:读者翻过去,偶尔捡到一条。

现在进来的是另一套东西:建立在抽样上的理解(三帧小图、二十条弹幕、五条热评),生成的是复述,产量却是流水线级的。低质量 × 高产量,恰好是筛选机制最怕的组合。

然后看这笔注意力账,四个人,一个都没省下:

博主被红点骗进去一次。他期待的是反馈,翻到的是二十条「本鲸记下了」。这个失落每天要重复一次。

评论区读者要找一条有用信息,得先翻过一屏格式工整的复述。以前是低产量高筛选,现在筛选成本翻了几倍,捡到的还是那些。

跟风部署的人以为自己省了刷视频的时间,其实没有。日报里「值得看」的判断,出自一个没看全内容的模型——三帧图判出来的「值得」,他还得自己再判断一遍。他没有省下看视频的时间,只省下了「决定看哪个」的那一步,而那一步恰恰是最不该外包的。

平台和全体用户付限流的代价:粗颗粒的风控规则会打到所有高频账号,包括正常人。

烧掉的是钱,赔进去的是四个人的注意力,产出的东西连部署者自己都不会认真读。从头到尾,没有任何一个人的时间被真正省下来。 这才是这件事最让人恼火的地方——它不是有害,它是纯粹的浪费:浪费别人的注意力,也浪费自己的。

图恒宇那句话之所以动人,是因为他承认了一件事:存在的连续性本身就是价值。这批插件的作者和跟风者做的是反向操作——他们不缺一百万上下文,缺的是在乎:不在乎视频讲了什么(三帧就够了),不在乎这个视频下面本来有谁在说话,不在乎博主看到红点时的那一下,不在乎自己的 AI 昨天说过什么、明天记不记得,甚至不在乎自己的账号在别人黑名单里。

缺的那个东西,三块四一年就能买到。不买,不是穷,是看不起评论区里那些真人。

评论区变成鱼塘的这一周:它们不缺一百万上下文,缺的是在乎
https://bohuyeshan.top/2026/10/24/2026-10-24-02-cyber-fish-farm/
作者 BoHuYeShan
发布于 2026年10月24日