DSH Plugin MarketA community catalog for DeepSeek Harness plugins

dsh-fish-soul

Verified Skills & agents ★ 23 0.15.33

鱼 · 人格、按人记忆(可纠正、有印象、能导入旧聊天记录)、日程自走与主动开口,直连 SnowLuma 收发 QQ(群里会自己插话),B站 / 抖音小号私信与自己刷视频;按功能选模型并统计用量花费,能听会说 QQ 语音、收藏表情包、学群里的梗,可选上网查;心情影响说话、去 AI 味、每个群的设定、按聊天选模型、每晚写日记、每周记忆存档与可选周记(DSH 插件,单角色 feiyu ,v0.15.29)

What it is

鱼 · 人格、按人记忆(可纠正、有印象、能导入旧聊天记录)、日程自走与主动开口,直连 SnowLuma 收发 QQ(群里会自己插话),B站 / 抖音小号私信与自己刷视频;按功能选模型并统计用量花费,能听会说 QQ 语音、收藏表情包、学群里的梗,可选上网查;心情影响说话、去 AI 味、每个群的设定、按聊天选模型、每晚写日记、每周记忆存档与可选周记(DSH 插件,单角色 feiyu ,v0.15.29)

How to install

Run this in the DSH web profile, then refresh the page.

$ dsh plugin --profile web add dsh-fish-soul@0.15.33

DSH versions accepted

*

Author and traction

Britneycode · ★ 23 · Updated 2026-11-10

About this plugin

dsh-fish-soul

让一个 QQ 小号背后有"同一个人":固定人格、按人记记忆、有自己的生活节奏、会主动开口;同一个"她"同时出现在 QQ、B站、抖音。

DSH 插件(单角色 feiyu)。版本 0.15.33。

QQ 交流群:1125962189

能力

| 面 | 内容 |

|---|---|

| 人格 | 设置页「人格」:7 个内置模板一键换上(第一个「肥鱼 · 通用」只定性格和说话方式、生活细节聊着聊着才有,后面 6 个带现成的生活细节)、可视化编辑、导入 / 导出 SillyTavern 角色卡(PNG / JSON)、撤销上次更换,换完下一轮生效;角色卡(PNG / ccv3 / chara),{{char}} / {{user}} 宏,世界书(constant / 关键词,可单独导入多本 SillyTavern 世界书:正则 / 整词 / 次要关键词、扫描深度、条数和字数预算);卡里的作息(extensions.fish_soul.routine)用来排每天的日程、「看事情的方式」(perspective)进人格段、「不同心情下怎么说话」(moods)跟着她当下的心情带上;模板按气质分、不绑职业;聊久了会「慢慢长」(性格 / 看法的变化要多次、跨天、跨聊天的证据才生效,人格页可看可删);从群聊 / 好友私聊里学梗、说话风格和「什么场合怎么说」(只学别人的话、不带人名,按学到的次数挑几条参考) |

| 记忆 | 按人隔离、本轮即时召回(BM25 + 向量 RRF)、艾宾浩斯衰减(重要度高不淡)、可纠正(留旧档)、出处 evidence、每人 ≤150 字印象、8 栏结构化印象、关系阶段演进、好感与情绪、旧聊天记录导入(断点续传,较早的聊天按时间段总结)、导入麦麦的表情包 / 表达方式 / 黑话、记忆页搜索与批量操作(删除 / 恢复 / 重要度 / 私密)、每周压缩存档与容量告警、可选周记(见文末两节);聊完自动记(一次调用产出事实 / 事件 / 感受 + 一句话小结,去重合并);隐私:私聊里的敏感记忆标 private,群里检索和召回都不带 |

| 生活 | 虚拟时钟、每日作息与基调、Dream 整理(只补没写的、会标过时)、主动开口与配额 |

| QQ | 直连 SnowLuma(OneBot 11 正向 WS):私聊 / 群聊、群合批带署名、只听点名、戳一戳、撤回不回、可选插话、打字节奏、/鱼 暂停;群默认拒绝(groupAllowList 为空且没开 allGroups 时谁都不回)、没发出去的回复排队重发(退避重试,连上即补发,重启不丢) |

