前言¶
DeepSeek Harness (DSH) 采用了插件化架构,允许在模型推理前注入中间件逻辑。Charm Hyper 的 HTTP 网关(Google Frontend 后端)对请求体有严格的 10 MiB 限制。当对话历史累积的图片超过这个上限时,网关会拒绝请求并返回 400 invalid request body 错误,导致推理任务在执行前就失败。dsh-hyper-tools 插件正是为了解决这一场景而设计。
插件概览¶
该插件由 samuelrubiodev 维护,开源协议为 MIT。它通过拦截特定路由的请求,在发送到网关前动态调整图片载荷,确保请求体大小不超过限制。
工作原理¶
插件通过注册 llm/stream 中间件实现功能,主要包含两个步骤:
-
预处理与替换
在请求分发前,插件会根据maxRequestImageBytes预算投影持久化历史。如果图片载荷超标,最旧的图片会被替换为 DSH 标准的占位符文本([image omitted to fit request image limits; …]),而最新的图片会被保留。如果请求体原本就符合要求,则直接通过next()分发,不做额外处理。 -
失败重试
如果网关依然拒绝请求(通常是因为预算估算低估了非图片的元数据开销),插件会捕获这个错误并重试一次。重试时,图片预算会乘以recoveryBudgetFactor(默认 0.5),进一步替换更旧的图片。如果已无可替换内容,则原样返回原始错误。
安装¶
使用以下命令安装插件:
dsh plugin --profile <profile> add dsh-hyper-tools
配置¶
该插件支持灵活的配置,所有字段均为可选。以下是核心配置项:
| 配置项 | 默认值 | 说明 |
|---|---|---|
providers |
['charm-hyper', 'hyper'] |
受影响的 Provider 路由列表(不区分大小写)。 |
maxRequestImageBytes |
6291456 (6 MiB) |
单次请求允许的最大图片载荷(Base64 字节数)。 |
recovery |
true |
当网关拒绝请求时,是否触发一次重试。 |
recoveryBudgetFactor |
0.5 |
重试时的图片预算乘数。 |
byteQuantum |
1 |
字节溢出时的移除步长。 |
countQuantum |
1 |
数量溢出时的移除步长。 |
配置示例:
- id: hyper-tools
name: 'dsh-hyper-tools'
config:
providers: ['charm-hyper']
maxRequestImageBytes: 6291456
注意事项¶
- 预算计算范围:
maxRequestImageBytes仅计算图片的 Base64 载荷。文本内容、工具模式定义以及 JSON 结构体不计入此限制。 - 仅处理指定路由:插件仅对
providers列表中的路由生效,其他 Provider 的请求不受影响。 - 兼容性:需要
@deepseek-ai/dsh-llm ^0.1.5-rc.1。
总结¶
dsh-hyper-tools 通过智能替换旧图片和失败重试机制,解决了 Charm Hyper 网关对请求体大小的硬性限制问题。对于需要处理大量图片的长对话场景,这是一个可靠的中间件解决方案。