前言¶
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 網關對請求體大小的硬性限制問題。對於需要處理大量圖片的長對話場景,這是一個可靠的中間件解決方案。