前言¶
用 Coding Agent 改代碼,跑得快,翻車也快:一條模糊指令、一次沒退出的循環、幾個並行的工具調用,都可能讓一個兩行的小改動變成對十幾個文件的改寫,等人發現時 diff 已經不好審了。常見的應對要麼靠提示詞約束,要麼靠事後人工審查,兩者都不是確定性邊界。
下面介紹的 dsh-change-budget 換了一種做法:在支持的寫/編輯工具運行前計數,首個將越過限額的調用在工具體執行前被拒絕。
這是什麼¶
dsh-change-budget 是一個 DeepSeek Harness(DSH)插件,爲每個 Agent 的每一輪提供獨立、可配置的變更預算,覆蓋三個維度:去重文件數、結構化修改調用數、提交的 UTF-8 字節數。
項目由 Raphaelutumn 維護,當前版本 0.1.0,許可證爲 MIT。
核心功能¶
1、每輪獨立預算。每個 Agent 每輪拿到獨立的預算,文件數、調用數、字節數三個維度分別計數,互不干擾。
2、工具體執行前拒絕。計數發生在支持的寫/編輯工具運行之前,首個將越過限額的調用在工具體執行前被拒絕,不會真正寫入。
3、並行安全。待處理調用會同步預留額度,併發寫入不能一起越過限額。
4、明確的計數範圍。只統計受支持的結構化修改調用:
write:計content的 UTF-8 字節數edit:計new_string的 UTF-8 字節數str_replace_editor:計create/str_replace/insert操作
只讀調用與畸形調用被忽略。str_replace 缺失 new_str 時視爲空替換,仍計爲一次修改。
5、配置嚴格。所有配置值必須爲正整數,非法配置會導致插件加載失敗,而不是靜默放寬限制。
安裝與啓用¶
從 npm 安裝:
dsh plugin --profile web add @raphelutumn/dsh-change-budget@0.1.0
注意 npm 包名是 @raphelutumn/dsh-change-budget,scope 拼寫與 GitHub 用戶名 Raphaelutumn 不完全一致,安裝命令以 README 原文爲準。
也可以下載 v0.1.0 的 tarball 後本地安裝:
dsh plugin --profile web add .\dsh-change-budget-0.1.0.tgz
想從源碼構建,先 clone 倉庫,再打包安裝:
git clone https://github.com/Raphaelutumn/dsh-change-budget.git
Set-Location .\dsh-change-budget
corepack pnpm install
corepack pnpm pack --pack-destination .
dsh plugin --profile web add .\raphelutumn-dsh-change-budget-0.1.0.tgz
移除插件:
dsh plugin --profile web remove dsh-change-budget
經過上面的步驟,插件會安裝到 web profile 並生效。兼容性方面,插件在 Node.js 20/22/24 上通過 CI 驗證(Ubuntu、macOS、Windows),DeepSeek Harness peer 範圍爲 ^0.1.0-rc.5。
配置預算¶
三個配置項與默認值:
| 配置項 | 默認值 | 含義 |
|---|---|---|
maxFilesPerTurn |
12 |
一輪內去重文件數上限 |
maxMutationsPerTurn |
24 |
一輪內結構化修改調用數上限 |
maxPayloadBytesPerTurn |
262144 |
一輪內提交的 UTF-8 字節數上限 |
在 profile 的 cordis.patch.yml 中覆蓋插件配置行,例如把限額放寬:
- id: change-budget
config:
maxFilesPerTurn: 20
maxMutationsPerTurn: 40
maxPayloadBytesPerTurn: 524288
所有值必須爲正整數;非法配置會讓插件加載失敗,而不是靜默放寬限制。
跑一遍演示¶
倉庫自帶一個運行時演示:安裝依賴後執行
corepack pnpm demo
演示允許兩個文件的修改,第三個文件會在工具體運行前被攔截。
實際使用中,首個越限調用會收到這樣的報錯:
Change budget exceeded for this turn: files would reach 13/12. Blocked path: "src/generated/client.ts". Raise the plugin limit or continue in a new user turn.
報錯會指出越限的維度與數值,以及被攔截的路徑;當多個維度同時超限時,錯誤消息會一併報告所有越限項。
適用場景與注意¶
適合的場景:
- 讓小請求保持小:
maxFilesPerTurn攔下第一個會越界的修改,避免模糊指令演變成大範圍改寫。 - 打斷重複編輯循環:
maxMutationsPerTurn限制一輪內被受理的結構化寫/編輯調用次數。 - 約束並行負載:同步預留讓併發的結構化寫入共享同一份文件、調用與字節預算。
注意事項:
- 插件只限制受支持的結構化工具(
write、edit、str_replace_editor的指定操作),不覆蓋任意 Shell、PowerShell、Bash 寫入,也不覆蓋 symlink 或 junction 寫入。 - 插件以當前 dsh 進程的權限運行,安裝前應檢查源碼與許可證;本插件許可證爲 MIT,源碼託管在 GitHub。
小結¶
dsh-change-budget 把「一輪能改多少文件、多少次調用、多少字節」變成一個可配置、可執行的硬約束,越限調用在工具體執行前就被拒絕,不需要事後補救。如果你在用 DeepSeek Harness 跑編碼 Agent,可以按上面的步驟把它加進 profile 試試。
- 社區插件目錄頁:https://www.skillhub.cn/plugins/Raphaelutumn/dsh-change-budget
- GitHub 倉庫:https://github.com/Raphaelutumn/dsh-change-budget