前言¶
DSH 的模型可以直接讀純文本文件,但日常碰到的文檔大多是 .docx、.xlsx、.pptx、.pdf 這類二進制容器。要讓模型分析季度報告、投標資料或電子書,開發者通常要先在外部跑一套轉換工具,把結果再喂回上下文;另一種做法是讓模型直接讀字符串,二進制容器裏的文字、表格和公式根本進不來。
下面介紹的 dsh-anydoc 試圖把這步收斂到一個插件裏:它基於 Firecrawl AnyDoc 的本地 Rust 解析引擎,把本地辦公文檔、電子書、CSV 與文本型 PDF 轉換爲 GitHub-Flavored Markdown,並註冊成 DSH 模型可直接調用的原生 Tool。插件由社區維護者 kevinasworks 開發,上游解析能力全部來自 Firecrawl AnyDoc 0.2.4,本項目只做 DSH 集成層,是獨立社區項目,不是 Firecrawl、DeepSeek 或任何機構的官方插件。
定位:它解決什麼問題¶
插件把 AnyDoc 的解析能力掛進 DSH 的工具註冊表,調用鏈路是:
用戶提問 → 模型調用 anydoc_convert → 插件本地解析 → Markdown 寫入文件 + 預覽返回 → 模型基於內容繼續分析
關鍵是全過程不聯網、不上傳文檔。AnyDoc 唯一的聯網路徑是顯式傳 ocr: 'hosted',本插件從不傳這個參數。掃描版 PDF 會返回 NEEDS_OCR 與頁碼,由用戶自行決定後續動作,插件不會自動上傳或啓用 hosted OCR。
三個原生工具¶
插件註冊三個 Tool,覆蓋單文件、批量與自檢三條路徑。
| 工具 | 作用 |
|---|---|
anydoc_convert |
單文件轉換。返回 success、detectedFormat、outputPath、markdownPreview、truncated、warnings、errorCode 等字段,完整 Markdown 寫入文件。 |
anydoc_batch_convert |
批量轉換。支持文件列表或單目錄(默認不遞歸)、併發上限、失敗隔離,返回成功/失敗/跳過統計。 |
anydoc_capabilities |
只讀健康檢查。返回插件與 AnyDoc 版本、原生綁定狀態、當前平臺及 platformSupport、當前引擎、支持格式、OCR 策略、資源限制;selfTest: true 時用內置微型 CSV 走完整鏈路,不讀取任何用戶文檔。 |
支持的格式¶
以 AnyDoc 0.2.4 官方支持表爲準,插件已逐項實測。
| 類別 | 擴展名 |
|---|---|
| Word | .doc .docx .docm |
| PowerPoint | .ppt .pps .pot .pptx .pptm .ppsx .ppsm |
| Excel | .xls .xlsx .xlsm .xlsb |
| OpenDocument | .odt .ods .odp |
| 其他 | .rtf .epub .csv .pdf(文本層) |
幾個容易踩的點:
- 格式由文件內容判定,擴展名只是提示。把
report.docx改名成report.bin仍能轉換,插件會給出「擴展名不在支持表內」的警告。 .csv沒有內容簽名,靠擴展名識別,因此formatSource會是extension而不是content。.pdf只覆蓋文本層,掃描版返回NEEDS_OCR。
安裝¶
插件以 DSH 官方 Bundle 方式安裝,不修改 DSH 核心源碼,也不手改 profile 文件。
推薦通過 npm 包名安裝:在 DSH 的「插件」→「添加插件」中輸入:
dsh-anydoc
如需固定版本,輸入 dsh-anydoc@0.2.1。npm 包地址見 dsh-anydoc。首次發佈後中國大陸鏡像可能尚未同步,可先切 npm 官方源。
也可以輸入 GitHub 完整地址安裝:
https://github.com/kevinasworks/dsh-anydoc
此方式獲取 GitHub 源碼,但不顯示 npm 安裝所具有的版本更新區塊。倉庫與 npm 包均不包含 node_modules/,安裝時需要能訪問所選源以拉取插件、AnyDoc 依賴及當前平臺的原生綁定;文檔轉換本身仍爲本地離線執行。
從本地目錄安裝時,先裝運行依賴:
cd /path/to/dsh-anydoc
npm install --omit=dev
隨後讓 Agent 調用 plugin_manager,target 換成插件目錄的實際絕對路徑:
{ "action": "install_bundle", "target": "/path/to/dsh-anydoc" }
Windows 用戶請使用實際的 Windows 絕對路徑,JSON 中反斜槓寫爲 \\。
安裝後用一次自檢確認:
anydoc_capabilities → {"selfTest": true}
應看到 native binding: ok、engine: worker、self test: passed。
典型用法¶
單文件轉換,指定預覽長度:
{ "sourcePath": "~/Documents/季度報告.docx", "previewChars": 12000 }
返回形如:
Converted /Users/me/Documents/季度報告.docx -> /Users/me/.dsh/anydoc-output/季度報告.md
format: docx (content) · 13,902 chars · 37,767 input bytes · 41 ms · engine: worker
--- markdown preview ---
# 季度技術評審報告 …
大文件只返回截斷預覽,預覽末尾說明已顯示 N/M 字符、完整內容見 outputPath,避免超長正文撐爆模型上下文。
批量轉換,默認不遞歸,這裏顯式打開:
{ "directory": "~/Documents/投標資料", "recursive": true, "concurrency": 2, "exportAssets": true }
帶圖片導出:
{ "sourcePath": "report.docx", "exportAssets": true }
圖片等內嵌資源寫到 <輸出目錄>/<文件名>.assets/,並在 Markdown 末尾追加 ## Exported assets 索引。插件只導出原始字節,不做圖像語義分析、不會僞造圖片描述。
默認值與限制¶
| 項 | 默認 | 說明 |
|---|---|---|
| 單文件大小 | 100 MiB | 超過直接拒絕,不進入解析引擎 |
| 單文件超時 | 60 s | worker 模式下真正殺掉進程,不是隻讓 Promise 超時 |
| 批量併發 | 2 | 可在調用時指定,上限 8 |
| 單批文件數 | 50 | 超出部分標註未處理,不會靜默截斷 |
| 內聯預覽 | 8000 字符 | 可調用時覆蓋 |
| 輸出總長 | 5,000,000 字符 | 超過則拒絕寫入並報 OUTPUT_TOO_LARGE |
| 資源導出上限 | 64 MiB | 超出部分跳過並告警 |
| 輸出目錄 | ~/.dsh/anydoc-output |
可用 outputDir 參數或 outputRoot 配置覆蓋 |
完整配置項見倉庫內 CONFIGURATION.md。
兼容性與平臺¶
插件的 engines.dsh 聲明並實測了三條 DSH 線:
>=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-rc.2 <0.2.2-0 || >=0.2.2-rc.1 <0.2.3-0
0.2.0-rc.2、0.2.1-rc.2 ~ rc.5、0.2.2-rc.1 ~ 0.2.2 均已實測;範圍外的 0.2.0-rc.1、0.2.1-alpha.*、0.2.3+、0.3.x 等會被 DSH 的准入檢查拒絕。@firecrawl/anydoc 仍精確鎖定 0.2.4,向下兼容針對的是 DSH 宿主,不放開解析引擎版本。
平臺支持範圍嚴格等於上游 AnyDoc 0.2.4 的 7 個預編譯目標:macOS arm64 / x64、Windows x64、Linux glibc x64/arm64、Linux musl x64/arm64。Windows on ARM 原生進程不支持,上游沒有 ARM64 綁定,自檢會報告 platformSupport: unsupported。README 給出的 CI 驗證邊界是 macOS Apple 芯片 107/107、Intel Mac 107/107、Windows Server runner 104 通過 0 失敗 3 項既有跳過、兩種架構的 Ubuntu 與 Alpine 各 107/107;CI 運行驗證不替代完整 DSH 桌面界面驗收,Intel Mac 的 x64 Electron 宿主、Windows 10/11 的交互與文件佔用、SMB 場景仍需單獨驗證。
隱私與數據流¶
本地文件 → 插件(進程內或子進程)→ @firecrawl/anydoc → Rust 解析 → Markdown → 本地文件
插件不自動上傳文件、不調用 Firecrawl Parse、不發送遙測;日誌只記錄源路徑、格式、字符數、耗時、輸出路徑,不寫文檔內容。npm install 拉取依賴屬於公網流量,與文檔內容傳輸無關。倉庫的 TEST_REPORT.md 給出的證據是靜態掃描加上在禁用 fetch 的進程內/子進程內完成轉換。
適用場景與注意¶
適合需要在 DSH 裏把本地辦公文檔、電子書、CSV 轉成 Markdown 後再讓模型分析的場景,尤其是對文檔內容有本地處理要求、不希望內容離開本機的開發者。macOS(Apple 芯片)是作者日常使用並做過真實 DSH Tool Call 驗證的主要平臺,其餘受支持目標主要靠 CI 覆蓋。
幾點需要留意的:插件以當前 DSH 進程權限運行,可以直接讀用戶有權訪問的文件路徑,安裝前建議先檢查源碼與許可證(自身 MIT,AnyDoc 爲 MIT,版權 Sideguide Technologies Inc.)。它是獨立社區項目,不代表 Firecrawl 或 DeepSeek 官方立場。停用可用:
{ "action": "set_bundle", "target": "dsh-anydoc", "enabled": false }
卸載用 remove_bundle,會從 profile 的 package.json 移除依賴與 bundle 選擇,不影響其他插件。插件不會刪除用戶輸出文檔,~/.dsh/anydoc-output 需自行清理。安裝前的 profile 快照保存在 .backup/pre-install-<時間戳>/,異常時可對照恢復。
結尾¶
dsh-anydoc 做的事情比較集中:把 AnyDoc 的離線解析能力封裝成 DSH 原生 Tool,讓模型用一次調用就能拿到 Markdown 正文,同時用進程隔離、超時、大小上限和格式探測把集成的邊界守住。如果你在做 DSH 文檔處理方向的插件選型,可以從這裏入手。
- 社區目錄頁:https://www.skillhub.cn/plugins/kevinasworks/dsh-anydoc
- GitHub:https://github.com/kevinasworks/dsh-anydoc