| B站 | 扫码登录、私信(只读 / 自动回复)、跨平台认人、空闲自己刷视频(看字幕 / 热评 / 弹幕,喜欢可点赞、想再看可收藏,站内搜索当又一个来源,后三个默认关)、自己发动态 / 回评论(默认关;可选别人评论区里 @ 她也回,@ 时先读一下视频)、Cookie 自动续期、发图 |

| 抖音 | 专用浏览器扫码登录、私信按会话 ID 认人(0:1:我方:对方,昵称只作展示;改名 / 同名都不串)、canary 防风控、空闲刷视频、自己发图文 / 回作品评论(默认关;图文须确认配乐成功才发布) |

| 习惯 | 心情影响说话(快慢、长短、插话概率、表情包多少)、去 AI 味(删 markdown / AI 自称 / 套话,太长按句末截)、每晚写日记(私密记忆,第二天想跟谁聊)、合并转发展开、每个群的设定(气氛 / 忌讳)、按聊天选模型、群冷热、记忆调试器(输一句话看会想起哪几条)、戳回去 / 表情回应 |

| 语音 | get_record → STT;回复 [语音] → TTS 发 record(失败 / 太长发文字);听 / 说可以各配一套地址和 key。听支持 OpenAI 兼容(硅基流动 SenseVoice 等,走 /audio/transcriptions)、阿里百炼(走 /chat/completions + input_audio,百炼没有 /audio/transcriptions)、MiniMax(/v1/speech_to_text);说支持 OpenAI 兼容、小米 MiMo、火山引擎豆包语音(新版控制台只填 API Key 走 V3,默认 Resource ID seed-tts-2.0;老版填 AppID + Access Token 走 V1,集群默认 volcano_tts)、MiniMax(/t2a_v2,音色填控制台的 voice_id,可用复刻音色)。单次等待上限可调(默认 60 秒,长句不再被 20 秒掐掉) |

| 模型 | 按功能选模型、按天 × 功能 × 模型统计用量与花费、可选上网查 |

| 群管理 | 可选(默认关):发新版本时把更新说明发到指定群(自动盯 npm,同一版本只发一次)、处理入群申请(默认自动同意,也可改成私聊通知你、你回「/鱼 同意 / 拒绝」拍板);设置页「QQ 接入 → 群管理」里配开关与群号 |

| 运维 | 单聊天暂停、动态页、每日自动备份(留 7 份,设置页可恢复到某一份,重启生效)、设置文件读不懂时拒绝覆盖(带 BOM 也能读)、记忆导出 / 原样导回;设置页顶部显示当前版本,自动检查更新(npm / GitHub,每 12 小时,只提示不安装,可关) |

安装

