前言¶
在 DeepSeek Harness(DSH)裏做多輪對話、附帶多張截圖或附件時,請求體裏會反覆帶上歷史裏的圖片。Anthropic Messages API 對「普通請求」允許單邊最長約 8000 px,但一旦同一次請求裏攜帶多張圖片,單邊上限會變成 2000 px。DSH 自帶的圖片門禁主要是面積預算:入庫階段(dsh-attachment-local)和請求投影(requestImageDimensions)默認都按約 419 萬 px² 控制,長邊可以到 8192 px。整頁截圖因此可能以例如 828×5059 的形式存進附件庫——面積合規、長邊卻遠超多圖請求的 per-side 規則。短對話裏可能一直正常,會話變長、同一次請求裏圖片變多時才觸發 400,且歷史裏字節已固定,重試也會反覆失敗。
下面介紹社區插件 dsh-request-image-cap(維護者 lucagiftzek,分類:模型推理)。它在發往模型前對每張圖做 per-side 像素上限,把「多圖 Anthropic 拒收」這類 latent 錯誤擋在請求側。
這是什麼¶
dsh-request-image-cap 是 DSH 的 Cordis 插件(npm 包名 @lucagiftzek/dsh-request-image-cap,當前 README 對應版本 0.1.0,許可證 MIT)。一句話:在 LLM 適配器 materialise 請求圖片的唯一接縫 ctx.attachments.readImageRequest(ref, policy, signal) 外包一層,把配置的 per-side 上限換算成面積預算,再交給現有的 requestImageDimensions 縮放邏輯,使長邊落在 cap 以內且保持寬高比。
上游 README 說明:根治應在 requestImageDimensions 增加路由級的 maxDimension;本插件是本地權宜方案。
核心功能¶
與 DSH 內置門禁的差異¶
| 階段 | 控制方式 | 默認(README 表格) |
|---|---|---|
入庫 dsh-attachment-local |
面積 / 維度 | normalizedImageMaxPixels 4 194 304 px²,normalizedImageMaxDimension 8192 px |
請求投影 requestImageDimensions |
面積 | llm-pi-ai.requestImagePixelBudget 4 194 304 px² |
本插件不改變磁盤上已存儲的附件字節,只在請求時刻縮小發給模型的副本。
行爲要點(資料原文)¶
- retroactive:歷史裏已有 oversized 圖片,安裝啓用後再次發送時可被 clamp,會話可繼續。
- non-destructive:存儲不變,僅模型側副本變小。
- never widens:若路由策略本來更嚴,插件不會把它放寬。
- fails safe:若 DSH 核心升級改名了接縫,插件打 warning 並保持 inactive,不在啓動時拋錯。
- 換算公式:
maxPixels' = floor(w * h * (cap / max(w, h))^2),與requestImageDimensions的sqrt(maxPixels/(w*h))縮放一致。
README 給出的實測示例(真實 attachment store 中的對象):828×5059(388 KB)→ 327×1998(79 KB)。
Anthropic 側對超過約 1.15 MP 的圖片本就會在服務端縮放;插件在客戶端先 clamp,主要是爲了滿足多圖請求的 per-side 規則,避免 400。
典型錯誤症狀¶
多圖請求失敗時,Messages API 可能返回類似:
400 invalid_request_error
messages.10.content.5.image.source.base64.data: At least one of the image
dimensions exceed max allowed size for many-image requests: 2000 pixels
安裝與啓用¶
插件以 web profile 安裝,安裝後需重啓 dsh web。包聲明瞭 dsh.bundle,會進入 dsh.profile.bundles 並由自帶 patch 插入配置;也可在 profile 的 cordis.patch.yml 裏用 - id: request-image-cap 只覆蓋 config(不要重複 insert)。
環境要求(README / package.json):Node ≥ 22.18.0;作者在 README 中寫明在 DSH 0.1.5 與 0.2.1 上使用(接縫爲 ctx.attachments.readImageRequest)。peer 依賴 @deepseek-ai/cordis ^4.0.2。
安裝命令須與 README 一致:
dsh plugin --profile web add @lucagiftzek/dsh-request-image-cap
# or from GitHub: dsh plugin --profile web add github:lucagiftzek/dsh-request-image-cap
# then restart dsh web
本地開發目錄也可用 link 方式(README):
dsh plugin --profile web add link:/absolute/path/to/dsh-request-image-cap
重啓後日志中應出現類似:request-image-cap: active, 2000px per side。
配置¶
默認 per-side 上限爲 2000 px,與 Anthropic 多圖規則對齊。可在 patch 中調整:
- id: request-image-cap
config:
enabled: true
maxDimension: 2000 # 64..8192
verbose: false # log every clamp
verbose: true 時會對每次 clamp 打日誌,便於覈對是否命中歷史大圖。
典型用法¶
- 按上文命令安裝並重啓
dsh web。 - 保持默認
maxDimension: 2000即可覆蓋 README 描述的多圖 Anthropic 場景;若仍失敗,先確認插件日誌爲 active,再查 troubleshooting 文檔。 - 開發插件本身時,在倉庫根目錄執行
npm test(node --test test/*.test.js)。測試會調用本機已安裝 DSH 的真實requestImageDimensions;若 DSH 不在默認全局前綴,需設置DSH_GLOBAL_PREFIX。
排障時 README 建議:將 skills/image-cap-doctor 複製到 ~/.dsh/skills/ 後讓 agent 加載 image-cap-doctor skill;另有 docs/TROUBLESHOOTING.md、docs/ERRORS.md。
適用場景與注意¶
適合誰:在 DSH web 里長期掛多張截圖、設計稿或整頁 capture,並走 Anthropic(或同樣受 per-side 多圖限制的路由)的開發者。
權限與安全:插件與當前 dsh 進程同權限運行,會參與請求路徑上的圖片讀取與變換。安裝前應在 GitHub 閱讀源碼與 MIT 許可證,自行判斷是否納入環境。社區插件目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態遵循「一切皆插件」,本倉庫星標爲 0(目錄頁線索),不代表功能不可用,僅作公開指標。
侷限:只解決「請求投影時 per-side 超限」;若問題出在入庫或其它網關,需結合 dsh-attachment-local 與路由配置排查。核心若將來內置 maxDimension,本插件的角色可能被上游替代。
鏈接¶
- 社區目錄:https://www.skillhub.cn/plugins/lucagiftzek/dsh-request-image-cap
- 源碼與完整說明:https://github.com/lucagiftzek/dsh-request-image-cap
經過上面的步驟,你可以在不大改附件庫的前提下,讓含多張歷史大圖的長會話重新滿足 Anthropic 多圖 per-side 限制,避免 latent 的 400 與 endless retry。