dsh-course-notes:把視頻課程自動變成 Word 筆記,再投遞到新會話

前言

在 DSH 裏做課程類知識沉澱,常見的做法是:先用一個插件把視頻的簡介、字幕、彈幕抓下來生成 Markdown,再手動把內容整理成 Word,手動建一個新會話,手動把文件拖進去,還得自己記哪個視頻漏了。這條鏈每一步都是人工搬運。

下面介紹的插件 dsh-course-notes 就是把這段搬運接上自動化:監視 dsh-video-coursemap 的檢測結果,發現新視頻就生成獨立 Word,並自動投遞到一個新的 DSH 會話,同時寫一條項目長期記憶。插件由 sony6490 維護,分類爲「工作流」。

它是純宿主插件,不發檢測請求、不抓數據,也不修改 dsh-video-coursemap 與 dsh-memory-evolve 的任何代碼,不新建客戶端界面。

這是什麼

一句話定位:讀取 dsh-video-coursemap 的檢測結果,爲每個新視頻生成獨立 Word 知識筆記並自動投遞到一個新的 DSH 會話(摘要 + Word 文件卡),同時寫入 dsh-memory-evolve 的項目記憶。

它不負責檢測視頻,也不負責抓字幕;檢測與抓取全部由上游 dsh-video-coursemap 完成。本插件只做「監視 → 轉換 → 起會話 → 投遞 → 記記憶」這一段。

核心功能

工作鏈路如下:

瀏覽器 B 站視頻(前臺窗口)
   │ dsh-video-coursemap 每 15s 觀察前臺窗口
   ▼
學科分類 + 抓取簡介/字幕/彈幕/熱評 → 學科 Markdown → 學習手冊.docx
   │ 落盤:<輸出目錄>/.state/state.json、.state/manuals/<學科>.md
   ▼
dsh-course-notes
   ├─ 監視 state.json,發現臺賬裏沒有的 (學科, 視頻)
   ├─ 從學科 Markdown 抽出該視頻章節 → scripts/md2docx.py → <學科>/<視頻標題>.docx
   ├─ ctx.agents.create 新建標準會話(默認 Agent 預設 + 默認模型 + cwd=輸出目錄)
   ├─ attachments.saveFile(docx) → session.append 用戶消息(摘要 + Word 文件塊)
   ├─ sessionTitle.rename(會話標題「📚 視頻標題」)
   ├─ workspaceRegistry 掛到「課程知識地圖」項目分組
   └─ memory 工具(dsh-memory-evolve,target=project)寫一條課程筆記

幾個直接和成本、可控性相關的點:

  1. 投遞不觸發模型回合,會話裏直接出現摘要文字 + Word 文件卡,不額外消耗 token。
  2. 臺賬按「學科 + 標題」去重,已投遞的視頻不會重複生成和投遞。
  3. 單個視頻出錯會自動重試,上限爲 maxAttempts(默認 3)。
  4. coursemap 判定爲非課程的內容(純音樂、直播、新聞等)會被靜默忽略,不建會話也不報錯。

安裝與啓用

前置條件:DSH Desktop 已初始化 desktop profile,且已安裝 dsh-video-coursemap 與 dsh-memory-evolve。

從代碼目錄安裝:

cd path/to/dsh-course-notes
node scripts/install.mjs --dry-run   # 預覽
node scripts/install.mjs             # 安裝 / 更新

安裝腳本做兩件事:把插件複製到 C:/Users/<你>/.dsh/profiles/desktop/node_modules/dsh-course-notes(覆蓋舊副本);冪等登記到 profile package.json 的 dsh.profile.bundles(首次會備份 package.json)。

從 GitHub 安裝:

dsh plugin --profile desktop add github:sony6490/dsh-course-notes

dsh plugin add 只負責把包放進 profile。裝完要確認 profile 的 package.json 裏兩處都在:

  • dependencies:"dsh-course-notes": "github:sony6490/dsh-course-notes"
  • dsh.profile.bundles:數組裏有一項 "dsh-course-notes"

缺 dependencies 時,之後任何一次 pnpm install(例如用 dshmarket 裝/卸別的插件)都會把這份副本當多餘包刪掉。README 提到本插件 2026-11 就踩過這個問題,安裝腳本已改成同時寫依賴與 bundles。

裝完要完全退出並重啓 DeepSeek Harness,宿主插件不熱加載。重啓後插件自動開始輪詢,首次啓動默認補投當前已有的視頻。

典型用法:裝完的驗收

重啓後在 DSH 裏執行:

course_notes_status
course_notes_deliver { "title": "<某個已有視頻標題>", "force": true }

期望結果:側邊欄「課程知識地圖」分組下出現「📚 <視頻標題>」會話,對話裏是摘要文字 + Word 文件卡,點擊可以打開或下載。

