前言¶
以英語爲工作語言的開發者會讀大量英文技術內容,問題通常不是”沒背過單詞”,而是”一個詞只認得它在某處的那一個意思”,讀得準不準自己也不確定。劃詞翻譯能解決”看懂這句話”,查完就忘,沒留下可複習的東西。下面介紹的 dsh-word-learn 反過來把目標放在”記住這個詞”上:劃詞後浮出學習卡,查過的詞進生詞本,再用 FSRS 安排複習。
這是什麼¶
dsh-word-learn 是一個 DSH 插件,由 guicaiyue 維護,GitHub 倉庫許可證爲 MIT。社區目錄把它歸在「記憶」分類下。它解決的問題很具體:讓開發者在 DSH 對話裏讀英文時順手查詞、入簿、排期複習,而不是把翻譯當終點。
倉庫 package.json 中版本號爲 0.1.0,engines.node 要求 >=22.5.0。倉庫創建於 2026-11-04,截至我們抓取時 GitHub star 爲 0,屬於個人維護的新項目,功能和排期都在演進。
它和劃詞翻譯有什麼不同¶
README 裏直接給了一張對照:
| 劃詞翻譯 | 本插件 | |
|---|---|---|
| 目標 | 讓你看懂這句話 | 讓你記住這個詞 |
| 結果 | 譯文,看完就忘 | 生詞本 + 複習排期 |
| 對常見詞 | 照樣翻譯 | 標出”這是高頻詞,你多半已認識” |
| 數據 | 無 | 本地 SQLite,可導出 |
也就是說,它關注的是一個詞在”今後還會不會遇到、會不會想起來”,而不是當前這一句的語義。
劃詞卡片:只對對話正文生效¶
插件最基礎的動作是:在 DSH 對話裏選中英文單詞,就地浮出學習卡,包含音標、釋義、詞形變化、詞頻分級、真人發音、例句和近義詞。浮層不修改頁面 DOM。
範圍控制做得比較嚴格:選區兩端必須落在 [data-chat-flow] 內。左側欄、右側欄、軌跡(Trajectory)頁、英語學習看板一律不響應;錨點找不到就完全不彈,不會退化成”全頁面亂彈”。如果你要改這塊邏輯,先跑 npx vitest run tests/features/scope.test.mjs,範圍判定和排除名單的單一來源在 src/client/features/core.js。
句子翻譯與拆詞¶
選中整句時行爲不同:先給中文譯文,下面再列可拆的候選詞。翻譯優先用 DSH 自己的模型,理由是技術語境更準,例如 reviews 會譯成”複習”、latent space 譯成”潛空間”;模型不可用時降級到 MyMemory 公共接口。翻譯掛了不影響拆詞,拆詞走另一條路徑。
詞典、詞頻與過濾¶
詞典是 ECDICT 精簡出的 SQLite 庫,大小 14.4 MB,包含 59,111 條詞條和 39,053 條變形索引,離線可查。這意味着查詞不依賴網絡,詞典文件在 <插件目錄>/data/ecdict.db,只讀。
因爲 ECDICT 把變形詞單獨立條目、詞頻字段常常是錯的,插件做了變形回退:children → child、better → good、perceived → perceive,並繼承原形的詞頻。詞頻分爲五檔:最高頻 1000、高頻 3000、常用 8000、低頻、專業詞。學習卡會告訴你”這是高頻詞,你多半已認識”,避免把時間花在已經掌握的詞上。
過濾規則裏有兩類值得注意:代碼類文本不放行,src/lib/index.js、config_path、getElementById 不會被當成單詞;數值後綴不放行,≈62.3M、≈65.7k 不會被當成 M 或 k。前端和宿主路由兩處都設了閘。
發音、例句與自動播放¶
例句來自 dictionaryapi.dev,帶磁盤緩存,取不到就降級,不影響查詞。發音走瀏覽器內置語音 speechSynthesis,零網絡、離線可用,優先挑系統裏的 natural/online 英文音色,選中的音色與語速記在本地。瀏覽器不允許錄製合成結果,所以沒有音頻文件緩存,每次都是本機實時合成。
自動發音默認開啓,可以關。開關在 設置 → 發音偏好 → 自動發音。進入學習頁、單詞出現、看答案、拼寫結果出來時會各讀一遍,營造”邊看邊聽”的環境;喇叭圖標隨時手動重聽,自動播放出錯不彈提示。
生詞本與能力畫像¶
查過的詞自動進生詞本,記錄原句、遇見次數,並生成五維能力畫像:認得、意思、能寫、能聽、讀準。可以收藏和加筆記。
學習頁和 AI 分析裏的易混淆詞/近義詞是虛線小標籤,鼠標停留或點一下會浮出音標和釋義,卡片裏可一鍵加入生詞本。懸浮只是預覽,不會把掃過的詞都塞進生詞本。
外觀跟隨 DSH 主題,顏色取主題令牌 --dsw-alias-*,明暗切換自動跟隨,不需要重啓。
AI 分析模型與失敗提示¶
詞根拆解、干擾項、記憶法用哪個模型,在設置頁從 DSH 已有的文本模型列表裏選,默認用第一個,不跟隨對話的默認模型;改完下一次分析立刻生效。分析失敗時會區分原因:拿不到模型服務、沒配 Key、限流、輸出不是 JSON,分別報出來,不再一律顯示”可能是模型不可用”。
學習頁與 FSRS-6¶
左欄上半部分有「英語學習」入口,點開是整頁面板,包含今日複習、明日到期、未來 14 天預測、近 14 天複習量、學習進度、能力畫像和報表。排期用 FSRS-6(ts-fsrs@6.0.0,MIT),每個詞有兩條獨立線:認得出(receptive)和寫得出(productive)。
這裏有幾條實現上的規則值得看一下:
1、寫得出要等認得出穩了才上線。receptive 進入複習態(state>=2)且評過至少 2 次,productive 才排進隊列;查詞建卡時 productive 只是先把結構建好,不進隊列。
2、一個詞一輪只出現一次。兩條線同一天到期時先做更早到期的那張(同 due 時先認得出),另一張留到下一輪;看板的今日、明日、預測也按詞去重。否則就會變成連着做同一個詞的 massed practice,而不是間隔重複——README 提到早先的實現漏過這兩條,會出現”剛背完一個詞,下一張還是它”。
3、兩條線練的東西不一樣。認得出給英文、選釋義;寫得出給中文釋義、要把單詞拼出來,拼對/筆誤/寫錯分別算太簡單/記得/忘了。
4、反覆忘到 8 次會自動掛起(leech),不再進隊列。
「忘了」怎麼處理¶
評「忘了」時不是直接給答案,而是先自己寫一次意思,對照釋義和原句,再把詞拼對一次,才評 Again(1)。單詞在拼寫階段被藏起來,喇叭和跳過也一併收起。這一步只增加提取與產出,不改變評級:補記成功照樣評「忘了」,免得騙過 FSRS 把間隔拉長。
有義項材料時會先做四選一。AI 按”這個詞 + 你遇見它的原句”生成義項材料後,「忘了」會先讓你從四個義項裏選這句裏是哪個,再給”你選的是 X / 這句裏是 Y”的反差,然後才進拼寫;分析還沒跑完時自動退回自由回憶。
另外還有兩層:會話末補記,把今天評過「忘了」的詞在本輪結束前再拼一次,拼對才清掉那筆”補記債”;次日回訪,第二天進學習頁做一分鐘”昨天忘過的詞,這兩句裏同一個意思嗎”,答對清債、答錯重開債,只記日誌、不動 FSRS,可以跳過。
對話內聯標註¶
讀到的英文裏,在學、有卡片的詞會帶一條虛線下劃線,懸停或聚焦出小卡,顯示這個詞在這句裏的義項和「收進複習」。原文不改、不翻譯。代碼塊、行內代碼、文件名、URL、鏈接、彈窗、其它插件界面都不標;摺疊內容只標標題,展開後才補標;流式生成中的文字不碰。關掉的方式是控制台執行 localStorage['dwl-annotate'] = 'off' 後刷新。
數據位置與備份¶
| 文件 | 位置 | 說明 |
|---|---|---|
| 詞典 | <插件目錄>/data/ecdict.db |
只讀,可重新生成 |
| 生詞本 | $DSH_HOME/dsh-word-learn/user.db |
不可再生,請備份 |
| 外部緩存 | $DSH_HOME/dsh-word-learn/cache/ |
可刪 |
生詞本不可再生,升級或遷移前先備份這個文件。
接口與安全邊界¶
前端(劃詞卡、標註、學習頁)全部編譯在 dist/client.js 一個產物裏,由宿主按 package.json 的 exports["./client"] 加載,沒有前端腳本路由,也沒有頁面注入。宿主入口是 package.json 的 exports["."] → lib/host/index.js。
數據面有 22 條接口,路徑以 src/host/routes/paths.ts 爲唯一齣口,例如 GET|POST /dsh-word-learn/lookup、POST /dsh-word-learn/grade、GET /dsh-word-learn/dashboard。寫操作只接受表裏聲明的方法,其餘返回 405 並帶 Allow 頭;跨站請求一律 403。這層柵欄對第三方腳本同樣生效。
需要重新生成詞典時,README 給出的流程是下載 ECDICT 再構建:
# 1) 下載 ECDICT(63 MB)
curl -L -o D:\dsh-cache\tmp\ecdict.csv https://raw.githubusercontent.com/skywind3000/ECDICT/master/ecdict.csv
# 2) 構建
python scripts\build_dict.py
安裝與使用前提¶
README 裏沒有給出統一的 dsh plugin add ... 命令。安裝前先到社區目錄頁和倉庫確認入口,不要憑倉庫名拼接安裝命令。上手前建議先讀倉庫裏的 AGENTS.md 和 CONVENTIONS.md:前者是改代碼前的硬約束和”改 X 去哪裏”定位表,後者是目錄邊界、路由契約、數據訪問和測試紀律。提交改動前跑 pnpm verify,它串起構建、產物檢查、類型/lint/格式/依賴檢查和測試。
插件以當前 DSH 進程權限運行,能讀寫宿主文件和發起 HTTP 請求。安裝前應當檢查源碼與許可證,確認它不觸碰你不希望它訪問的數據。
結尾¶
dsh-word-learn 的價值在於把”讀到一個詞”和”記住這個詞”連起來:本地詞典保證查詞離線可用,詞頻分級避免在已掌握的詞上反覆消耗,FSRS-6 保證複習排期而不是一次性查詞。項目處於早期,星標和社區反饋都還很少,適合願意自己讀源碼、按 AGENTS.md 約束改代碼的開發者。目錄頁與倉庫如下。
- 社區目錄:https://www.skillhub.cn/plugins/guicaiyue/dsh-word-learn
- GitHub:https://github.com/guicaiyue/dsh-word-learn