dsh-english-study:在 DSH 裏看 YouTube 學英語的本地插件

前言

DSH 的插件體系是「一切皆插件」,前端面板、服務端接口、模型工具都能由社區插件擴展。但多數插件解決的是工作流問題,少有把「沉浸式英語學習」搬進來的:在瀏覽器裏看 YouTube,劃詞查詞,攢成生詞本,再按間隔重複複習。

dsh-english-study 就是把這條鏈路塞進 DSH 的一個插件。它由 woshijing1991-cloud 維護,MIT 許可證,當前版本 0.1.0。定位是:面板掛在 DSH 左側圖標欄,配套一個本地 Python 網關,視頻、字幕、查詞記錄、生詞本全部落在本機 SQLite 裏,不連遠端服務、不做雲同步。

下面介紹它的功能、安裝方式、配置項和典型用法。

一、整體架構

插件由兩部分組成:一個 DSH 前端面板,加一個 Python 網關。面板負責渲染儀表盤、YouTube 列表、生詞本、複習隊列、詞典和報表;網關是純標準庫 Python(默認監聽 127.0.0.1:8788),所有數據寫入本地 data/*.db。數據流如下:

YouTube 頁面(Edge/Chrome + 瀏覽器擴展) ──點擊單詞──▶ 網關 127.0.0.1:8788 ──▶ data/*.db
DSH 面板(lib/client.js) ──同源──▶ /dsh-english-study/api/* ──▶ 網關 ──▶ data/*.db

有一個設計細節值得說明:面板不做跨域直連網關,而是通過插件把 /dsh-english-study/api/* 代理到上游 URL。這樣做的好處是避開 CORS 和混合內容問題,換端口時也只需要改一處配置。

二、核心功能

面板內可完成的主要能力:

  1. YouTube 播放:按話題聚合的首頁 feed、支持翻頁的真實搜索、官方 /embed/ 播放器(不下載視頻)、可點擊的字幕。視頻本身從不落盤。
  2. 點擊查詞:字幕裏的任意單詞都可以點,瀏覽器擴展會把單詞連同所在句子發給本地網關。
  3. 語境解釋:可選 AI 能力,接入任意 OpenAI 兼容的 /chat/completions 端點。不配置時,面板只查本地詞典,完全不髮網絡請求。
  4. 生詞本 + SM-2:again / good / easy 三檔評分,按 SM-2 算法維護 ease factor、interval、lapses,待複習隊列帶角標計數。
  5. 沉浸統計:按天的觀看秒數、查詞次數、不同單詞數、連續天數。
  6. 報表與導出:網關提供的本地 HTML 頁面,支持 CSV 導出。
  7. 聽寫與句子收集:對已保存的詞做聽寫練習,保留喜歡的句子。
  8. 只讀模型工具:暴露 english_study,子方法 stats / dict / due,讓智能體能回答「我今天該複習什麼」。

三、安裝與啓用

1. 把插件放進 DSH profile

先把倉庫克隆或拷貝到磁盤任意位置,例如 /opt/dsh-english-study,Windows 下用 D:/plugins/dsh-english-study。然後編輯 profile 的 package.json,默認路徑是 ~/.dsh/profiles/desktop/package.json:

{
  "dependencies": {
    "dsh-english-study": "file:/absolute/path/to/dsh-english-study"
  },
  "dsh": {
    "profile": {
      "bundles": [
        // ...existing entries...
        "dsh-english-study"
      ]
    }
  }
}

這裏的關鍵是:包聲明瞭 dsh.bundle.patch(cordis.patch.yml),所以只要列進 bundles,安裝器就會自動插入加載條目。不要再在自己的 profile 的 cordis.patch.yml 裏給這個插件加 insert 塊,重複的 loader id 會導致啓動檢查失敗。只有當 DSH 構建不支持 layered bundled patches 時,才改爲在那裏手寫 insert。

保存後讓 DSH 下次啓動時裝依賴,或手動跑 profile 的包管理器安裝。需要注意 file: 依賴是複製進 node_modules 而不是軟鏈,改完插件源碼要重新安裝或重新拷貝,否則跑的仍是舊副本。

2. 啓動本地網關

cd dsh-english-study/gateway
python server.py            # 監聽 0.0.0.0:8788

沒有 pip install,也不需要數據庫遷移,data/english-study.db 首次運行自動創建。

Windows 下可以直接雙擊 start-gateway.cmd,錯誤信息會留在窗口裏;插件在網關未運行時也會自動拉起,除非 ES_GATEWAY_DIR 指向了別處。自動拉起的行爲分平臺:

  • Windows:運行 start-gateway-hidden.cmd,腳本自己會設好 ES_API / ES_MODEL。
  • macOS / Linux:直接跑 python3 gateway/server.py,解釋器可用 ES_PYTHON 覆蓋。因爲繼承的是當前 shell 的環境,想讓 AI 生效就需要先導出 ES_API / ES_MODEL / ES_KEY。

網關沒有任何鑑權,設計上就是給本機用的。除非確實想讓同一 Wi-Fi 下的手機訪問,否則把 ES_HOST 設成 127.0.0.1,並且不要把 8788 端口暴露到公網——不做端口轉發、不加公開反向代理。

3. 重啓 DSH 並驗證

宿主側代碼和 slot 註冊在啓動時收集,重啓 DSH、刷新界面後,左側圖標欄會出現 “English Study” 圖標。用兩個 curl 驗證:

# 1) 網關是否應答
curl -s http://127.0.0.1:8788/api/health
# {"ok":true,"ai":false,"model":"","local_only":true,"port":8788,"dict":false,...}

# 2) 插件路由是否掛到 DSH GUI 上
GUI_PORT=8045   # 換成你 DSH 設置裏顯示的端口
curl -s "http://127.0.0.1:${GUI_PORT}/dsh-english-study/api/client-ping"
# {"ok":true,"plugin":"dsh-english-study"}

返回裏 "ai":false 和 "local_only":true 是默認狀態,不是報錯;"dict":false 只說明還沒建詞典。

四、配置項

配置全部走環境變量或插件配置字段。核心功能不需要任何配置,默認值就能離線工作:

配置 環境變量 默認值 作用
網關端口 ES_PORT 8788 網關監聽端口,改動需同時同步插件側 gateway 配置
綁定地址 ES_HOST 0.0.0.0 0.0.0.0 允許同 Wi-Fi 設備訪問,127.0.0.1 僅限本機
網關目錄 ES_GATEWAY_DIR 插件自身目錄 start-gateway*.cmd 所在位置,供自動拉起使用
上游 URL ES_GATEWAY 或插件配置 gateway http://127.0.0.1:8788 插件把 /dsh-english-study/api/* 代理到哪裏
AI 端點 ES_API 空 OpenAI 兼容的 /chat/completions URL,空表示只用本地詞典
AI 模型 ES_MODEL 空 發往端點的模型名,例如 deepseek-chat
AI key ES_KEY(或 DEEPSEEK_API_KEY) 空 只從環境讀,絕不寫盤
Python 解釋器 ES_PYTHON python / python3 .cmd 啓動器和 macOS/Linux 自動拉起使用;PATH 裏沒有時填完整路徑
基礎路徑 插件配置 basePath /dsh-english-study 同源路由前綴
默認標籤頁 插件配置 defaultTab dashboard 面板首個打開的標籤
YouTube 代理 ES_PROXY 空(直連) 例如 http://127.0.0.1:7890

除上表之外,README 還要求兩個外部環境條件:字幕功能依賴 PATH 上的 yt-dlp 且必須是較新版本——2024 年的舊版會報 Precondition check failed 或 No video formats found,apt 源裝的版本往往無法自更新,建議直接下 GitHub release 二進制。不做瀏覽的話不需要管它,面板照常運行,只是沒有可點擊字幕。另外,YouTube 首頁和搜索列表要有內容,需要提供 YT_INNERTUBE_KEY(YouTube web-client key),否則這兩個列表爲空,其餘功能不受影響。

五、典型用法

最輕量的用法:只配本地網關、不接 AI。經過上面的步驟啓動後,面板裏點 YouTube 視頻,點字幕單詞,查到的詞連同句子進入生詞本,之後在複習隊列裏按 認識 / 不認識 逐張過卡,評分驅動 SM-2 排期。攢幾天後,儀表盤上出現每日觀看秒數、查詞數、不同詞數、連續天數和最常查的詞。

想讓 Agent 參與複習安排,則在 DSH 側調用只讀工具 english_study。它有三個子方法:stats 給統計,dict 給本地詞典查詢,due 給當日待複習隊列。藉助 due,Agent 可以直接回答「今天我該複習哪些詞」,這也是這個插件和工作流結合的入口。

如果想讓每段字幕都帶 AI 語境解釋,就設置 ES_API / ES_MODEL / ES_KEY。不設的話不會請求任何網絡,行爲退化爲純本地詞典。

六、適用場景與注意

適合這幾類人:

  • 想在 DSH 一個界面裏完成「看視頻 → 查詞 → 複習 → 統計」閉環,不想裝獨立生詞軟件的用戶;
  • 在意數據歸屬,希望查詞記錄和生詞本完全留在本機,不經任何雲同步的用戶;
  • 希望 Agent 能基於本地學習數據回答問題,而不是把內容丟給大模型的開發者。

需要注意的幾點:

  1. 插件以當前 DSH 進程的權限運行。它在你本機監聽端口、讀寫本地 SQLite、在你瀏覽器裏注入擴展,安裝前仍應通讀源碼,確認行爲與許可證(MIT)符合預期。
  2. 網關沒有鑑權。ES_HOST 保持 127.0.0.1,不要暴露 8788 端口。
  3. 完整功能依賴 Windows 10/11(Edge 自動啓動、cookie 提取),網關本身跨平臺。macOS/Linux 上 AI 需要靠環境變量自行注入。
  4. file: 依賴是拷貝語義,改插件源碼後要重裝,否則跑的是舊副本。
  5. 沒有 yt-dlp 就沒有可點擊字幕;沒有 YT_INNERTUBE_KEY,首頁和搜索列表爲空。這兩項不影響本地學習鏈路,但會影響視頻體驗。

七、結尾

dsh-english-study 的價值在於把「看 YouTube 學英語」這條鏈路完整搬進 DSH:點擊查詞、SM-2 複習、沉浸統計、CSV 導出都在本地完成,AI 解釋是可選增強而不是必需依賴。它和 DSH「一切皆插件」的思路一致,適合想要一個自託管學習面板的人。

  • 社區目錄頁:https://www.skillhub.cn/plugins/woshijing1991-cloud/dsh-english-study
  • GitHub:https://github.com/woshijing1991-cloud/dsh-english-study
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