dsh-budget-guard-plugin:爲 DSH 每次任務劃定預算線

前言

在 DeepSeek Harness(DSH)裏跑 Agent 任務時,模型調用會隨輪次累積:Token 與人民幣費用往往要到賬單出來纔看得清。若任務步數多、子代理嵌套或反覆重試,單次會話的成本可能超出預期。社區裏常見做法是事後對賬或憑經驗掐斷,缺少與會話同生命週期的實時覈算與硬閾值。

下面介紹維護者 Existence001100 發佈的 dsh-budget-guard-plugin(GitHub:Existence001100/dsh-budget-guard-plugin,SkillHub 分類 admin-security)。它在 DSH 官方擴展點(如 agent/pre-step、agent/turn-stopping)上掛接計費與攔截邏輯,不改動模型核心;支持按 CNY 金額 或 Token 數量 設上限,接近閾值預警,達到比例後自動中止或手動放行,並在每輪結束後基於歷史燃燒率做降級預估(不額外調用 LLM)。

這是什麼

dsh-budget-guard-plugin 是面向 Web Profile 的 DSH 插件(npm 包名 dsh-budget-guard-plugin,當前資料中版本 0.4.5,許可證 MIT)。定位是:給每一次任務加一條可審計的預算線——從會話日誌裏的 assistant/message.usage 累計 input/output/cache Token,按消息實際發生時刻的北京高峯/空閒價計費,金額與 Token 兩條線獨立,任一先到即觸發;值爲 0 的維度表示「不設這條線」,不參與攔截。

插件以當前 DSH 進程權限運行;安裝前建議自行查看 GitHub 倉庫 源碼與許可證。社區目錄頁:SkillHub 插件頁(獨立站點,與 DeepSeek / 幻方無官方從屬關係)。

核心功能

預算聲明與實時覈算

  • 全局默認:在 profile 的 cordis.patch.yml 或 設置 → 預算護欄 中配置 budgetAmount、tokenBudget 等。
  • 當前會話:對話內 /budget 命令,或輸入框下方預算條展開後「設置本次預算…」;寫入 command/run 日誌,重啓後可重放。

計費引擎匹配內置價格表,支持高峯/空閒計價;未知模型可按配置告警。父任務與子代理消耗可聚合(詳見 README「父任務 / 子代理聚合」)。

攔截與預警

行爲 說明
預警 達到 warnRatio(默認 0.8)時在預算條與每輪卡片提示
自動攔截(interceptMode: auto) 達到 interceptRatio(默認 0.95)時 agent.cancel({ kind: 'hook' });enforceAtPreStep 爲真時超預算拒絕下一步
手動攔截(manual) 不自動取消;composer 下方預算條提供「繼續 / 中止」;可用 /budget continue、/budget abort

預算爲 0 時不攔截——未設金額且未設 Token 時不會 cancel 或 pre-step 拒絕;只有任一維度大於 0 才啓用閾值判定。

預估與展示

  • 任務前粗估(enablePreEstimate):首輪前給出步數與金額/Token 範圍及佔預算比例,可關閉。
  • 每輪降級預估(enableTurnEstimate):展示近期歷史燃燒率(最近 3 輪/步平均);僅在模型明確寫出計劃時顯示剩餘步數與剩餘金額,不預測未來總花費。
  • 輸出位置(estimateOutput):chat / sidebar / both(默認);右側欄依賴 dsh-better-sidebar,無 bundle 時退回對話卡片。

安全與可恢復性

  • /config/save 與 /action 默認僅接受本機 loopback(requireLocalControl、requireLocalAction)。
  • 冷啓動快照 + 從會話日誌重放,避免重複計費;排障可用 /budget reset-snapshot 按日誌重算本會話緩存(保留用戶預算聲明與手動放行決定)。

攔截流程概覽:用戶請求 → agent/pre-step → 計費引擎 → 高峯/空閒計價 → 累計判定 → 放行或攔截/詢問。

安裝與啓用

環境要求

  • DeepSeek Harness 0.2.0 及以上;
  • Node.js >=22.13;
  • PATH 中有 pnpm(供 dsh plugin 使用)。

從 npm 安裝(推薦)

dsh plugin --profile web add dsh-budget-guard-plugin

安裝後請 重啓正在運行的 Web Profile。DSH 會識別包內 dsh.bundle manifest,並在 composition 中插入 budget-guard 行,默認含 interceptMode: auto、enableTurnEstimate: true、estimateOutput: both 等。

從 GitHub 安裝

需要尚未發佈到 npm 的變更時:

dsh plugin --profile web add github:Existence001100/dsh-budget-guard-plugin

如需可復現安裝,請固定到具體 commit。

更新與卸載

dsh plugin --profile web update dsh-budget-guard-plugin
dsh plugin --profile web remove dsh-budget-guard-plugin

任一操作後同樣應重啓 Profile。

典型用法

對話命令(僅當前會話)

命令不調用模型,只寫會話日誌,便於審計與重放:

/budget 2.5              # 本次任務 ¥2.50
/budget 20000 tokens     # 本次任務 20k tokens
/budget 20k              # 同上
/budget both 2 20000     # 金額 + Token 雙上限(任一先到即觸發)
/budget                  # 查看當前預算、已用、進度與上一輪預估
/budget continue         # manual 模式:繼續,再增加約 10% 預算後再次提示
/budget abort            # manual 模式:中止當前輪次
/budget unlock           # 解除本會話攔截(仍統計費用)
/budget lock             # 恢復攔截
/budget off              # 清除會話覆蓋,回到 Config 默認
/budget reset-snapshot   # 按日誌重算計費緩存(排障)

Config 示例

在 cordis.patch.yml 中覆蓋 budget-guard 的 config,例如:

- id: budget-guard
  config:
    budgetAmount: 2
    tokenBudget: 0
    currency: CNY
    warnRatio: 0.8
    interceptRatio: 0.95
    interceptMode: auto
    enablePreEstimate: true
    enableTurnEstimate: true
    estimateOutput: both
    turnEstimateMinInterval: 1500
    enforceAtPreStep: true
    holidays: []

常用鍵含義(完整表見 README「配置項」):budgetAmount / tokenBudget 默認 0 表示不設該維上限;warnRatio 須 ≤ interceptRatio;比例在設置頁以百分數展示(如 85 表示 0.85)。snapshotPath、allowedOrigins、holidays、useBuiltinHolidays 僅能通過 patch 手改,不在設置表單中。

適用場景與注意

適合:在 DSH Web Profile 中長期跑 Agent、需要會話級費用上限、希望接近超支時自動停或人工確認再繼續的團隊或個人;與官網賬單對賬、高峯/空閒價、子代理聚合等有專門 README 章節可查閱。

注意:

  1. 插件估算基於內置價格表與會話日誌 usage,與官網賬單可能存在差異——README 提供「怎麼覈對金額」說明。
  2. 默認 budgetAmount 與 tokenBudget 均爲 0,不會因未設預算而誤攔;啓用攔截前須顯式設預算或 Config 默認值。
  3. 安裝、更新、卸載後重啓 Profile,保證 composition 與已安裝 bundle 一致。
  4. 問題反饋可走 GitHub Issues(倉庫 bugs 字段指向該地址)。

結尾

經過上面的步驟,你可以在 DSH 裏爲每次任務加上可配置的金額或 Token 預算線,並在超支前預警或攔截,同時保留日誌重放與快照恢復能力。進一步瞭解能力與邊界,請閱讀倉庫 README;安裝入口見 SkillHub dsh-budget-guard-plugin 與 GitHub 主頁。

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

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

小夜