前言¶
在 DeepSeek Harness(DSH)裏做智能體開發,常見需求是把本地文件交給模型處理:日誌、截圖、配置、數據樣本。Web 端原生輸入框主要面向文本,若只靠複製粘貼或手動把路徑寫進提示詞,多文件、二進制、大圖都不順手,模型也未必能按預期讀到宿主機上的文件。
下面介紹社區插件 dsh-web-file-uploader(維護者 Mooling0602)。它在 DSH Web 對話輸入框工具行加入 DeepSeek 網頁版風格的回形針按鈕,把所選文件上傳到 DSH 宿主機,並按當前模型能力決定注入方式:多模態模型走原生圖片塊,純文本模型注入可讀路徑。插件當前版本爲 0.3.0,許可證 MIT,在 GitHub 上約 11 stars,分類爲客戶端插件。
這是什麼¶
dsh-web-file-uploader 是面向 DeepSeek Harness Web UI 的文件上傳插件。一句話定位:在 composer 輸入區增加附件入口,將文件持久化到 DSH 宿主機,並在發送消息時按模型能力把文件交給運行中的模型使用。
與「只在瀏覽器內存裏暫存附件」不同,該插件把文件寫到宿主機磁盤(動態模式爲會話工作區 uploads/,靜態 bundle 爲 $DSH_HOME/uploads,默認 ~/.dsh/uploads),並維護去重索引,避免重複上傳佔滿存儲。
核心功能¶
輸入區附件 UI¶
插件在輸入框工具行左側增加回形針按鈕,支持多選。每個文件在輸入框上方以附件卡片展示(圖片顯示縮略圖),狀態依次爲讀取中、上傳中、已保存,並提供複製路徑與移除操作。UI 文案通過應用 locale 服務本地化,支持中文與英文,跟隨 DSH Web 語言設置或系統默認。
模型感知注入¶
上傳文件以附件卡片爲注入依據:卡片存在時,該文件的絕對路徑會注入到此後發送的每一條用戶消息;關閉卡片(×)調用 Host remove RPC,停止注入但保留磁盤文件;刪除卡片(🗑)調用 delete RPC,從宿主機永久刪除並清理去重索引。
注入行爲按模型 inputModalities 區分(通過 llm.resolveModelInfo().inputModalities 檢測,緩存 10 分鐘):
| 模型類型 | 圖片(png/jpeg/webp/gif) | 其他文件 |
|---|---|---|
多模態(含 image) |
經 attachments 服務注入原生 ImageBlock,不加額外文字提示 |
路徑文本塊 |
| 純文本(如 DeepSeek V4 系列) | 路徑文本塊,模型可自行調用讀取或識圖工具 | 路徑文本塊 |
純文本模型收到的注入塊格式如下(英文,供模型閱讀):
-----
[Attached files] Some files have uploaded with this message:
- /path/to/file1.txt
- /path/to/image1.png
Read the files or use tools to analyse (like vision tools), then answer the user.
插件只注入絕對路徑,不耦合 vision-tools 等輔助插件;注入僅針對真實用戶消息(source.kind === 'user'),不修改 steering 或系統消息。Ctrl+V 粘貼圖片走產品原生草稿管道,插件不干預。
內容尋址防重傳¶
上傳時計算文件字節的 SHA-256,索引持久化在 uploads/.dfu-index.json(hash → { path, at })。相同內容再次上傳會複用已有副本,響應帶 dedup: true;同名但內容不同則按 -1、-2 規則處理文件名衝突。上傳經 Promise 隊列串行化,避免併發競態。
清理與保留¶
默認 TTL 爲 7 天。超過 TTL 且不在任何活躍會話 pending 引用中的文件會被懶回收刪除。可在 設置 → 文件上傳 配置保留期(settings 命名空間 dsh-web-file-uploader 的 { ttl } 字段);環境變量 DSH_UPLOAD_TTL(如 DSH_UPLOAD_TTL=30m)作爲兜底。設爲 0 或空值可禁用自動 GC,僅通過 🗑 手動刪除。
大小與安全限制¶
單文件上限約 48 MiB(動態模式 RPC 載荷 64 MiB base64 上限,解碼後約 48 MiB)。文件名會清洗路徑分隔符、.. 與控制字符。
安裝與啓用¶
DSH 生態遵循「一切皆插件」。社區目錄 SkillHub 提供插件索引,與 DeepSeek / 幻方無官方從屬關係。
靜態 bundle(持久化,推薦)¶
包聲明瞭 dsh.bundle.patch,通過 dsh plugin --profile web add 安裝到 web profile:
dsh plugin --profile web add github:Mooling0602/dsh-web-file-uploader
安裝後重啓 dsh web 進程並刷新頁面。更新可執行:
dsh plugin --profile web update dsh-web-file-uploader
動態插件(當前會話,免安裝)¶
適合快速試用,重啓後需重新定義:
cordis_define + cordis_run # host = src/host.js,client = src/client.js
批准 Run 卡片後回形針按鈕即出現。
典型用法¶
1、安裝並重啓 DSH Web,打開對話頁面。
2、點擊輸入框工具行左側回形針,選擇一個或多個本地文件。卡片顯示上傳進度,完成後可點擊「複製路徑」。
3、輸入問題併發送。多模態模型下圖片以原生附件進入請求;純文本模型會在消息中收到文件絕對路徑,可結合 read、vision 等工具分析。
4、若不再需要向後續消息注入路徑,點擊卡片 × 關閉(文件仍保留在 uploads 目錄)。確認永久刪除時點擊 🗑。
5、需要調整自動清理週期時,打開 設置 → 文件上傳,修改 TTL,例如 30m、7d;或在啓動前設置環境變量:
DSH_UPLOAD_TTL=30m
適用場景與注意¶
適合誰: 經常在 DSH Web 裏讓模型讀日誌、看截圖、分析配置或數據文件的開發者;已安裝 vision-tools 等讀文件插件、希望路徑注入與工具鏈解耦的用戶。
運行權限: 插件以當前 dsh 進程權限運行,文件寫入宿主機磁盤。安裝前應閱讀 GitHub 源碼 與 MIT 許可證,確認上傳目錄與保留策略符合你的安全要求。
其他注意: 動態模式文件保存在會話工作區 uploads/;靜態 bundle 寫在 $DSH_HOME/uploads。單文件約 48 MiB 上限,超大文件需在卡片上查看錯誤提示。Node 引擎要求 >=20。
鏈接¶
- 社區目錄:skillhub.cn/plugins/Mooling0602/dsh-web-file-uploader
- 源碼與文檔:github.com/Mooling0602/dsh-web-file-uploader
經過上面的步驟,DSH Web 輸入框即可像 DeepSeek 網頁版一樣掛附件,文件落在宿主機、按模型能力注入,並帶去重與 TTL 清理,適合日常對話式文件分析工作流。