前言¶
用 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。