DSH Perplexity Guard:修正 Perplexity API 請求與 provider 設置的 DSH 插件

前言

在 DSH(DeepSeek Harness)裏走 Perplexity API 的路線,常見的問題不是模型本身不可用,而是請求格式對不上:Anthropic 系模型(Claude Opus 5.5、Claude Sonnet 5.5)要求帶 output cap,DSH 的工具名可能和 Perplexity 內建工具撞名,工具 schema 少了 properties 或 description 也會被拒。GPT-6.1 Sol 又對 stop、temperature、reasoningEffort 的取值範圍更敏感。這些錯誤都是 HTTP 400,從 DSH 側看只是請求失敗,不好定位。

下面介紹 Kinfxhk 維護的社區插件 DSH Perplexity Guard。它在請求發往 Perplexity provider 前做修正,並提供一鍵修復 provider 設置的入口。插件包名是 @local/perplexity-guard,倉庫名 dsh-perplexity-api-fix-plugin 是歷史原因。

這個插件是什麼

一個 DSH Host + Web 插件,當前版本 1.0.3,MIT 許可證,不屬於 Perplexity、Anthropic、OpenAI 或 DeepSeek 官方。

它面向一個具體場景:DSH 通過 Perplexity 的 API 使用 Claude Opus 5.5、Claude Sonnet 5.5 和 GPT-6.1 Sol 時,請求經常因格式問題失敗。插件在每次發往 perplexity provider(可在配置裏改)的請求上做補正,並把導致失敗的 provider 設置修好。

要求:

  1. DSH 版本 >= 0.2.1-rc.5。
  2. 配置好 llm-pi-ai provider,provider id 爲 perplexity(或在插件配置裏改 providerId)。
  3. 該 provider 裏已填好 Perplexity API key。

插件官方說明裏強調兩件事:它不修改消息內容,Perplexity 返回 finish_reason=refusal 屬於上游內容審覈決定,插件只記錄日誌;它也不存儲或讀取 API key。

核心功能:請求修正

每次請求發往被守護的 provider 時,插件按下面這張表處理:

原問題 修正方式
Anthropic 模型拒絕不帶 output cap 的調用 補上 maxTokens(線上發送爲 max_output_tokens),並按剩餘上下文窗口封頂
DSH 工具名與 Perplexity 內建工具(web_search、fetch_url、sandbox 等)撞名,返回 HTTP 400 在請求裏改名爲 dsh_<name>,流式返回的 tool call 裏再改回原名
工具 schema 爲 type: "object" 但沒有 properties,或 description 爲空,返回 HTTP 400 補 properties: {} 或默認 description,不觸碰 argument 本身
出現 stop、超範圍的 temperature、不受支持的 reasoningEffort 移除或夾到合法範圍

可以做的配置項如下,默認值來自插件配置表:

Key 默認值 含義
enabled true 打開或關閉實時請求修正
providerId perplexity 要守護的 provider id
defaultMaxTokens 32768 調用未帶 output cap 時使用的默認值
contextWindow 200000 拿不到模型信息時的兜底上下文窗口
headroomTokens 4096 封頂時保留的安全餘量

核心功能:Provider 設置修復

插件帶一個 Web 側欄入口(叫做 “Perplexity”)和一個 agent 工具 perplexity_guard,工具的 action 有兩個取值:status 和 repair。

側欄頁面展示 provider route、設置檢查結果,以及最近 40 條改寫記錄或錯誤。status 用於看當前檢查結果。

repair 只針對上面提到的三個模型補齊以下字段:

  • api: openai-responses
  • baseURL:僅在缺失時寫入,默認 https://api.perplexity.ai/v1,不會覆蓋已有的自定義 baseURL
  • maxTokens、contextWindow
  • reasoningEfforts(低/中/高/xhigh)
  • compat.supportsMaxOutputTokens
  • 15 分鐘的流式空閒超時

約束也寫明瞭:repair 不會刪除其他模型,也不會替換已自定義的 baseURL。也就是說,修的只是三個目標模型缺的字段,不會大改你的 provider 配置。

安裝與啓用

README 提供的安裝路徑是一個本地 bundle 安裝,不走包管理器。先 clone 或下載倉庫,然後執行:

plugin_manager(action: "install_bundle", target: "C:\\path\\to\\dsh-perplexity-api-fix-plugin")

把 target 換成你本機實際放置插件目錄的路徑。然後:

  1. 重啓 DSH。
  2. 打開側欄的 Perplexity 頁面。
  3. 如果頁面裏顯示檢查項,按 Repair settings 修復 provider 設置。

安裝前建議先讀一遍源碼和 LICENSE。插件以當前 DSH 進程的權限運行,且 install_bundle 這個入口本身也是執行任意目錄的腳本註冊,傾向先審後裝。

已知限制

當請求需要改寫(工具別名或 schema 修復)時,因爲公開的 middleware API 沒有提供替換 options 的 next(),插件會帶着副本重新進入 ctx.llm.stream()。重新進入的這一次調用使用的是當前 adapter,所以如果在流進行當中改了 provider 配置,這一次調用可能讀到新配置。

實際影響不大:隻影響被改寫的那一次請求。

適用場景

適合正在用 DSH 接 Perplexity,並在用 Claude Opus 5.5、Claude Sonnet 5.5 或 GPT-6.1 Sol,且遇到 requests 直接 400 或模型對參數過於挑剔的場景。如果 provider 設置本來就完整,裝完後主要價值在於請求改寫和側欄的狀態檢查。

不適合:不使用 Perplexity API 的,不涉及上面三個模型的,或者不打算接受”插件會改寫線上請求參數”這點的。

結尾

這個插件的價值在於把一類格式層面的 400 從”要自己排查”變成”裝好後自動補齊”,並且把 provider 設置裏的常見缺口集中到一個按鈕裏修。它是社區維護的非官方插件,功能邊界寫清楚了,限制也寫清楚了。

  • 插件目錄頁:https://www.skillhub.cn/plugins/Kinfxhk/dsh-perplexity-api-fix-plugin
  • GitHub:https://github.com/Kinfxhk/dsh-perplexity-api-fix-plugin
羽毛球分组比赛记分
小程序二维码

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

小夜