DeepSeek Harness (DSH) 在处理超长工具输出时,会将内容溢出(Spill)到外部存储,而不是直接塞进模型上下文。默认的 dsh-spill-local 只能写入本地磁盘。dsh-spill-s3 是一个插件,它实现了 ctx.spillStore 接口,将溢出的数据写入 S3 兼容的对象存储(如 AWS S3、MinIO、Cloudflare R2),替代本地磁盘存储。
插件定位¶
- 名称:
dsh-spill-s3 - 维护者:
tancheng33 - 分类: 联网工具
- 核心价值: 将溢出的工具输出从本地磁盘转移至对象存储,解决容器化部署或分布式环境下的数据持久化问题。
核心功能¶
- 实现 S3 兼容的溢出后端。
- 将过大的工具输出溢出到对象存储。
- 支持 AWS S3、MinIO、Cloudflare R2 或任何 S3 兼容服务器。
- 实现
ctx.spillStore接口。 - 安装时自动禁用
spill-local。 - 不依赖 AWS SDK,使用
node:crypto进行签名。
安装与启用¶
安装该插件需要使用 DSH 的插件管理命令。安装包包含 cordis.patch.yml 配置文件,该文件会自动禁用默认的 spill-local 后端,因为 ctx.spillStore 在每个上下文中只接受一个实现。
dsh plugin --profile <name> add dsh-spill-s3
典型用法¶
安装后,需要在配置文件中指定存储桶和端点。注意 bucket 字段在配置中是空的,必须由你手动填写,因为插件不会自动创建桶。
在 cordis.patch.yml 中添加如下配置:
- id: spill-s3
config:
endpoint: https://s3.us-east-1.amazonaws.com
region: us-east-1
bucket: my-agent-spill
prefix: dsh-spill
forcePathStyle: false # AWS 虚拟主机风格
accessKeyIdRef: AWS_ACCESS_KEY_ID
secretAccessKeyRef: AWS_SECRET_ACCESS_KEY
sessionTokenRef: AWS_SESSION_TOKEN
serverSideEncryption: AES256
retrieval: cli
presignExpiresSeconds: 3600
timeoutMs: 30000
MinIO / R2 / 自托管示例¶
如果使用 MinIO 或自建服务,通常需要设置 forcePathStyle: true。
- id: spill-s3
config:
endpoint: http://127.0.0.1:9000
region: us-east-1 # 任意值,仅用于签名范围
bucket: agent-spill
forcePathStyle: true # 必填
serverSideEncryption: '' # 某些服务器会拒绝此头
# ... rest of config
适用场景与注意事项¶
- 适用场景: 适用于无头/容器化运行环境、需要长期保存溢出数据、或需要团队成员共享溢出结果的场景。
- 前置条件: 存储桶必须已存在,插件不会创建它。
- 凭证机制:
accessKeyIdRef等字段是引用名称而非明文值,值会在每次上传时通过ctx.credentials解析。建议配合凭证中心使用。 - 检索模式: 支持三种模式:
cli(默认): 模型执行aws s3 cp。presigned: 模型获取带有有效期的预签名 URL(需注意这是带有生命周期的凭证)。locator-only: 仅告知位置,由用户手动读取。
- 安全与性能: 使用
node:crypto签名,无 AWS SDK 依赖。Session ID 会被哈希处理以保护隐私。
总结¶
该插件通过替换存储后端,让 DSH 的溢出机制适应云端和容器化环境,而不改变溢出策略。
- GitHub: https://github.com/tancheng33/dsh-spill-s3
- 目录: https://www.skillhub.cn/plugins/tancheng33/dsh-spill-s3