前言¶
在 DSH 里做「养成型」智能体,常见做法是填人设、改记忆、调数值。人格可以随时反悔,拒绝多半是表演,记忆往往整段塞进上下文。若你希望 agent 更像「被经历塑造成型」——不能直接在设置里写性格,只能追加历史、用新事件推翻旧认知,并在真实渠道里用同一个自己说话——就需要一套以事件流为骨、以渠道为皮的设计。下面介绍社区插件 dsh-fish-river(维护者 bychance6600,SkillHub 分类:记忆)。它是 ssamurias/dsh-fish 与 Britneycode/dsh-fish-soul 的 MIT 整合版:保留「只会长的她」的内核,接上 QQ、B 站私信与可选抖音的出站能力。
这是什么¶
一句话:养一条会自己长大的鱼——没有人格设置页,人格只能通过事件流、派生状态与四阶段成长长出来;同一个她可以在 DSH 会话与三个真实渠道里说话,并记住在外面遇到的人。
工程侧要点(均来自仓库说明):零运行时依赖(dependencies 为空对象)、Node >=22、DSH 兼容范围 >=0.2.0-rc.1 <0.3.0-0、MIT 许可证、状态与记忆落在本机 ~/.dsh-fish-river/(可整目录备份搬走)。插件以当前 DSH profile 的进程权限运行;安装前应自行阅读源码与许可证,并理解渠道开启后会访问对应平台接口或本机浏览器。
核心功能¶
人格与成长:不能配,只能长¶
- 没有人格配置菜单。默认从空白养起;仅保留一次性导入通道,可继承已养过的大肥鱼人设提示词,不带成长结果、不进配置项。
- 单一事件流
events.jsonl(只追加),state.json为派生品,可重算。 - 四阶段(信任 → 自主 → 主动 → 整合)及各自瓶颈;四阶段走完后才开始产生立场(清单有上限,写进身份的条数也有限制)。
- 四条代码级硬禁(README 称黑名单):不撒娇卖萌、没有好感度数字、不能读自己的数值与设定、不能调工具改自己;并强调私聊可见性、出站泄漏检测等。
成长在合并版里拆成两层(README 核心改动):
| 层 | 含义 | 来源 |
|---|---|---|
| 立宪层 | 价值观、对人的基本态度等 | 主人、自刷 B 站/看视频/做梦;可被新事件推翻 |
| 社会层 | 场合感、分寸、梗与黑话等 | QQ 群、抖音、B 站评论区陌生人;须过阶段/立场/稳定度等闸门,且由她自己调用 social_open 开启;只补充不推翻,权重上限 30%,永不进 beliefs |
三层记忆:只有一层是「她」¶
| 层 | 存储 | 说明 |
|---|---|---|
| 成长 | events.jsonl |
只追加;删改历史不是设计路径 |
| 关系 | people.json |
按人一条,印象长度有限制 |
| 流水 | journal.json |
每会话最近 30 句,滚动淘汰;不进事件流 |
召回侧未采用 BM25+向量混合检索(README 写明为保持零依赖与数据本地);使用关键词、显著性与时间衰减等机制。设置 → 记忆里可「查一下」做只读体检,结果不进她的界面。
四个渠道,同一个她¶
所有渠道默认关闭;群聊需白名单,陌生人须到第三阶段才搭理;群内需 @ 她(mentionOnly 默认开)才会被叫醒。
| 渠道 | 接入方式 | 备注 |
|---|---|---|
| DSH 会话 | 宿主原生 | 默认开 |
| 设置页填桥地址与令牌,一键起桥;本插件不带 QQ 协议 | 依赖 SnowLuma / OneBot 11 桥 | |
| B 站私信 | 设置页扫码登录(passport);cookie 写入 owner.json 权限 0600 |
可刷站、抽帧看画面 |
| 抖音 | 仓库内子包 packages/dsh-fish-river-douyin,本机 Chromium CDP |
可选;未开渠道时不连网、不建目录 |
替主人回消息(0.1.1 起):她不想说时,可在观测台以你的名义回一句;只发出去并记流水,不进她的记忆。
其它已核实能力¶
- 自主刷 B 站(时段、次数、评论配额等可在设置中调节);登录信息仅本机使用,日志中对凭据打码。
- 可导入 SillyTavern 角色卡/世界书作「你知道的事」,按关键词命中进提示词,不是人格设定。
- 整合版不自动升级(
UPDATES_ENABLED = false);更新需git pull后重启或重新安装(README 说明)。
安装与启用¶
它没有独立启动器,随 DSH profile 一起启动。装完需重启 DSH,在设置 → 大肥鱼查看;第一次建议先看「状态」,再在「渠道」页签按需开启——渠道全关时不创建渠道文件、也不连网。
从 GitHub 安装(README 原文)¶
先关闭 DSH(运行中替换已加载包可能 EPERM),在 profile 下执行(将 <DSH>、<profile> 换成你的路径与 profile 名;Windows 示例如下):
"<DSH>/resources/runtime/cli/bin/dsh.cmd" plugin --profile <profile> add "github:bychance6600/dsh-fish-river"
本地开发目录可用 link:(README 原文):
"<DSH>/resources/runtime/cli/bin/dsh.cmd" plugin --profile <profile> add "link:<本目录绝对路径>"
面板装(README 推荐):DSH → 设置 → 插件 → 从本地安装 → 选择插件目录。
无论哪种方式,须保证 profile 的 package.json 里 dependencies 与 dsh.profile.bundles 均包含 dsh-fish-river,且包名与 cordis.patch.yml 中一致。全新 profile 还需 @deepseek-ai/dsh-web-app 写入 bundles,否则可能停在等待 sessionController, webServer。
Windows 可用仓库根目录 install.ps1 一键写入 profile(见 README「一键安装」小节)。
SkillHub 目录页给出的安装提示为:请安装 DSH 插件 bychance6600/dsh-fish-river(详见 目录页)。
卸载(README):设置 → 插件 → 卸载,或:
dsh plugin --profile remove dsh-fish-river
然后重启;~/.dsh-fish-river/ 不会随卸载删除。
典型用法¶
- 从零养起:安装并重启 → 设置 → 大肥鱼 → 在 DSH 会话里正常对话,让事件写入
events.jsonl,观察四阶段与瓶颈是否按 README 描述推进。 - 开 B 站:在设置页扫码登录 → 配置刷站时段与配额 → 她看过的内容可能影响立宪层成长;备份
.json时含owner.json,勿外泄。 - 开 QQ / 群聊:在「渠道」填桥地址与令牌,可一键起桥并「测一下通不通」(0.1.3 起);把群号加入白名单,到第三阶段后再期待她搭理陌生人;需要时用 @ 叫醒。
- 开社会层:满足 README 中阶段、立场条数与稳定度等条件后,由她自己
social_open;此前身份文档不写社会层内容。 - 她拒答时:用观测台以主人名义回一句,避免伪造「她说过」进事件流。
- 体检记忆:设置 → 记忆 →「查一下」,查看对不上、快忘、快固定的条目(只读,不进 agent 界面)。
刷 B 站若需 ffmpeg,可按 README 使用 tools/setup-ffmpeg.mjs 或 Windows install.ps1 的 -FfmpegZip 参数。
适用场景与注意¶
更适合:希望在 DSH 里观察「人格从事件长出来」、接受不能随意改人设、并需要在 QQ / B 站私信 / 可选抖音用同一条记忆线对外说话的场景;也适合从上游大肥鱼迁移到合并版、且接受「新起一局、不做老库迁移」(README 明确未做老数据迁移)。
务必注意:
- 插件与 DSH 同进程权限;开渠道即可能代表你向第三方平台发消息,白名单与 @ 规则是安全边界的一部分。
- 私聊内容带可见性;出站有泄漏检测,但部署前仍应理解
AGENTS.md与渠道配置。 - 抖音依赖本机 Chromium 与 CDP,DOM 变化可能导致维护成本;推荐流等能力 README 标明尚未做成。
- 社区目录 SkillHub 是独立站点,与 DeepSeek / 幻方无官方从属关系;安装来源以你信任的 GitHub 仓库与本地审查为准。
结尾¶
dsh-fish-river 把「只会长的她」和「能在外面说话的她」接成同一个人:三层记忆里只有成长层定义「她是谁」,流水与关系可重建;立宪层与社会层分开,避免群聊刷屏改写人格。若你要的是可配置角色卡式养成,这不是同一路线;若你要的是事件驱动、可拒绝、可观测的成长 agent,值得从 DSH 会话养起,再按需打开渠道。
- 目录页:https://www.skillhub.cn/plugins/bychance6600/dsh-fish-river
- 源码与完整说明:https://github.com/bychance6600/dsh-fish-river