前言¶
用 DeepSeek Harness(DSH)做日语学习相关助手时,常见做法是:模型凭训练数据解释歌词或语法,但和你手头的逐词注音、粒子角色、你自己标的「自然度」往往对不上。若学习资料在本地应用 Mora 里,助手又拿不到同一套结构化数据,回答就容易变成猜测。
下面介绍社区插件 mora-dsh(SkillHub 目录 shural/mora-dsh,GitHub shural/mora-dsh)。它把本地日语歌学习应用 Mora 接到 Harness:侧边栏学习面板,外加五条 mora_* 工具,让对话里的助手能列出曲库、拉取某句逐词拆解、管理间隔复习卡片,并基于你的标注作答。维护者为 shural;在 SkillHub 上归类为客户端插件。
这是什么¶
mora-dsh 在仓库内包名为 @local/dsh-mora(package.json 版本 1.0.0)。定位是:DSH bundle,在 Harness 内提供 Mora 的学习/练习面板,并注册助手可调用的工具;不包含 Mora 本体,需先单独安装 Mora。
解决两类问题:
- 界面:在 Harness 主区域打开曲库、歌词、逐词条、练习条,风格用宿主
--dsw-alias-*令牌的原生 React 面板(非 iframe),随主题亮暗切换。 - 数据通路:通过
/mora/api/*代理到本机 sidecar,并把曲库、逐词注释、卡片复习暴露为工具,供助手在对话中调用。
核心功能¶
界面与路由¶
| 挂载点 | 作用 |
|---|---|
sidebar.panellist(id mora,order 20) |
侧边栏面板入口图标 |
main(key mora) |
学习面板:曲目轨、歌词、逐词条、练习条 |
| 路由 | /mora/api/*(代理 sidecar)、/mora/info(来源信息) |
面板从曲库选歌后,每行显示假名注音、按短语分组的逐词条(含词义与助词角色)、行译与自然度标记。可点击某行只播放该行;支持 0.5×–1.0× 语速、A–B 循环;「录这一句」会录音并与预期逐 mora 比对(匹配、漏唱、多唱及提示)。完整浏览器端仍可使用 127.0.0.1:8787 上的 Mora 应用(面板内提供链接)。
音频以 blob: URL 播放(曲目拉取一次),减轻代理/隧道剥离 Range 头导致无法 seek 的问题;播放时当前行高亮并自动滚动。
助手可调用的五条工具¶
| 工具 | 作用 |
|---|---|
mora_songs |
列出曲库及行数、卡片数 |
mora_add_song |
按名称或 URL 添加曲目(歌词 → 音频 → 对齐 → 标注,约 40–60 秒) |
mora_song |
指定行范围的逐词 gloss、角色、译文、自然度(助手据此解释语法) |
mora_cards |
已保存词汇卡及到期日 |
mora_review |
对卡片打分并推进复习间隔 |
README 中的典型对话:用户问「为什么 SAY YES 第二句这么写?」→ 助手调用 mora_song,读取逐词拆解与语法注记,基于你的数据回答,而非泛化猜测。
宿主侧运行机制¶
index.js(Host)探测 127.0.0.1:<port>/api/ping:
- 可达则附着已运行的 sidecar(例如用
./run.sh启动的实例); - 不可达则在
appRoot下执行.venv/bin/python -m uvicorn server.main:app拉起子进程; - 插件卸载时对自行 spawn 的子进程发送 SIGTERM。
/mora/api/* 与 /mora/info 为普通 Web 路由,不经 GUI token 鉴权;绑定在 Harness 监听器上,与 sidecar 本机 127.0.0.1:8787 暴露面相当(loopback)。
安装与启用¶
先做三件事:安装 Mora 本体;在本 bundle 目录配置 cordis.patch.yml;用官方命令安装 linked local bundle(不要凭插件名拼接 dsh plugin add github:owner/repo)。
1、安装 Mora(本插件只包装,不替代)。
2、编辑本 bundle 内的 cordis.patch.yml,将 config.appRoot 改为你本机 Mora 仓库的绝对路径;port 默认示例为 8787,autostart 可按需设置:
- insert:
- id: mora
name: '@local/dsh-mora'
config:
appRoot: /absolute/path/to/mora
port: 8787
autostart: true
3、在 desktop profile 下安装 bundle(路径换成本仓库目录的绝对路径):
plugin_manager install_bundle target=<absolute path to this directory>
Host 会附着已在 config.port 监听的 sidecar,或在 appRoot 内拉起 uvicorn;不向公网提供服务。
修改 index.js 后需 remove_bundle 再 install_bundle,并重启 Harness 以重新生成 Host 模块;改 client.js 一般刷新页面即可(开发中若运行 pnpm run dev:web 可热更新)。
典型用法¶
在面板里学唱:侧边栏打开 Mora 面板 → 左侧选曲 → 读逐词条与行译 → 点行试听 → 调语速或 A–B → 需要时用「录这一句」看 mora 级 diff。
在对话里问歌词语法:向助手提问某首歌某句为何这样写 → 助手调用 mora_song(必要时先用 mora_songs 确认曲库)→ 结合返回的逐词角色与注释作答。
复习词汇:助手通过 mora_cards 查看待复习卡,mora_review 提交打分;也可在 Mora 全屏应用中做更长卡拉 OK 会话。
适用场景与注意¶
适合:已在用或打算用 Mora 学日语歌、希望在 DSH 同一窗口里练习并让助手读取你自己库里的标注的开发者或学习者。
注意:
- 插件 Host 部分以当前 DSH 进程权限运行,会拉起或连接本机 Python sidecar;安装前应阅读 GitHub 源码 与 MIT 许可证(见仓库
LICENSE)。 - SkillHub 目录页:shural/mora-dsh;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
- 目录星标为 0(以目录展示为准);面板截图需在实际运行的 Harness 中截取,仓库 README 说明可放在
docs/panel.png。 - 面板可见文案使用内置
ZH/EN字典,而非ctx.locale,避免 locale API 差异导致空白;插件列表元数据仍在locale/{en,zh}.json。
结尾¶
mora-dsh 把 Mora 的学习界面与五条 mora_* 工具放进 DSH,使助手能基于本机曲库与逐词注释回答问题,而不是与本地数据脱节。若你已经在维护 Mora 曲库,可按 README 配置 appRoot 并以 plugin_manager install_bundle 装入 desktop profile。