前言¶
在 DeepSeek Harness Web 里,图片附件有原生流程,文档则没有现成入口。想让模型看一份 PDF 报告或一个 XLSX 表格,常见做法是把文本复制出来粘进输入框:长文档容易被截断,表格结构和排版也会丢失;自己搭一套上传解析管线,又要处理存储、格式支持和上下文占用等问题。
DSH 的理念是「一切皆插件」,文件输入这件事同样可以交给插件。下面介绍的 dsh-file-resource 做的就是这件事:在输入框原有 + 菜单顶部增加 attach 入口,文档在本机解析为会话隔离的私有资源,模型通过一个受限读取工具按需读取。
这是什么¶
dsh-file-resource 是 DeepSeek Harness Web 的本地文件输入插件,由 liznee 维护,许可证为 MIT。仓库 package.json 中的版本号为 0.4.9,更新日志最新条目为 v0.4.9(2026-08-29)。
它解决的问题可以概括为三件事:
1、给 Web 输入框一个统一入口,图片、文档、文本和常见代码文件都能选;
2、文档在本机解析为会话隔离的私有资源,模型只在需要时通过受限工具读取;
3、每次读取的字符数有默认值和硬上限,上下文占用可控。
核心功能¶
attach 入口与文件选择¶
插件不再单独增加一个按钮,而是在输入框原有 + 菜单顶部增加 attach。一个文件选择器同时接收图片、文档、文本和常见代码文件,可多选;也支持全局拖拽(把文件拖到窗口任意位置)和在输入框 Ctrl+V 粘贴文件。
文档以卡片形式显示在圆角输入框内部,显示真实上传进度与本地解析状态;卡片右侧的灰色圆形 × 可取消上传或移除文件。
图片与文档分开处理¶
图片仍由 Harness 原生的预览、删除、持久化和多模态模型流程处理,插件不接管这条链路。文档解析则完全在本机完成,上传或解析本身不调用模型、无遥测。
@文件名 引用与分栏预览¶
发送消息(包括只传文件、不输入文字)时,插件自动在消息末尾附上 @文件名 引用:聊天记录里能直接看出这条消息带了哪些文件,模型按文件名对应到资源 ID 再读取。
点击聊天中的蓝色 @文件名,右侧以分栏方式预览文件内容,Excel/CSV 显示带格线的表格,× 或 Esc 关闭。发送过的文件即使已从输入框移除附件卡,本会话内仍可预览。
受限读取工具 read_uploaded_resource¶
插件固定增加一个读取工具 read_uploaded_resource。模型不是一次性拿到文档全文,而是在需要时调用这个工具;默认每次最多返回 8,000 字符,硬上限 24,000 字符。
支持格式与限制¶
| 类别 | 格式 |
|---|---|
| 文档 | PDF、DOCX、XLSX、PPTX、ODT、ODS、ODP、RTF、EPUB |
| 文本与代码 | 常见文本与代码文件 |
使用前注意两条限制:
- 旧二进制
DOC、XLS、PPT不支持,需先另存为DOCX、XLSX、PPTX。 - PDF 只读取文字层,纯扫描件不会自动 OCR。
本地存储与缓存¶
容量与缓存规则:
- 单文件上限 50 MiB;单次选择上限 20 个文件、合计 200 MiB。
- 总缓存上限 1 GiB,按内容 SHA-256 去重;达到上限按 LRU 只清理已发送的旧资源。
- 已解除引用的对象保留最多 7 天。
默认缓存路径:
$DSH_HOME/resources/dsh-file-resource/v1
未设置 DSH_HOME 时为:
~/.dsh/resources/dsh-file-resource/v1
安全与隐私¶
- 浏览器接口要求同源请求与插件专用请求头。
- 扩展名、声明类型、文件魔数交叉验证,拒绝伪装文件。
- ZIP/Office 文件做防解压炸弹处理。
- PDF.js 固定为已修复版本,并关闭脚本与动态求值。
- 插件不包含统计、遥测或第三方上传;只有用户发送消息后,模型提供方才按正常 Harness 流程收到内容。
安装与启用¶
环境要求与当前 DeepSeek Harness 一致:Node.js 22.19+ 或 24+;README 标注 v0.1.1 已在 DeepSeek Harness 0.1.1-rc.1 上验证。
从 npm 安装:
dsh plugin --profile web add dsh-file-resource
也可以直接安装对应的 GitHub Release:
dsh plugin --profile web add github:liznee/dsh-file-resource#v0.4.9
安装完成后先验证配置是否写入,再重启服务:
dsh --profile web --dump-config
输出中应出现 # == dsh-file-resource。随后重启 dsh web,从输入框左下角的 + 选择 attach。
不再使用时卸载:
dsh plugin --profile web remove dsh-file-resource
本地开发与验证¶
如果修改了源码,可在本地构建并安装:
npm install
npm run build
dsh plugin --profile web add C:\absolute\path\to\dsh-file-resource
仓库自带测试,改动后建议完整跑一遍:
npm test
npm run test:coverage
npm audit --omit=dev
npm run pack:check
典型用法¶
经过上面的步骤,插件已启用。一次完整的使用流程如下:
1、点击输入框左下角的 +,选择顶部的 attach,一次选择多个文件;也可以把文件拖到窗口任意位置,或在输入框按 Ctrl+V 粘贴。
2、等附件卡片上的上传进度与解析状态完成;期间可用卡片右侧的 × 取消上传或移除文件。
3、正常发送消息,也可以只传文件不写字;消息末尾会自动附上 @文件名。
4、点击聊天中的蓝色 @文件名,在右侧分栏查看内容;不需要时按 × 或 Esc 关闭。
适用场景与注意¶
适合的场景:经常需要把 PDF、DOCX、XLSX 等文档交给模型,又不想手动复制粘贴文本;希望文档解析留在本机、附件链路上没有遥测。
使用前注意:
- 插件以当前 dsh 进程的权限运行,安装前建议自行检查源码与许可证(MIT)。
- 旧格式文件先转换,扫描版 PDF 不会自动识别文字。
- 发现安全问题请按仓库 SECURITY.md 私下报告,不要在公开 Issue 中披露细节。
小结¶
dsh-file-resource 做的事情不复杂:把本地文档变成会话内可引用、可预览、模型可按需读取的资源,并把解析过程留在本机。如果你在用 DeepSeek Harness Web 处理文档,值得一试。
- GitHub 仓库:https://github.com/liznee/dsh-file-resource
- 社区目录页:https://www.skillhub.cn/plugins/liznee/dsh-file-resource (社区目录为独立站点,与 DeepSeek、幻方无官方从属关系)