第一次装、想照着一步步走:[从零跑起来](https://github.com/Britneycode/dsh-fish-soul/blob/main/docs/QUICKSTART.md) —— 五步到她在 QQ 里回你第一句话,每步都写了怎么确认成功、卡住了是什么原因。

需要 Node ≥ 22.5。抖音专用浏览器需要一台常开的 Windows 桌面。

从 npm:

dsh plugin --profile desktop add dsh-fish-soul

本地源码:dsh plugin --profile desktop add ./dsh-fish-soul。

手工等价:profile 的 package.json 把 dsh-fish-soul 加进 dsh.profile.bundles,并在 dependencies 里写 dsh-fish-soul 的版本(本地源码则用 link: 路径),然后 pnpm install。

插件注入 webServer / tools / systemPrompt / llm / agents / workspaceRegistry。在支持主面板的 DSH 版本中,左侧栏「鱼」可打开独立工作台;设置页入口也保留。旧宿主若不提供侧栏面板插槽,仍可从设置页打开(六大类:「记忆 / 角色 / 日常 / 平台 / 模型 / 系统」,每类下按任务拆子页)。

已在 DSH 0.2.1-rc.5 上验证;更早的 rc 版本未逐一验证,遇到问题请先升级复测。

设置页读不到时怎么分辨:

  • HTTP 404:插件后台根本没加载(或宿主没把 /api/plugins/fish-soul/* 转给插件)。看宿主日志里有没有 [fish-soul] 启动闸门已挂。
  • 503「插件还在启动 / 插件启动失败,挂在第 N 步…」:插件加载了,但初始化还没走完或中途失败。宿主日志里有对应的 [fish-soul] 启动失败:挂在第 N/M 步「…」 和错误堆栈;走完会打 [fish-soul] 路由已挂。

配置与数据

$DSH_HOME 缺省 ~/.dsh。

| 路径 | 内容 |

|---|---|

| fish-soul-config.json | 全部设置(含 embedding apiKey) |

| fish-soul/soul.db | 单一 SQLite:记忆、人物、日程、会话映射、向量、kv |

| fish-soul/persona.json / persona.png | 人格卡(json 优先);设置页改过的存成 persona.json,旧的进 persona-backups/(留 20 份),persona.prev.json 用来撤销 |

| fish-soul/bili-auth.json | B站凭据(0600,类 Unix 上) |

| fish-soul/douyin-browser/<浏览器>/ | 抖音登录态(专用浏览器 profile) |

| fish-soul/workspace/ | 默认专用工作区「鱼」,表情包在 _stickers/ |

| fish-soul/backups/ | 每日 VACUUM INTO 备份 |

| fish-soul/img-cache/ | webp → png 缓存 |

抖音私信安全暂停与收件恢复

身份按会话 ID 判定,不按昵称。 单聊会话 ID 是 0:1:<我方uid>:<对方uid>,抖音在每条消息上都给;它自带双方 uid,所以「这条消息属于哪个会话、对方是谁」可以由平台数据独立确认,不需要昵称。实现见 lib/douyin-conversation.js。

三道闸门:读的时候按会话挑响应(不再挑「消息最多」的那条,那是串会话的根源);入库前要求会话 ID 是单聊形状且能推出对端,拿不到就整批拒绝并留缺口提示;发送时把会话 ID 一路带到驱动层,每段内容提交前校验当前会话,拿不到就发不出去。重发队列也持久化会话 ID(重发可能隔了几分钟,期间会话可能被切走)。

授权同样只看身份:设置页「主人身份」填 douyin:<你的数字 uid>;昵称 masterName 只用于显示,旧的「昵称 = QQ 号」对应表不再生效(保留但不再授权)。白名单也填身份键。

一键回退:lib/channels/douyin.js 的 DOUYIN_IDENTITY_BLOCKED 设成 true 即恢复成「私信一律不处理、不发送」。

收件读取前会记录读取意图;读取失败或中断时提示抖音可能已标记已读但消息未入库。收件记录与游标以事务写入;处理中的任务中断后标记为结果未知,同会话后续待处理消息会等待人工核实。身份暂停期间不可重试,可核实后忽略。窗口不重叠时会提示可能有缺口,但无法保证发现所有缺失;上游在入库前可能已标记消息已读,警告不能找回消息,也不能保证完整收取或恰好执行一次。现有接口缓存可能跨会话混入数据,待核实消息的会话名和来源都不可信,不应据此自动关联身份。

入站媒体安全边界

QQ 附件、入站图片和语音里的 URL 都是不可信输入:只下载解析到公网 IPv4 的 HTTP(S) 地址(仅 80/443 端口),每次跳转重新检查,并按实际字节限制大小;不自动使用环境代理。IPv6-only 地址、内网地址、自定义端口及入站 file:///本地语音路径默认拒绝,无法读取时保留占位或显示听不了。内网 SnowLuma 或需要代理的媒体地址可能因此不可用;不要把公网 URL 的限制误认为覆盖其他业务的联网请求。QQ 本地附件仍按工作区/数据目录白名单处理。

开发与审查

修改代码或审查 PR 前,请阅读 [工程经验与 PR 准入](docs/engineering-lessons.md)。

目录

lib/
  index.js            插件入口:配置 schema、工具、瞬态块、路由
  db.js               soul.db、DDL、身份映射
  retrieval.js        BM25 + 向量 RRF、单队列双优先级 worker
  segment.js          中文分词(Intl.Segmenter)与停用词

Compare in this category

The five most-starred plugins in the same category.

PluginAuthor StarsVersionUpdated
archify tt-a1i 95.2K 0.0.0 2026-11-10
nuwa-skill alchaincyf 37.9K 2.0.1 2026-11-10
distilly titanwings 26.5K 1.0.0 2026-10-13
learn-harness-engineering walkinglabs 24.1K 0.1.0 2026-10-22
dsh-Go ccch1mneyyy 18.1K 0.0.0 2026-11-10