前言¶
在 DeepSeek Harness(DSH)裏做智能體開發時,常見做法是固定一條 profile 裏的模型與 reasoningEffort,或靠路由插件整輪換成另一套 provider/model。對喜鵲(Magpie)等 OpenAI 兼容第三方模型,換路由往往行不通;手動改強度又要在複雜任務與寒暄之間反覆切換。dsh-auto-effort 面向的是另一類需求:保留當前請求的 provider 與 model,只按每一輪用戶任務改寫 reasoningEffort,並從模型真實聲明的強度列表裏挑選合法取值。
下面介紹該插件的定位、判定與映射方式、安裝配置,以及與 dsh-router-laya 的差異。事實以倉庫 README 與 package.json 爲準。
這是什麼¶
維護者 subeichen1 在 GitHub 開源的 DSH 插件 dsh-auto-effort(中文 README 標題爲「自動思考強度」)。分類上屬於模型推理類能力;社區目錄頁:https://www.skillhub.cn/plugins/subeichen1/dsh-auto-effort。源碼:https://github.com/subeichen1/dsh-auto-effort。
一句話:按輪做 reasoning-effort routing,不切換模型,只設置當前模型實際支持的思考強度檔位,使 Magpie 及其他第三方 OpenAI 兼容 provider 也能用同一套交互(輸入框旁檔位膠囊、自動/手動切換、最近判定浮層),交互延續自 dsh-router-laya,實現路徑不同。
核心功能¶
不換模型,只改 reasoningEffort¶
插件在請求發出前讀取 llm.resolveModelInfo().reasoning.efforts,按判定出的三檔 low / high / max 映射到該列表中的具體強度 id。模型元數據缺失或強度列表爲空時,請求保持原樣,膠囊顯示 AUTO · 不支持。
模型信息按 provider/model 緩存 5 分鐘(MODEL_INFO_TTL_MS),避免每輪都向宿主查詢。
檔位到強度的映射¶
判定結果只有三檔。每檔有一份偏好順序,取聲明列表中第一個命中的強度;都不命中時按 pi-ai 強度序號取最近一檔。若強度 id 完全不在 pi-ai 詞彙裏(宿主稱爲 adapter-owned opaque string,例如 none/thinking/deep),則按聲明順序回退:數組第一個給 low、最後一個給 max、中間給 high。
| 檔位 | 偏好順序 |
|---|---|
| low | low → minimal → medium → high → xhigh → max → off |
| high | high → medium → xhigh → max → low → minimal → off |
| max | max → xhigh → high → medium → low → minimal → off |
當模型聲明跨度不足以表達某一檔時,膠囊會標出實際強度(例如 AUTO · 低 → xhigh),浮層說明「該模型最低只到 …」或「最高只到 …」,避免把檔位名稱誤解爲更低或更高的真實強度。
判定邏輯(純 JS)¶
判定只讀取用戶自己發送的那條消息;經 inbox 的工具結果與注入上下文不參與打分,避免報錯日誌等內容拉高強度。核心規則包括:
- 重試 / 糾正:與上一輪文本相同則升一檔;出現「又錯了 / 還是不行 / 第三次」→ MAX;「不對 / 重新 / 換個」等在上一輪檔位上升一檔。
- 顯式意圖:「仔細 / 深入 / 一步一步 / step by step」→ 至少 high;「最高強度 / 徹底」→ MAX;「簡短 / 一句話 / quickly」爲封頂而非直接判 low,內容信號仍參與打分。
- 內容打分:長度、代碼塊、報錯、主題詞、多問號、多路徑、編號清單等累計分數:≥6 → MAX,≥3 → high,否則 low;「整個項目 / 端到端 / 評審 / 設計文檔」等廣度信號單獨 +3。
- 寒暄 / 繼續:寒暄固定 low;「繼續」沿用上一輪檔位;無新用戶文本的續跑步驟沿用本會話上一輪檔位。
可選配置 judgeUrl 時,可將 {task, prev_tier, prev_task, session_id} POST 到 Laya 判定服務(默認超時 1 秒,judgeTimeoutMs 可調);失敗回落本地規則;連續 3 次失敗後暫停調用 60 秒。超過 4000 字的任務在判定前只保留開頭與結尾各一段(judgeMaxChars 可配)。
相比 dsh-router-laya 依賴約 842 MB 的本地 Python 判定服務,本插件默認 零額外進程,純 JS 確定性規則,README 稱判定耗時 <1ms。
前端與本地 HTTP 路由¶
膠囊掛在 conversation.input.right,模式爲全局 auto/manual,狀態文件見下文。宿主 webServer 迴環監聽,提供例如:
| 路由 | 方法 | 說明 |
|---|---|---|
/auto-effort/state |
GET | 模式與各會話最近 20 條判定 |
/auto-effort/mode |
GET / POST | 讀/寫模式 |
/auto-effort/locale/<lang>.json |
GET | 膠囊文案(zh / en) |
路由對 Host 做本地校驗,寫入另校驗 Origin 與 Content-Type,以降低 DNS rebinding 等風險。
安裝與啓用¶
需要 DSH 0.2.x(README 寫在 0.2.2-rc.1 上驗證)。npm 包 dsh-auto-effort 當前版本 1.0.0(package.json),許可證 MIT,Node >=18.17。
從插件市場:DSH 內 插件 → 市場,搜索「自動思考強度」或 dsh-auto-effort 安裝。
命令行(npm 包發佈後):
dsh plugin --profile web add dsh-auto-effort
從 GitHub 安裝:
dsh plugin --profile web add github:subeichen1/dsh-auto-effort
裝完後按宿主提示重啓或刷新頁面(Ctrl+R)。輸入框右側出現 AUTO · 待判定 膠囊即表示前端已掛載;若未出現,先在插件頁確認 dsh-auto-effort 已啓用。
說明:DSH 生態主張「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。插件在本機以當前 DSH 進程權限運行,安裝前宜自行查看源碼與許可證。
配置¶
在 profile 的 cordis.patch.yml 中覆蓋 id: auto-effort 段落即可,例如:
- id: auto-effort
config:
mode: auto # auto | manual
global: true # 覆蓋所有會話(含子代理)
respectExplicit: false # true 時若請求已帶 reasoningEffort 則插件不介入
judgeUrl: "" # 可選 Laya /judge 地址
judgeTimeoutMs: 1000
efforts:
low: [low, minimal]
high: [high, medium]
max: [max, xhigh]
judge:
scoreHigh: 3
scoreMax: 6
lengthTiers: [160, 500, 1200]
judgeMaxChars: 4000
hardKeywords: []
broadKeywords: []
模式持久化路徑:$DSH_HOME/auto-effort-mode.json;未設置 DSH_HOME 時爲 ~/.dsh/auto-effort-mode.json。
兩處配置需特別注意:
judgeUrl非空會把任務文本(最多judgeMaxChars字)、prev_task、會話 id 發到遠端;默認關閉。非https時日誌會 warn 明文離機。respectExplicit: true且 profile 裏agent-default-model已寫死reasoningEffort: max時,每輪都算「已指定」,膠囊顯示AUTO · 已指定 · max並灰掉,插件相當於全程讓行;要自動路由請保持respectExplicit: false或去掉默認reasoningEffort。
膠囊其它狀態包括:AUTO · 不支持、AUTO · 離線、AUTO · 切換失敗、手動(不介入)。
典型用法與自測¶
日常無需額外命令:在 auto 模式下發送任務即可,由規則(或可選遠程 judge)選檔,插件寫入對應 reasoningEffort。需要固定強度時用膠囊切到 manual,或通過 /auto-effort/mode 讀寫模式。
開發者在倉庫內可跑單元測試:
cd dsh-auto-effort
node --test
用例覆蓋判定、檔位選擇、插件 claim/request/HTTP 全鏈路等;CI 在 Node 20 / 22 / 24 上執行同一命令。
本地聯接開發:將倉庫 junction/symlink 到 profile 的 node_modules/dsh-auto-effort,或在 package.json 中用 "dsh-auto-effort": "file:<絕對路徑>" 並加入 dsh.profile.bundles。
與 dsh-router-laya 的選型¶
| dsh-router-laya | dsh-auto-effort | |
|---|---|---|
| 路由方式 | 換 provider/model | 只改 reasoningEffort |
| 判定 | 本地 Python(842 MB) | 純 JS + 可選 HTTP |
| 喜鵲等第三方 | 不支持則原樣放行 | 按模型聲明強度適配 |
| 外部依賴 | Python、權重、8765 端口 | 默認無 |
若你已經在用 Laya 路由的膠囊 UI,但希望 留在當前 Magpie 或自建 provider 模型上,用本插件更合適;若目標是按任務換整顆模型,仍應使用路由類插件。
結尾¶
dsh-auto-effort 把「按輪思考強度」做成不換模型的 reasoningEffort 補丁:讀取真實強度列表、三檔映射、純 JS 判定與可選 Laya 回退,並保留膠囊交互。進一步細節見 GitHub README:https://github.com/subeichen1/dsh-auto-effort;目錄頁:https://www.skillhub.cn/plugins/subeichen1/dsh-auto-effort。