兩個工具的分工:

  • course_notes_status:查看啓用狀態、輸出目錄、coursemap 狀態、學科/視頻數、已投遞/待投遞/失敗、最近投遞的會話與文檔。
  • course_notes_deliver:立即投遞某個已在 coursemap 狀態裏的視頻;缺省取最近處理的視頻,force: true 可重複投遞。

配置

全部配置項可缺省。需要覆蓋時在 profile 的 cordis.patch.yml 裏按 id 覆蓋:

- id: dsh-course-notes
  config:
    coursemapOutputDir: 'C:/Users/你的用戶名/課程知識地圖'
    writeMemory: true
    backfill: false

常用鍵與默認值:

鍵 默認 說明
enabled true 總開關
watchIntervalMs 15000 掃描間隔(毫秒)
initialDelayMs 20000 重啓後首次掃描延遲
coursemapOutputDir C:/Users/<你>/課程知識地圖 必須與 coursemap 的 outputDir 一致
sessionCwd null → 輸出目錄 新會話工作目錄(決定項目記憶歸屬與左側分組)
writeMemory true 是否寫 dsh-memory-evolve 項目記憶
backfill true 首次啓動是否補投歷史視頻
maxPerTick 2 每輪最多投遞數
provider / model null 覆蓋新會話模型;缺省跟 DSH 默認模型
sessionTitlePrefix 📚 會話標題前綴
stateDir C:/Users/<你>/.dsh/course-notes 臺賬、日誌、臨時 Markdown
md2docxScript <插件>/scripts/md2docx.py Word 轉換腳本
python null → 自動探測 Python 解釋器(需 python-docx)
maxAttempts 3 單個視頻自動重試上限

coursemapOutputDir 是容易出錯的一項:這個值必須與 coursemap 的 outputDir 保持一致,否則 course_notes_status 會顯示「coursemap 狀態:未找到」。

狀態與產物

安裝完後的落盤位置:

  • 臺賬:<stateDir>/delivered.json,按學科+標題去重,記錄 sessionId 與 docx。
  • 日誌:<stateDir>/course-notes.log,每次投遞/失敗一行。
  • 單視頻 Word:<輸出目錄>/<學科>/<視頻標題>.docx。
  • 學科學習手冊:<輸出目錄>/<學科>/學習手冊.docx,由 coursemap 維護,不是本插件生成的。

排障可以先看日誌:工具沒出現,看是否完全重啓 DSH、node_modules 下是否有 dsh-course-notes、profile bundles 是否登記;會話只有文字沒有文件,看日誌裏的「生成單視頻 Word 失敗」,確認 python / python-docx 是否可用;會話沒出現在項目分組,看日誌裏的「掛接工作區失敗」,這不影響會話本身。

適用場景與注意

適合已經在用 dsh-video-coursemap 做視頻學習沉澱、希望每個視頻都有一份可下載 Word、並且能在獨立會話裏繼續追問的人。它把「新視頻 → Word → 新會話 → 項目記憶」這段手工流程串起來,代價是依賴上游兩個插件的輸出目錄與 Markdown 結構約定。

插件以當前 DSH 進程的權限運行:它會讀取 coursemap 的 state.json、寫輸出目錄、創建會話、掛接工作區分組、寫項目記憶。安裝前建議先讀一遍倉庫源碼,重點看 scripts/install.mjs 的寫盤與 package.json 改寫行爲,以及 scripts/md2docx.py 在做什麼。許可證是 MIT,其中 md2docx.py 來自 dsh-video-coursemap(MIT),文件頭保留了原始來源說明,本插件只改了調用方式。

實際使用上的限制:檢測能力繼承 coursemap,只覆蓋前臺瀏覽器/視頻客戶端窗口,後臺播放檢測不到;新會話初始只有一條歸檔消息 + Word 卡,不會自動跑模型,用戶可以在該會話裏繼續提問;若 coursemap 未來修改 Markdown 結構,章節抽取失敗會降級使用學科學習手冊 Word;插件升級需要重新執行 node scripts/install.mjs 並重啓 DSH。

生態背景:DSH 的理念是「一切皆插件」,本插件通過社區目錄分發。目錄頁是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不是官方應用商店。當前目錄頁星標爲 0,README 與源碼是主要信息來源。

結尾

它的價值不在檢測或抓取能力——那部分交給了 dsh-video-coursemap——而是把課程知識從 Markdown 到 Word、到會話、到項目記憶這件事的手工步驟接成了自動流程,並保證投遞不額外消耗 token。代價是強依賴上游的狀態文件格式與輸出目錄約定,裝之前值得先確認這兩者已經穩定。

目錄頁:https://www.skillhub.cn/plugins/sony6490/dsh-course-notes

倉庫:https://github.com/sony6490/dsh-course-notes

羽毛球分组比赛记分
小程序二维码

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

小夜