前言¶
DeepSeek Harness (dsh) 的內置 openrouter 路由使用發佈時附帶的靜態模型列表。OpenRouter 上線的新模型(如 deepseek/deepseek-v4.1-flash)在下一個 DSH 版本發佈前不會出現在模型選擇器中。dsh-openrouter-live 插件爲 dsh 提供了一個新的路由,它直接讀取 OpenRouter 的 /models 端點,確保模型列表實時更新。
核心功能¶
該插件通過讀取 OpenRouter 的實時數據,擴展了 DSH 的能力:
- 實時模型列表:列表每 10 分鐘刷新一次。模型按名稱排序,且輸入/輸出價格以每百萬 tokens 計算後追加到模型名稱中。如果刷新失敗,則繼續使用上一次有效的列表。
- 模型元數據:上下文窗口和輸出限制直接來自 OpenRouter 的 API。推理級別(reasoning levels)從模型的
reasoning.supported_efforts讀取,選擇器中只會顯示模型支持的選項。 - 圖像輸入:支持圖片輸入。插件會內聯圖片,並遵循 DSH 的圖片預算:圖片會被縮放,當請求過大時,舊圖片會被卸載。
- 推理連續性:插件會在後續請求中發送
reasoning_details(包括簽名和加密條目),使 Claude 或 DeepSeek 等模型能夠在工具調用間保持推理狀態。 - 提示緩存:Anthropic 模型會在系統提示詞和最新消息處設置緩存斷點。對於其他提供商,插件使用
x-session-id頭部保持會話與上游提供商一致,從而保持緩存熱度。 - 故障分類:錯誤被映射爲 DSH 的故障代碼,以便重試插件只針對值得重試的情況進行重試(如速率限制、5xx 錯誤、空響應),而跳過無效密鑰或上下文溢出等錯誤。
- 實際花費追蹤:插件記錄 OpenRouter 報告的每次響應的
usage.cost,這是真實費用而非估算值。費用會附加到當前會話及其所有委託的子會話中。數據持久化在~/.dsh/openrouter-live/costs.jsonl中,每行對應一個 JSON 記錄,包含 OpenRouter 的生成 ID。 - 共享憑據:默認情況下,該路由讀取與內置
openrouter路由相同的OPENROUTER_API_KEY憑據,無需額外配置。
安裝與啓用¶
安裝前請確保環境滿足以下要求:
* DeepSeek Harness 版本:0.1.6-alpha.2 至 0.1.7
* Node.js 版本:^22.19 或 >=24
* 已擁有 OpenRouter API Key
執行以下命令安裝插件:
dsh plugin --profile web add dsh-openrouter-live
安裝後必須重啓配置文件。若尚未存儲 API Key,請在設置中選擇 OpenRouter 卡片存儲,或導出 OPENROUTER_API_KEY 環境變量。
配置¶
插件的所有配置項均位於 ~/.dsh/profiles/<profile>/cordis.patch.yml,在 openrouter-live 節點下設置。
基本配置示例¶
- id: openrouter-live
config:
models: ['deepseek/*', 'anthropic/claude-*']
priceInName: true
關鍵配置項¶
| 字段 | 默認值 | 說明 |
|---|---|---|
models |
[] |
模型 ID 的通配符過濾列表。空列表表示顯示所有模型。 |
priceInName |
true |
是否將價格追加到模型名稱中。 |
apiKeyEnv |
OPENROUTER_API_KEY |
讀取憑據的環境變量名。 |
maxTokens |
32768 |
輸出限制。如果未設置,則使用此值,但模型自身的限制優先級更高。 |
costLedgerPath |
$DSH_HOME/openrouter-live/costs.jsonl |
花費日誌文件的路徑。設置爲空字符串則僅保留在內存中。 |
典型用法¶
設置默認模型:
agent-default-model:
provider: openrouter-live
model: deepseek/deepseek-v4.1-flash
在 Composer 中選擇模型,或使用命令查看花費:
/cost
注意事項¶
- 許可證:本項目採用 MIT 許可證。
- 源碼審查:作爲插件,它以當前進程權限運行。建議在安裝前檢查源碼。
- 安裝方式:請安裝打包後的
.tgz文件,不要安裝目錄,否則會導致依賴解析錯誤。