dsh-chubby-whale(肥鲸)
DSH 网页版桌面宠物:蓝发女仆鲸鱼娘,常驻 harness 页面右下角。可拖拽(带惯性、位置记忆)、会眨眼、能说话、能说书念诗弹琴,也能听懂你说话。
| 渠道 | 地址 |
|---|---|
| 主仓库(GitHub) | https://github.com/adengou/dsh-chubby-whale |
| 镜像(Gitee) | https://gitee.com/adengou/dsh-chubby-whale |
| npm | https://www.npmjs.com/package/dsh-chubby-whale |
| 更新日志 | CHANGELOG.md |
语音待命的信号处理设计与调参:见 docs/耳朵算法.md 发版与三仓库对齐流程:见 docs/发布流程.md
安装(三种来源任选)
# ① 从 npm 装(推荐,最省事)
dsh plugin --profile web add dsh-chubby-whale
# ② 从 GitHub 装(跟最新代码)
dsh plugin --profile web add "git+https://github.com/adengou/dsh-chubby-whale.git"
# ③ 从 Gitee 装(国内最快)
dsh plugin --profile web add "git+https://gitee.com/adengou/dsh-chubby-whale.git"
# 装完重启 dsh web
dsh web
装完刷新页面即可看到肥鲸。Key 不随包分发,需要自己配:
// ~/.dsh/plugins/dsh-chubby-whale/config.json (或包安装目录下的 config.json)
{
"deepseekKey": "sk-...", // 对话/看图
"siliconflowKey": "sk-..." // 语音识别 + 语音合成
}
也可用环境变量:CHUBBY_WHALE_DEEPSEEK_KEY、CHUBBY_WHALE_SILICONFLOW_KEY
(最后才回退到通用名 DEEPSEEK_API_KEY / SILICONFLOW_API_KEY)。
自我进化(可选,都能关)
肥鲸会随成长学一点东西,两个开关默认开启,写进 config.json 即可关闭:
| 配置键 | 默认 | 作用 |
|---|---|---|
personalityLearning |
true |
每 20 次真实回复、且距上次 ≥6 小时,从最近对话里提取主人的口头禅 / 偏好 / 备注(各有条数与字数上限;名字、家人、生日、语言规则等核心设定锁死,永不自动改) |
personalityWriting |
true |
每 20 次真实回复、且距上次 ≥24 小时,写一句**≤80 字的「近期心境」**;输出里若出现「我是 / 改名 / 爸爸 / 妈妈 / 生日 / AI」等身份词,整句丢弃不写盘 |
- 存储:
~/.dsh-chubby-whale/personality.json(原子写;坏文件自动隔离为.bad-<时间戳>;只保留最近 20 条变更历史); - 查看:
GET /api/chubby-whale/personality; - 回滚:
POST /api/chubby-whale/personality/revert(一次撤一条,可连按;也支持回滚「近期心境」); - 关掉后已存内容仍会注入,只是不再学习、不再写新心境。
本地开发(link 方式)
dsh plugin --profile web add "link:C:\Users\<你>\.dsh\plugins\dsh-chubby-whale"
卸载
dsh plugin --profile web remove dsh-chubby-whale
运行数据在 ~/.dsh-chubby-whale/(记忆、亲密度、成长、鱼粮、提醒、缓存),卸载插件不会删它。
功能
| 分类 | 能力 |
|---|---|
| 陪伴 | 立绘常驻右下角、拖拽惯性、位置记忆、自动眨眼、说话时嘴动、喂食冒爱心 |
| 聊天 | 气泡对话(DeepSeek),人设固定(名字/爸妈/生日/出生地),支持中英双语,长期记忆摘要 |
| 语音 | 文字转语音(9 种音色、可关、可停)、语音待命(常驻听写)、语音聊天开关 |
| 文化 | 说书(17 本古籍,念原文、进度记忆、不重复)、念诗(737 首)、典故(261)、成语(834)、民间故事(696)、对联 |
| 音乐 | 11 首曲子 Web Audio 合成播放(含升降号与低/高音) |
| 工具 | 提醒(口语时间:9点 / 明天9点 / 半小时后 / 每天8点)、看图、拖文件(图片识别 / 文本总结)、成长与亲密度、鱼粮账本、余额、清除记忆 |
目录结构
dsh-chubby-whale/
dist/ 编译产物(已提交,安装无需构建)
src/ 源码(TS)
data/ 内容数据(必需,33MB)
story/ 17 本古籍 JSON
culture/ 典故 / 成语 / 民间故事
poems.json 737 首诗
melodies.json 11 首曲子
assets/ 立绘
cordis.patch.yml 插件注册配置
依赖
| 依赖 | 用途 | 必需性 |
|---|---|---|
| Node.js ≥ 22 | 运行宿主端 | 必需 |
config.json 的 deepseekKey(或环境变量 CHUBBY_WHALE_DEEPSEEK_KEY / DEEPSEEK_API_KEY) |
聊天、总结 | 聊天必需 |
Python 3 + edge_tts(pip install edge-tts) |
语音合成 | 语音必需 |
硅基流动 Key(config.json 的 siliconflowKey 或环境变量 SILICONFLOW_API_KEY) |
语音识别(Qwen3-ASR) | 语音输入必需 |
没有 Key 也能用:说书、念诗、典故、成语、民间故事、弹琴、提醒、成长全部离线可用,不消耗 token。
安装
dsh plugin --profile web add link:<本目录>
然后重启 dsh web。首次打开页面点一下任意位置(浏览器要求用户手势才能开麦克风)。
配置
复制 config.example.json 为 config.json(config.json 已被 git 忽略,不会误提交):
{
"deepseekKey": "",
"siliconflowKey": "",
"dataSource": "local"
}
Key 读取优先级:config.json → 专属环境变量(CHUBBY_WHALE_DEEPSEEK_KEY / CHUBBY_WHALE_SILICONFLOW_KEY)→ 通用环境变量(DEEPSEEK_API_KEY / SILICONFLOW_API_KEY)。
本插件刻意不读 ~/.dsh/.credentials.yaml,避免与其他插件互相牵连。
数据源:本地 / 云端
说书、念诗、典故、成语、民间故事、对联的数据来自 DataPort,默认读插件包内 data/。
把 dataSource 改成 cloud 后,改为按需从 https://adengou.cn/culture/v1/ 拉取:
{
"dataSource": "cloud"
}
local(默认):完全离线,行为与旧版一致。cloud:首次用到某本书/某类文化才下载,进程内缓存;清单manifest.json的version+generatedAt变化后才失效重拉。网络失败自动回退本地data/,日志记一条CLOUD-DATA-FAIL,60 秒内不再重试网络,错误不会冒到前端。- 环境变量兜底:
CHUBBY_WHALE_DATA_SOURCE=cloud。优先级:cordis 配置config.dataSource→config.json→ 环境变量 →local。 - 说书进度、念诗/文化已读记录仍写
~/.dsh-chubby-whale/,与数据源无关;前端接口与返回结构不变。 - 对联目前由前端内置库直接使用(构建时编入
dist/client.js),不经过宿主路由;DataPort.readDuilian()已备好,但切换数据源不会替换前端对联库。
插件开关
cordis.patch.yml 里的 config.enabled 是本插件的总开关(默认 true):
- insert:
- id: chubby-whale
name: dsh-chubby-whale
config:
enabled: false
改成 false 后重启 dsh web:宿主端不再注册任何 /api/chubby-whale/* 路由(聊天、说书、语音、提醒等全部停用),启动日志会打印 [chubby-whale] disabled by config。它只停宿主端;要连前端 bundle 一起停用,用条目自带的 disabled: true(dsh-client-modules 只扫描启用的 entry)。
常见问题
- 没有声音:检查本机是否装了
python与edge-tts(python -m edge_tts --help能跑通即可) - 听不懂说话:检查
siliconflowKey;浏览器地址栏麦克风权限要允许 - 说书/念诗没内容:
dataSource=local时确认data/目录存在且完整(33MB);cloud时看日志里的CLOUD-DATA-FAIL(网络失败会自动回退本地) - 数据存哪:
memory.json、growth.json、reminders.json、说书进度、已读记录都在~/.dsh-chubby-whale/(插件升级不丢)
开发
npm install
npm run build # tsc + esbuild → dist/
src/client.ts 由 esbuild 单独打包成 IIFE(tsconfig 里 exclude),其余模块走 tsc。
数据热更新(改内容不用重启)
data/story/*.json、data/culture/*.json、data/poems.json 都按文件修改时间自动失效:
改完保存,下一次请求就会重新读取(无需重启 dsh web,也无需清缓存)。
运行数据(记忆/成长/鱼粮/提醒/说书进度/缓存)都在 ~/.dsh-chubby-whale/,与插件包分离。
No comments yet. Be the first to write one.