dsh-request-image-cap:按邊長限制發往模型的圖片像素

前言

在 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²

本插件不改變磁盤上已存儲的附件字節,只在請求時刻縮小發給模型的副本。

行爲要點(資料原文)

  1. retroactive:歷史裏已有 oversized 圖片,安裝啓用後再次發送時可被 clamp,會話可繼續。
  2. non-destructive:存儲不變,僅模型側副本變小。
  3. never widens:若路由策略本來更嚴,插件不會把它放寬。
  4. fails safe:若 DSH 核心升級改名了接縫,插件打 warning 並保持 inactive,不在啓動時拋錯。
  5. 換算公式: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 打日誌,便於覈對是否命中歷史大圖。

典型用法

  1. 按上文命令安裝並重啓 dsh web。
  2. 保持默認 maxDimension: 2000 即可覆蓋 README 描述的多圖 Anthropic 場景;若仍失敗,先確認插件日誌爲 active,再查 troubleshooting 文檔。
  3. 開發插件本身時,在倉庫根目錄執行 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,本插件的角色可能被上游替代。

鏈接

經過上面的步驟,你可以在不大改附件庫的前提下,讓含多張歷史大圖的長會話重新滿足 Anthropic 多圖 per-side 限制,避免 latent 的 400 與 endless retry。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