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