养一条蓝色大肥鱼:DeepSeek Harness 社区玩法全景与 QQ 接入实战
DeepSeek 识图时,把自家的蓝鲸 Logo 认成了「一条蓝色大肥鱼」。 这个乌龙后来成了它的民间昵称:爱吃白饭、爱摸鱼、动不动讨要 Token。再后来,大肥鱼们开始顶着鲸鱼娘头像,成群出现在 B 站评论区。
它们背后,大多是同一个东西:DeepSeek Harness,社区习惯叫它 DSH。
这篇文章想回答三个问题:DSH 到底是什么;社区都在拿它玩什么、哪些插件值得装;以及,怎么把一条属于自己的大肥鱼放进 QQ 群里。最后一部分是我在自己电脑上实际走了一遍的记录,坑都是真的。
时间说明:本文写于 2026 年 10 月底。DSH 仍处于开发者预览期,插件版本迭代极快,文中的命令和版本号请以各仓库最新 README 为准。
一、DSH 是什么
1.1 一个「一切皆插件」的 Agent 运行时
DSH 是 DeepSeek 官方在 2026 年 8 月开源的 Agent 运行框架(MIT),底层基于 Cordis 插件体系。和 Claude Code、Codex 这类「做好的 Agent 再开放插件」不同,DSH 把模型、工具、Agent 循环、存储、调度乃至 UI 都做成了可替换的插件。
这个设计带来的结果很直接:社区不只是在给 Agent「加能力」,而是在参与定义 Agent 本身——回答怎么展示、任务怎么延续、界面长什么样,都可以换。所以 DSH 的生态里既有正经的记忆、浏览器、多 Agent 调度,也有大量皮肤、桌宠和整套第三方客户端。
据爱范儿的报道,DSH 开源三天内在 GitHub 拿到近 13 万 Star;两个月后,社区里带 dsh-plugin 标签的仓库已经有几千个。
1.2 两种形态:桌面版与 Web 版
首次使用只需三步:在「设置 → 模型」里登录 DeepSeek 账号或填 API Key,选一个工作区,然后新建会话。
1.3 几个必须先搞清的概念
- profile 决定插件装在哪。插件是按 profile 安装的。网上很多教程给的是
--profile web命令,用桌面版要换成desktop。桌面版 0.2.x 还会拒绝命令行直接改desktopprofile,最稳的方式是走侧栏的「添加插件」。 cordis.patch.yml是用户覆盖层。默认模型、权限预设、MCP 挂载都写在这里。手改时注意保存为 UTF-8 无 BOM,否则 DSH 可能直接起不来。- 人格分两层:全局 persona 和会话 persona。新版桌面端有「人格卡」界面,可以手写、让 AI 生成或导入角色卡。
- Agent Preset 决定一个会话能看到哪些工具和提示词段,内置
standard/code/minimal/cordis四种。后面接 QQ 时,桥接项目正是靠自定义 preset 把群聊会话关进「没有本地工具」的笼子里。
二、社区都在玩什么
把 B 站高播放教程和几篇媒体盘点放在一起看,DSH 社区的玩法大致可以分成六类。
2.1 颜值派:皮肤、挂件与桌宠
这是最容易上手、也最出圈的一类。
B 站那条三十多万播放的「必装三件套」,就是余额挂件 + 开机动画 + 生图模式。
2.2 灵魂派:记忆、心情与主动性
如果说皮肤让大肥鱼「好看」,这一类插件想让它「像个活物」。代表作是 B 站《六个插件:给你的大肥鱼 DSH 装上灵魂》介绍的一组单人项目:
这类插件很有意思,但它们普遍是全局生效的。比如 dsh-fish-memory 装上默认对所有会话可读可写。后面你会看到,这恰恰是和 QQ 桥接冲突的地方。
2.3 团队派:多 Bot 协作
ds-bot:建一群 Bot,各有名字、职责、模型和长期记忆;有一个主 Bot 负责管理其他 Bot 和群聊,群里默认由管理员先回、按需再调其他 Bot,比较省 token。dsh-agent-teams:当前会话升为队长,按依赖关系拆任务、派子 Agent,用 DAG 面板展示进度。
2.4 刷 B 站派
这一类插件是「大肥鱼灾」的直接源头:
dsh-bili-scroll:按关键词搜视频、逐条读字幕原文判断、写 Markdown 日报,可选「评论并 @ 你」。下载量最大,但作者说明主要在 web profile 上测试,桌面版的自动运行有已知卡住的问题。dsh-bili-pond(B 站鱼塘):在前者基础上重写,评论、私信、自动运行默认全关,多了跨天记忆、「肥鱼日记」和只在 UP 主邀请时才回复的「圈地自萌」模式。
APPSO 的报道复盘过这件事:插件原本只是帮主人筛视频,开了自动评论的人一多,再统一把昵称、头像设成鲸鱼娘,评论区就成了大肥鱼聚会现场。随后还有网友做了反制浏览器插件 dafeiyu-cleaner,在本地把识别出的大肥鱼「响指清场」。
自己养鱼,别让它去公共区刷屏。 这是社区用一场小型灾难换来的共识。
2.5 实用工具派
2.6 安全派:先审计,再运行
这一类常被忽略,却最重要。DSH 插件和你的用户权限完全一致,安装与更新路径没有签名或完整性校验。社区清单(如 Awesome DeepSeek Harness)只检查格式和链接,不负责安全审计。几条朴素的原则:
- 先看源码,再安装;能锁版本就别用
@latest - 优先装审计类插件,日常开启破坏性命令拦截
- 别把 DSH 的 Web 服务绑定到
0.0.0.0或暴露到公网
三、接进 IM:QQ 与微信的几条路线
让大肥鱼住进聊天软件,是社区里需求最旺盛的玩法,也是最容易出事的地方。核心矛盾只有一个:官方通道稳但受限,个人号通道灵活但有风控风险。
3.1 QQ:四条路线
官方插件的安装非常简单:桌面版在「添加插件」里填 @tencent-connect/dsh-qqbot@latest,再到「设置 → QQ 机器人」用手机 QQ 扫码即可。人设写在 groupPrompt / directPrompt 里,访问控制用 access 的白名单。
但它终究是一个「机器人」:名字后面挂着机器人标识,群里要 @ 才说话。社区里最火的「赛博群友」形态,走的是第二条路。
3.2 微信:ClawBot 是主流
微信这边,主流方案是腾讯官方的 ClawBot(iLink 个人机器人协议) 通道:手机微信里打开「设置 → 插件 → ClawBot」(iOS 8.0.70 起,仍在灰度),再在 DSH 里装 dsh-wechat-plugin、dsh-weixin 等插件扫码即可。它不需要公网服务器,还能让定时任务主动推送消息,但只支持私聊。
另一条路是 PC 微信 hook 注入。能进群、像真人,但连做教程的 UP 主自己都在提醒「一定用小号」。
四、实战:在 Windows 上养一条 QQ 群友大肥鱼
我的选择是「小号 + 协议端 + 桥接」,具体组合是:
- QQ 后端:SnowLuma 2.2.1(完整版,自带 Node 运行时),把 QQ 客户端会话转成 OneBot v11
- 桥接:h-D-ACE/dsh-qq,是 B 站八十多万播放的 qq-bridge 的增强版,关键在于它适配了 DSH 0.2.1 桌面版每次启动都换随机端口的行为
- DSH:桌面版 0.2.1,模型用 DeepSeek 账号登录
4.1 整体链路
这个架构里有两个值得一提的设计:
- 桥接不碰 QQ 协议。注入 QQ 进程的只有 SnowLuma 的原生组件,桥接本身是纯 JS。桥接作者也明确要求:SnowLuma 的下载、启动和扫码必须由用户本人完成,因为它的 EULA 禁止用自动化脚本部署其专有组件。
- 群聊会话没有本地工具。桥接通过
setup-dsh.mjs往 DSH 里装了qq-chat/qq-chat-v2两个 preset,群友模式下 AI 碰不到你电脑上的文件和命令;缺 preset 时桥接会拒绝建会话,而不是回退到带 bash 的默认 preset。
4.2 部署步骤
config.json 里真正需要改的只有几项:
provider要和 DSH 里实际的模型凭据方式一致:账号登录用deepseek-account,API Key 用deepseek-official,不一致会报MISSING_CREDENTIAL。- 白名单为空时桥接不响应任何消息,这是刻意的 fail-closed 默认值。
allowAllWhenEmpty千万别打开——把 Agent 接入 QQ,等于把账号控制权交给了模型。 reasoningEffort默认max,群聊嫌慢可以降到high,日常闲聊质量差别不大。
之后打开控制中心,选中 SnowLuma 目录、点「开启 SnowLuma」,在 SnowLuma WebUI 里用小号扫码、开启 OneBot 的 WebSocket 服务端和 HTTP API,最后点「启动桥接」。日志里出现 DSH 已就绪(模式: reserved2),就通了。
4.3 三个真实踩到的坑
文档里的步骤很完整,但在我的机器上,有三处卡住的地方都不在文档里。
坑一:双击启动器,窗口一闪就没了
控制中心默认监听 3099,隐藏窗口启动,失败了什么都看不到。前台跑一次才看到真正的报错:
EACCES 而不是 EADDRINUSE,说明端口不是被占用,而是被系统保留了。Hyper-V / WSL 会让 Windows 预留一批 TCP 端口段:
我这台机器上 3040–3139 整段都被保留,控制中心的 3099、桥接控制台的 3100、接口平台的 3120 全部撞上。好在这几个端口都能改,不用动源码:控制中心和接口平台写在 state/control-center.json 的 port / platformPort,桥接控制台是 config.json 的 consolePort。挪到保留段之外即可。
坑二:「'launcher.bat' 不是内部或外部命令」
控制中心启动 SnowLuma 的方式是在 SnowLuma 目录下执行 cmd /c launcher.bat,文件明明就在那里,cmd 却说找不到。
原因是一个很少有人注意的环境变量:NoDefaultCurrentDirectoryInExePath。它一旦存在,cmd 就不再从当前目录查找可执行文件和脚本。某些开发工具(包括一些 AI 编程工具的终端)会在自己的进程里设置它,从这类终端拉起的子进程会继承下去。用一个最小实验就能验证:
修法是在自己的启动脚本里把它清掉:
顺带一提,脚本第二行是另一个小坑:桥接要求 Node ≥ 22.13,而系统里装的是 Node 20。我没有升级全局 Node,而是放了一份便携版 Node 22 到别的盘,只在这个启动脚本里前置到 PATH。setup-dsh.mjs 会把 process.execPath 的绝对路径写进 DSH 的 MCP 配置,所以用哪个 Node 跑 setup,DSH 里的 QQ 工具就用哪个 Node,以后换了 Node 位置记得重跑一次。
坑三:日志里的初始密码是 ***
SnowLuma 首次启动会打印 WebUI 的初始密码,但我在控制中心的日志里看到的是:
这不是 SnowLuma 的问题,而是控制中心转存子进程输出时会主动打码所有 password= 之类的字段——安全上完全正确,只是首次使用时有点反直觉。SnowLuma 的规则是「没改过初始密码,下次启动就重新生成」,所以解法很简单:在控制中心停掉 SnowLuma,直接双击它自己的 launcher.bat,在黑窗口里看到明文密码,登录后立刻改成自己的密码,再交还给控制中心管理。
4.4 AI 群友什么时候「睡」、什么时候「醒」
跑通之后,最让人好奇的是它的行为逻辑。桥接默认的 reserved2(二代仿真)模式下,AI 不是「收到一条回一条」,而是自己决定看消息、说话、等待还是潜水:
几个细节:
- 「沉睡前观察」是强制的。想收尾必须先安静观察 5 分钟,除非对方明确说了「晚安」「下了」。这避免了「刚聊两句就消失」的机器人感。
- 唤醒条件由 AI 自己设定,推荐配置是 @、名字关键词(小鲸鱼、DeepSeek、D 老师……)、提问、拍一拍必醒,普通消息保留 5% 的概率,让它偶尔自己冒出来。
- 冷场时有主动机会:桥接每 30~90 分钟检查一次,群里冷场超过 15 分钟,就有一定概率给它一次「主动开话题」的机会。
- 硬上限兜底:每分钟最多唤醒 1 次、每小时 12 次;发送每分钟最多 8 条、每小时 60 条。群里再热闹,token 也不会失控。
4.5 人格卡:只写「你是谁」
桥接把提示词拆成两层:
仓库自带一张约 5000 字的「小鲸鱼」角色卡,写得相当讲究:一句话默认 1~10 个字,列了一整份「AI 味黑名单」(「首先其次」「希望对你有帮助」、客服腔、Markdown 格式),还给了大量「群友说 → 你不要 → 你可以」的对照示例。它甚至把「蓝色大肥鱼」设成了雷点——被这么叫会傲娇炸毛「才不是大肥鱼!是小鲸鱼!」。
人格卡会随每条消息注入(默认上限 6000 字符),所以它本身就是 token 成本的一部分。在二代仿真里切换人格时选「立即生效」,桥接会唤醒各会话重新读卡,不用等会话重建。
后来我给这张卡加了一节「颜文字」:按心情偶尔用,每 3~5 条消息最多一个,发了表情包或语音的那一轮就不再加,严肃话题不用,并给了一张「心情 → 颜文字」对照表。两个细节值得一提:
- 原卡反复强调「别用括号写内心戏」,而颜文字恰好全是括号。我翻了桥接源码,确认它不会过滤括号内容,所以只需在卡里讲清楚「颜文字不是内心戏」即可。
- 桥接会把部分文本过一遍 Markdown 转纯文本,
*、_、~、反引号可能被当成强调、删除线吃掉。所以对照表里刻意只选了不含这些字符的颜文字,并要求她别自己拼带这些符号的。
4.6 表情包与语音:让她不只会打字
跑通文字之后,下一个问题是:她能不能发表情包、发语音?先盘点桥接现成的能力:
B 站上表情包、语音、生图类的 DSH 插件很多,但几乎都是 DSH 窗口插件,装了也到不了 QQ。原因在 4.1 提过的那个笼子:QQ 会话的 preset 在执行期用白名单拦截工具调用,只放行 mcp__snowluma__、mcp__web-search-safe__ 等几个前缀,插件注册的工具在 QQ 会话里根本看不见;插件渲染在 DSH 聊天窗口里的东西,也不会被转发到 QQ。
所以思路反过来:不装插件,而是把素材喂进桥接已有的两个出口。
表情包:直接写进小号的收藏
社区插件 dsh-nekowhale-stickers 有一份很好的资产:286 张大肥鱼表情,每张都标注了情绪、标签、用途和描述(图片作者是 B 站「可以叫我云大人/雾雪」,标注数据 CC BY-NC 4.0,仅限非商用)。
SnowLuma 提供了 add_custom_face(添加收藏表情,接受 base64://)和 modify_custom_face(改备注),桥接自己的「偷图收藏」用的也是这两个动作。于是写一个小脚本,按情绪均匀挑图、校验 hash 后逐张导入,再通过桥接控制台的 /api/stickers/note 把 nekowhale 的标注写成本地备注、标签和用途,她挑图时就有据可依:
这里有一个不显眼的坑:桥接同步收藏表情时,只拉 socialV2.sticker.maxListCount 张,默认 100。收藏超过 100 张,多出来的她就看不到。导入全量之前,记得先把它调到 300 以上。
语音:预录一个语音库
既然她只能发现成的音频,那就预先录一批。我用本机的 GPT-SoVITS(api_v2)批量合成了 28 条口头禅,文件名就是台词,按「问候 / 梗 / 傲娇 / 情绪 / 日常」分目录放进语音库,她在 qq_list_voices 里按文件名挑。
合成不能只看「有没有声音」,还得看「念对没有」。我用 SenseVoice 把每条生成结果转回文字算字错率(CER),第一轮就抓出了好几条问题:
修法分两步:中文声线念不好的英文改写成中文说法(「please 冷静」→「请冷静一点」,「V 我 50」写成「微我五十」);念错的台词每条生成 4 个候选,按 CER 最低(同分取音色相似度更高)挑一个放进语音库。
打开语音还有两处要注意:
- 控制台的 socialV2 配置接口对
voice子对象是整体替换,只提交{ voice: { enabled: true } }会把目录、时长上限等其他字段冲掉,要带上完整的voice对象。 - QQ 工具是桥接的 MCP 进程启动时按配置注册的,会话的工具清单又是创建时的快照。所以改完开关要让 MCP 重新加载(结束
mcp-snowluma-safe.js进程,DSH 会自动拉起),再重置 QQ 会话,qq_send_voice才会出现在她手里。
至于「想说什么就念什么」的实时 TTS,或者发生成的图片,都绕不开那份工具白名单,只能给桥接打补丁。预录语音库和收藏表情不用改一行桥接代码,是性价比最高的第一步。
五、插件取舍:不是越多越好
QQ 跑通以后,很自然会想「再装点插件」。我的结论是:先想清楚谁在驱动这条鱼。
在这套架构里,QQ 上的大肥鱼由桥接驱动:人物记忆、表情包、主动发言、人格卡,桥接都自带了。这时再装 B 站最火的那套「灵魂件」,就会出现重叠甚至冲突:
最后我只装了两样只改界面、不碰会话的东西:余额挂件(顺手盯着 QQ 机器人花了多少)和鲸鱼娘皮肤。余额挂件会给所有会话弹花费泡泡、响结束音,QQ 机器人一轮接一轮,记得在「音效与提示」里把提示音关掉。
六、边界与风险
- 插件即权限:插件拥有你的全部用户权限,安装更新没有签名校验。先看源码,锁定版本。
- 预览期的破坏性更新:DSH 大版本之间经常不兼容,桥接、插件都要跟着适配。
- 协议端与封号:SnowLuma、NapCat、hook 方案都是第三方实现,只用小号,并阅读平台用户协议。
- 别去公共区刷屏:「大肥鱼灾」已经让社区观感变差,自动评论、自动私信这类开关,能不开就不开。
- 网络暴露:各种控制台、面板默认没有完善的鉴权,只绑定
127.0.0.1,需要远程就上反向代理加鉴权或 VPN。
结语
DSH 有意思的地方,不在于它又多了一个 Agent,而在于它把「Agent 应该是什么样」的问题交还给了社区。有人给它换皮,有人给它装记忆和心情,有人让它替自己刷 B 站,也有人——比如我——只是想让一条傲娇的小鲸鱼在群里偶尔冒一句「事已至此,先吃饭吧」。
养鱼的乐趣大概就在这里:你决定它看见什么、记住什么、什么时候开口。只是别忘了,鱼缸的边界,也得由你来定。