dsh-llm-error-classify:讓網關報錯原樣顯示,不再被 UI 統一成「API 密鑰無效」

前言

在 DeepSeek Harness(DSH)裏接第三方 LLM 網關時,失敗原因往往藏在提供方返回的原文裏:渠道不可用、餘額耗盡、令牌無權訪問某模型,和真正的密鑰錯誤,在網關側可能是不同的 HTTP 狀態與文案。若 UI 一律展示同一句「API 密鑰無效」,排查會走偏——例如網關明明在說「當前分組下沒有可用渠道」,界面卻提示換密鑰。

下面介紹社區插件 dsh-llm-error-classify(維護者 lxl8182,SkillHub 分類 admin-security)。它在 llm/stream 鏈路上改寫終態失敗分類,使非純認證類 401/403 的提供方原文能進入界面,同時按形狀清洗可能回顯的憑證片段。

這是什麼

dsh-llm-error-classify 是 DSH Web 側的錯誤分類修正插件:把 pi-ai 適配器因文本規則過早判成 AUTH 的提供方失敗,改寫爲 PROVIDER_ERROR,並保留(經清洗後的)原始報錯文本。

宿主裏 AUTH 是 UI 唯一會清空正文、並替換爲固定「API 密鑰無效」文案的 code;PROVIDER_ERROR 不在該特判集合內,界面會直接顯示 message 內容。插件不修改重試策略,也不改動非 AUTH 的分類。

問題從哪來

pi-ai 適配器在 classifyPiAiError 中有一條優先規則:消息文本里出現 401 或 403 即返回 AUTH,且排在更具體的配額、渠道等判斷之前。因此多種網關失敗在到達 UI 前都被標成同一 code。

UI 側對 AUTH 的處理包括:在 event projection 中清空展示用正文,在聊天與軌跡組件中用 failure.auth 文案覆蓋。結果是網關原文在界面上不可見。

核心功能

插件通過 cordis.patch.yml 掛到 llm/stream waterfall,包裹適配器 chunk 迭代器,在 agent loop 落盤前攔截終態 finish chunk。

規則只有一條:終態失敗若 code === 'AUTH',改爲 PROVIDER_ERROR,並保留原始文本(經憑證清洗)。

PROVIDER_ERROR 刻意避開 UI 特判集合與默認可重試集合(後者僅含 EMPTY_RESPONSE、RATE_LIMIT、SERVER、TIMEOUT、TRANSPORT),因此展示與原先 AUTH 的重試行爲保持一致,不會因改寫而多觸發重試。

放行原文前,插件按形狀替換可能泄漏憑證的子串爲 [redacted],例如常見廠商前綴密鑰(sk-…、sk-proj-…、ghp_… 等)以及消息中的 Bearer <token>。這是形狀匹配,不是讀取真實密鑰;無廠商前綴特徵的裸密鑰無法識別,README 中已說明爲已知限制。

安裝與啓用

插件爲零依賴純 JavaScript,無 prepare 腳本,安裝後無需單獨 npm install。package.json 要求 Node >=22。

從 GitHub 安裝:

dsh plugin --profile web add github:lxl8182/dsh-llm-error-classify

或從本地目錄安裝:

dsh plugin --profile web add /path/to/dsh-llm-error-classify

安裝完成後重啓 dsh web。

卸載:

dsh plugin --profile web remove dsh-llm-error-classify

若通過 github: 安裝,升級可用:

dsh plugin --profile web update dsh-llm-error-classify

升級後同樣需要重啓 dsh web。

驗證方式

倉庫提供邏輯層與端到端探針(需在含完整倉庫文件的副本中運行;dsh plugin add 裝進 profile 的副本僅含 index.js、cordis.patch.yml、README.md)。

邏輯層:

node test.mjs

覆蓋正向(多種 403/401 網關場景均 AUTH → PROVIDER_ERROR)、反向(其它 code 不變)、文本保留、憑證清洗與非 finish chunk 行爲等。

經真實 waterfall 的端到端:

DSH_REPO=/path/to/dsh-checkout node probe-e2e.mjs

DSH_REPO 指向 DSH 源碼檢出目錄,默認可爲當前目錄。

適用場景與注意

適合誰: 使用 DSH Web、經 pi-ai 接第三方網關,且經常遇到 401/403 被統一顯示爲「API 密鑰無效」、需要看到提供方原文以便區分渠道、配額、權限與密鑰問題的開發者或運維。

安全與信任: 插件以當前 dsh 進程權限運行,會改變失敗信息進入 UI 狀態的方式(在清洗後展示原文)。安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認符合你的安全策略。若網關會在報錯中回顯無常見前綴形態的裸密鑰,不要依賴本插件的清洗能力。

生態說明: DSH 社區插件目錄在 SkillHub 等獨立站點維護,與 DeepSeek / 幻方無官方從屬關係;安裝命令以 README 爲準。

版本與限制: 當前資料中 package 版本爲 0.2.0。插件僅做 AUTH → PROVIDER_ERROR 與憑證形狀清洗;宿主若調整 UI 特判或重試集合,可能需要同步調整插件所選 code。根因在宿主分類與 UI 策略,README 給出了上游三處修改建議,上游修好後可卸載本插件。

結尾

dsh-llm-error-classify 用最小改動把誤標爲 AUTH 的提供方失敗改寫成 PROVIDER_ERROR,讓網關原文在界面上可見,減少「密鑰無效」誤導帶來的無效換鑰。目錄與詳情見 SkillHub 插件頁,源碼與安裝說明見 GitHub:lxl8182/dsh-llm-error-classify。

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

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

小夜