DeepSeek Harness(DSH)采用插件化架构。在处理非图像文件(如文本、PDF、压缩包或二进制数据)时,用户通常需要将文件存入会话工作区,以便后续处理或通过模型调用交付。本插件为 DSH Web 界面提供任意文件上传能力,将文件落盘至会话专属目录,并通过工具让模型将结果文件以可点击的下载卡片形式交付给用户。
核心功能¶
- 文件上传与落盘:在输入区左侧提供上传按钮(默认配置下,当 DSH 版本 ≥ 0.1.5 时,该按钮会自动让位给内置上传功能,避免功能重叠)。文件将落点于
<workspace>/uploads/<sessionId>/目录,上传区上方 Dock 会显示已上传文件列表。 - 模型感知与交付:上传成功后,插件会自动注入消息,明确告知 LLM 当前会话的上传目录路径及文件清单。模型可调用
share_session_file工具,将工作区内任意文件渲染为浏览器可下载的卡片。 - 新 UI 下载入口增强:针对 DSH 0.1.5+ 的新版 UI(交付文件卡片与右侧 Sidebar 文件浏览),插件提供了下载入口,解决了原版 UI 仅能预览无法下载的问题。
- 安全与权限:内置 sessionId 白名单与文件名净化机制,拒绝
..路径与越界访问。单文件大小上限默认为 512 MiB。 - 远程工作区支持:v0.5.0 版本起,插件支持 SSH 远程工作区,读写操作通过官方文件接缝(
ctx.fs+ctx.subprocess)进行,不再依赖本地文件系统假设。
安装与启用¶
前置条件:确保 DSH 已安装且目标 profile(默认 web)正在运行。
# 使用官方仓库脚本安装
bash install.sh
# 或手动执行官方命令
npm pack -y
dsh --profile web plugin add ./deepseek-ai-dsh-session-files-<ver>.tgz
安装完成后需重启 DSH 并刷新浏览器。
典型用法¶
- 验证安装:重启并刷新页面后,在输入区应能看到上传按钮(若未让位)。打开一个会话,点击按钮上传任意文件,输入区上方应出现文件芯片。
- 文件落盘核对:在命令行中检查文件是否存在于工作区。假设 DSH 地址为
<dsh-address>:
# 检查插件加载
curl -s http://<dsh-address>/plugins/@deepseek-ai/dsh-session-files/client.js | head -c 80
# 检查配置
curl -s http://<dsh-address>/dsh-session-files/config
# 列出文件
curl -s 'http://<dsh-address>/dsh-session-files/list?sessionId=<某会话id>'
在本地或远程工作区终端执行 `ls <workspace>/uploads/<sessionId>/` 验证文件存在。
- 模型交付:上传文件后,模型在对话中调用
share_session_file工具,即可在对话流中生成下载卡片。
适用场景与注意¶
- 权限与安全:插件以当前 DSH 进程的权限运行。请检查源码(MIT 许可证),确保符合你的安全策略。
- 版本差异:在 DSH 0.1.0-rc.x 版本上,插件行为与 0.1.5+ 版本存在差异(如内置上传工具不存在、UI 结构不同)。
- 已知问题修复:v0.4.1 修复了因函数作用域同名覆盖导致的页面底部出现空红框提示的问题。
结语¶
该插件解决了 DSH 在处理通用文件上传与交付时的短板,适合需要在会话中持久化文件或通过模型分发文件的智能体场景。更多细节与源码请访问 GitHub。