AI 工程

每題跑 8.8 次測試,禁止它跑只差 1.25 個百分點:coding agent 的測試執行,該當成預算來管

這篇文章適合你,如果你是…

  • 每天用 Claude Code、Codex 修 bug 的工程師:你看過 agent 跑十幾次 pytest 才交卷,想知道這些時間和 token 換到了什麼。
  • 管 agent 用量和帳單的技術主管:你想壓成本,但怕一限制就掉品質,這篇給你三份研究的對照數字。
  • 在設計內部 agent harness 的架構師:你要決定「驗證」這一步放在哪、由誰做,這篇給你一個可以直接套的框架。

1. 前言:問題場景(約 600 字)

Hook 開場


我們的內容系統裡有一批產圖、排程、發文腳本,大多是我跟 coding agent 一起修出來的。有一陣子我開始注意 session 的時間都花在哪:agent 改完一行,跑一次測試;看到某個無關的警告,再改一點,再跑一次。十幾分鐘後它交卷說「全部通過」,我 review 一看,真正有用的改動就是一開始那一行。

我當時的直覺是:讓它多跑幾次比較保險,慢一點沒關係。


從系統角度看,這個直覺有個沒被檢查的假設:「agent 跑的測試」和「判斷對錯需要的測試」是同一組。如果不是同一組,多跑幾次只是在同一張考卷上反覆對答案。而每跑一次,測試輸出整段進 context,下一輪推理要重讀;agent 看到輸出又會想改點什麼。成本是確定的,收益要看那張考卷出得好不好。

數據佐證

**** ISSTA 2026 的一篇論文直接拿數字回答了這個問題。研究團隊先分析 SWE-bench 排行榜上 7,745 條公開的 agent 軌跡,發現 agent 平均每題跑 8.8 次測試,最多的組合跑到 18.7 次。接著他們用 Claude Code、Codex、OpenCode 做了 3,000 次對照實驗:禁止跑測試,商用 agent 的解題率平均只差 1.25 個百分點,沒有任何一格達到統計顯著;Claude Code 卻省下 56–62% 的 token 和一半的時間。

解決方案預告

這篇不是要你把測試關掉。研究裡最重要的數字其實是另一個:失敗的案例裡,有 81–100% 在 agent 自己的驗證中是通過的。問題不在「跑幾次」,而在「誰出題、什麼時候跑」。我會用三份研究拆解這件事,最後給一個可以直接放進 Claude Code 的測試預算 hook。

文章承諾

  • 三份 2026 研究的完整數字與它們的邊界(哪些能說、哪些不能說)
  • 同一招在 Claude Code 省六成、在 Codex 幾乎沒差:為什麼
  • 「執行預算」的決策框架與 5 個場景
  • 一個實測過的 Claude Code PreToolUse hook

讀者收穫

讀完這篇文章,你將能夠:

  1. 判斷你的 agent 現在的測試執行,是在發現問題還是在確認它已經相信的答案
  2. 依模型強弱與任務類型,設定合理的測試預算
  3. 把「驗收」從 agent 手上拿回來,交給它沒挑過的那組測試

1.5 TL;DR

  • Agent 平均每題跑 8.8 次測試;禁止執行,商用 agent 解題率只差 1.25pp,不顯著
  • Claude Code 禁止執行省 56–62% token、48–54% 時間;Codex 本來就少跑,限制幾乎沒差
  • 失敗案例裡 81–100% 自己的驗證是綠的:agent 的綠燈不是驗收
  • 小模型例外:給 1 次配額最好,放任反而塞爆 context
  • 做法:給預算、放後面、驗收交給 CI 跑它沒挑的測試

2. 核心概念:執行是資源,不是能力(約 700 字)

一個比喻

想像你請一位資深工程師修一個 bug,他有兩種工作方式。第一種:讀 issue、讀程式碼、想清楚、改一處、送 PR,讓 CI 跑完整測試。第二種:讀一點、改一點、跑一次、看輸出、再改一點、再跑,直到自己挑的那幾個測試變綠。

第二種看起來比較勤勞,但如果他挑的測試沒有覆蓋 bug 的真正條件,綠燈只代表「他的假設自洽」。第一種把驗收交給一組他沒挑過的測試,反而比較誠實。

Coding agent 預設是第二種。

執行的三種成本

成本 怎麼產生 誰在付
Token 每次輸出整段進 context,之後每一輪都重讀 帳單、額度
時間 測試本身的執行時間+多出來的推理輪數 開發者的等待
環境維運 每個 repo 都要準備一套 agent 跑得動的測試環境 平台團隊

第三項常被忽略。論文作者特別指出,禁止執行模式「removes the need to maintain per-repository test environments」。如果你在雲端跑大量背景 agent,環境準備可能是最貴的那一項。

為什麼直覺會錯

**** 「跑了比較可靠」成立的前提是:測試能區分對與錯,而且輸出能指向下一步。這兩件事 agent 都不保證。它挑的測試通常是它認為相關的,那份「認為」和它寫 patch 時用的是同一套理解。理解錯了,patch 錯,挑的測試也會跟著錯。

關鍵術語

術語 英文 說明
解題率 Resolve rate SWE-bench 官方隱藏測試通過的比例
自我驗證 Agent-executed validation agent 自己挑、自己跑的測試或腳本
官方評測 Official evaluation benchmark 準備好、agent 看不到的測試
執行後修改 Post-execution modification 跑完測試後又去改程式碼
工具面 Tool surface agent 能用的工具組合
McNemar 檢定 McNemar's test 同一批題目在兩種條件下成敗差異的檢定

3. 證據:三份研究,同一個方向(約 2,300 字)

3.1 To Run or Not to Run:先看大家實際跑多少

**** 這篇論文由北京航空航天大學、武漢大學與新加坡管理大學團隊發表(Lin et al.,ISSTA 2026)。第一階段他們收集 SWE-bench Lite 和 Verified 排行榜上 7,745 條公開軌跡,涵蓋 SWE-agent、OpenHands、LiveSWEAgent、Mini-SWE-agent 四種框架、12 個模型,從 GPT-4 到 Claude Opus 4.5、Gemini 3 Pro。

結果是:每一個 agent、每一個模型都會跑測試,平均每題 8.8 次,從 2.0 次(Mini-SWE-agent+GPT-5.2)到 18.7 次(OpenHands+Claude 4 Sonnet)。而且這只算 pytest、unittest 這類測試框架呼叫,python repro.py 這種腳本不算在內。

他們也看了執行的時機:大部分執行集中在對話後段,後段的執行跟成功的關聯比較高。例如 OpenHands+Claude 3.5 Sonnet,前段執行的成功率 42%,後段 72%。(這是單一組合的例子,網路上有轉述把它寫成全體平均,並不正確。)

3.2 把執行拿掉,會怎樣

第二階段是對照實驗。題目是 Lite 和 Verified 各取前 100 題,三個 agent:

  • Claude Code(Claude Sonnet 4.5)
  • Codex(GPT-5.2,reasoning effort xhigh)
  • OpenCode(Qwen2.5-Coder-32B,本地 vLLM)

每題跑五種設定:禁止執行、配額 1 次、配額 3 次、預算提示(「可以跑,但每次都有成本」)、不限制。200 題 × 3 × 5,共 3,000 次。

解題率(%)

Agent/題庫 禁止 配額 1 配額 3 預算提示 不限制
Claude Code Lite 63 61 62 63 64
Claude Code Verified 64 64 65 67 67
Codex Lite 74 68 69 71 73
Codex Verified 73 72 73 71 75
OpenCode Lite 7 14 7 9 6
OpenCode Verified 13 17 11 13 14

禁止和不限制之間,商用 agent 四格平均差 1.25 個百分點(不限制略高),McNemar 檢定沒有一格顯著。

Before/After:Claude Code 的帳單

不限制(Before) 禁止執行(After) 差異
Lite token(輸入/輸出) 121K / 37K 52K / 17K −56.4%
Verified token 128K / 39K 48K / 15K −62.3%
Lite 時間 1,028 秒 531 秒 −48.4%
Verified 時間 1,234 秒 573 秒 −53.6%
解題率 64% / 67% 63% / 64% −1 / −3pp

論文原文的結論是:「For Claude Code, Prohibited delivers the best cost-effectiveness, reducing tokens by 56–62% with only a 1–3pp resolve rate difference.」

有人會問:禁止只是寫在 prompt 裡,agent 偷跑怎麼辦?作者另外做了一組硬限制,用 --disallowedTools 直接擋掉 pytest 等指令,Claude Code 在 Verified 上是 63 vs 67(−4pp),省 62% token、54% 時間。方向一樣。

3.3 同一招,對 Codex 幾乎沒差

這是最容易被忽略、卻最實用的一點。Codex 那一欄的 token 差異:Lite −13.5%,Verified 只有 −0.9%。原因很簡單:那個版本的 Codex 本來就很少跑測試,禁止模式下每題嘗試執行的次數接近 0。你沒辦法省下本來就沒花的錢。對 Codex,論文找到的最佳點是配額 1 次,省 21–25% token。

**** 所以「限制執行」不是一個通用旋鈕。它的效果取決於你的 agent 原本有多愛跑。在調之前,先量。

3.4 為什麼執行沒幫上忙

論文的第三個研究問題最值得讀,它拆了四個原因。

一、大部分題目結果根本不變。 600 對比較(200 題 × 3 個 agent)裡,547 對(91.2%)不管跑不跑,結果都一樣。執行讓失敗變成功的有 29 對,讓成功變失敗的有 24 對,淨差 5 對。作者的說法是:「Execution is not inherently unhelpful; its benefit is concentrated on specific instances.」

二、重現 bug 對定位沒幫助。 Claude Code 做了 164 次重現執行,只有 48.8% 給出可行動的回饋。在那些有可行動回饋的題目上,定位準確度是 93.5%,不跑的版本反而是 95.7%。

三、跑了就會繼續改。 跑完測試後又去改程式碼的比例,Claude Code 從 4.5% 跳到 67.5%,Codex 從 0% 到 31%。Claude Code 不限制模式用了 2.1 倍對話輪數、2.8 倍編輯、8 倍測試執行,成功率一樣。論文的描述很精準:對於靠推理就能解的 bug,執行只是「confirming an already-correct solution rather than enabling its discovery」。

四、它的綠燈不是官方的綠燈。 這是全篇我覺得最重要的數字。Claude Code 兩種模式都失敗的 80 題中,有 65 題(81.2%)至少有一次自己跑的驗證是通過的;Codex 是 52 題中的 52 題,100%。也就是說,agent 交卷時看到綠燈、真心相信自己做對了,而官方測試是紅的。

**** 把第三點和第四點放在一起看,就是 agent 執行行為的完整畫像:它跑自己挑的測試,看到不順眼的就繼續改,改到自己挑的測試全綠,然後交卷。整個過程的「驗收標準」是它自己訂的。我們在〈綠燈是它自己出的考卷〉那篇談過 agent 寫的測試品質問題,這份研究補上了另一半:就算不談測試寫得好不好,光是「誰挑測試」就決定了綠燈的含金量。

3.5 小模型是例外

OpenCode 搭 32B 模型、65K context,結果完全不同:配額 1 次在 Lite 拿到 14%,不限制只有 6%。這是整份研究裡唯一排除 0 的信賴區間(paired bootstrap 90% CI [+5.9, +15.3]pp)。原因是不限制時,測試輸出把小 context 塞滿,能交出非空 patch 的比例從 74/100 掉到 50/100。不限制在 Verified 上要 3.1 倍 token 和 3.1 倍時間,只換到 1 個百分點。

小模型需要一點點回饋,但承受不了大量輸出。

3.6 研究二:換工具面,改變路徑,不改變答案

**** Rochester Institute of Technology 團隊(Yang, Yu, Desell,KDD 2026 SE 3.0 Workshop)做了另一種切法:不限制「跑不跑」,而是限制「用什麼工具」。三種工具面:agent 預設工具、只給 bash、只給一個 execute_code MCP 工具。兩種任務(計算型、SWE-bench 修改型)× 兩個 agent(Claude Code、Codex CLI)。

通過率在每一格都打平,差距不到 3 個百分點。成本卻差很多:計算任務上 Claude Code 只給 execute_code 便宜 24.6%(顯著),SWE-bench 上 Codex 便宜 19.9%(顯著),但 SWE-bench 上的 Claude Code 反而貴 14.4%(不顯著,作者追到原因是失敗軌跡拖得比較長)。

作者的一句話可以當這整個主題的總結:「Tool surface changes the path and the cost, not the answer.」

3.7 研究三:harness 設計,強模型和弱模型要反著調

**** UMass Amherst 與 Zoom 等團隊(Fan et al.,2026 年 9 月)在固定的 ReAct 迴圈下,對 4 個模型、SWE-Bench Verified 與 Terminal-Bench 2.1,跑了 176 組配對設定。和本題最相關的兩個發現:

  • 規劃(planning)對強模型是省錢工具,對弱模型是準確度支架。 Nemotron 550B 有規劃 65.8%/每題 $2.33,沒規劃 67.8%/$3.31,成本降約三成、準確度沒顯著差;30B 有規劃 25.2%,沒規劃只剩 13.6%。論文的章節標題直接寫:規劃縮短強模型的軌跡,靠的是「reducing post-edit verification」。也就是說,強模型被砍掉的那些輪數,主要就是改完之後反覆驗證。
  • 只給 bash,強模型更便宜,弱模型崩盤。 550B 只給 bash 是 69.4%/$1.11,成本約砍半;Mistral Medium 3.5 卻從 68.6% 掉到 45.4%。

另外有個值得抄的設計:他們的 harness 在 agent 改完 Python 檔後,自動跑 ruff、pyflakes 或語法檢查這類「快速、唯讀」的檢查,在花一輪跑測試之前先抓低級錯誤。

3.8 三份放在一起

研究 改的是什麼 準確度 成本 例外
To Run or Not to Run 跑不跑測試 差 1.25pp,不顯著 Claude Code −56–62% token 小模型要給 1 次配額
execute_code 消融 工具面 差距 <3pp −25% 到 +14%,看任務與 agent SWE-bench/Claude 變貴
Harness 設計 規劃、工具、context 管理 強模型幾乎不動 強模型 −30% 到 −52% 弱模型掉 12–23pp

三份研究、不同團隊、不同切法,方向一致:對強模型,改執行與驗證的方式,主要影響的是成本,不是答案;對弱模型,一點點回饋是救命的,太多是毒藥。

3.9 誠實的邊界

在拿這些數字去說服團隊之前,有四件事要講清楚:

  1. 模型不是最新的。 對照實驗用的是 Claude Sonnet 4.5、GPT-5.2。新模型的執行習慣可能不同,所以第 5 節第一步是「先量你自己的」。
  2. 任務是 Python bug 修復。 SWE-bench 的題目通常有清楚 issue、改動集中。新功能開發、跨模組重構、前端互動,執行的價值可能更高,目前沒有同等規模的數據。
  3. 每格 100 題。 「沒測到顯著差異」不等於「證明一樣好」。等價檢定(±5pp)只有 Codex Verified 這一格正式成立。
  4. 禁止多半是 prompt 軟限制。 硬限制那組結果方向相同,但只做了一格。

4. 決策框架:你的 agent 該有多少測試預算(約 700 字)

決策樹

你的 agent 每題平均跑幾次測試?(先量,見第 5 節)
├─ 幾乎不跑(<1 次)
│   └─ 限制沒意義 → 重點放在交卷後的獨立驗收
└─ 會跑(≥2 次)
    ├─ 用的是小模型/context ≤ 64K?
    │   └─ 是 → 配額 1 次 + 過濾測試輸出(只回失敗摘要)
    └─ 強模型
        ├─ 任務是局部 bug、有清楚重現條件?
        │   └─ 是 → 預算 0–1 次 + 改完跑 lint/型別 + CI 跑完整測試
        └─ 任務是新功能/跨模組/需求模糊?
            └─ 預算 2–3 次,只在後段跑 + CI 跑完整測試與回歸

所有分支的最後一步都一樣:驗收由 agent 沒挑過的測試決定。

場景案例

場景 A:雲端背景 agent 每天處理上百個小 issue

  • 環境:Claude Code headless,CI 上有完整測試
  • 需求:壓成本、壓排隊時間
  • 推薦:預算 0–1 次,交卷後由 CI 跑完整測試,失敗才把摘要丟回 agent 再試一輪
  • 理由:這就是論文 Claude Code 那一格的情境,token 可省五到六成;而且不用為每個 repo 準備 agent 專用的測試環境

場景 B:本地跑 30B 開源模型的內網 agent

  • 環境:單張 GPU、32K–64K context
  • 需求:資料不能出內網,準確度優先
  • 推薦:配額 1 次,測試輸出只回傳失敗的測試名稱與最後 30 行
  • 理由:OpenCode 的結果顯示小模型給 1 次配額最好,放任會讓輸出擠掉推理空間

場景 C:用 Codex 做日常修改,團隊抱怨額度不夠

  • 環境:Codex CLI,訂閱額度制
  • 需求:省額度
  • 推薦:先量測試次數;如果本來就少,限制省不了多少,應該從 context 管理和任務切分下手
  • 理由:論文中 Codex 禁止執行的 token 差異只有 −0.9% 到 −13.5%

場景 D:在大型前端專案加新功能

  • 環境:Claude Code+Playwright
  • 需求:不能弄壞既有流程
  • 推薦:預算 2–3 次,只在完成實作後跑;交卷後跑完整回歸
  • 理由:這類任務不在現有研究範圍,執行可能有價值;但回歸檢查必須在 agent 之外(見〈第二個需求〉那篇)

場景 E:平台團隊在設計內部 agent harness

  • 推薦:把「測試呼叫次數」「測試輸出 token」「最後一次執行在軌跡中的位置」變成每個任務的標準紀錄欄位
  • 理由:沒有這三個數字,你無法判斷任何一個旋鈕的效果

5. 實戰最佳實踐(約 550 字)

常見錯誤 正確做法
把「agent 有跑測試、全綠」當成品質訊號 只把 CI 跑的完整測試當驗收;agent 的綠燈當作參考
一開始就讓 agent 跑整套測試 先規劃、改完跑 lint/型別檢查,最後才跑一次測試
對所有 agent 用同一套限制 先量每個 agent 的平均執行次數,再決定要不要限制
只寫在 prompt 裡「不要跑太多測試」 用 hook 或 --disallowedTools 做硬限制
測試輸出原封不動回給 agent 只回失敗測試名稱、assert 訊息、最後幾十行
只看解題率比較設定 同時看 token、時間、環境維運成本

四個步驟

  1. 量:一週內記錄每個任務的測試呼叫次數與輸出長度。Claude Code 的 session transcript(JSONL)裡就有每次 Bash 呼叫,可以用腳本統計。
  2. 定預算:依第 4 節決策樹給一個數字,用下一節的 hook 落地。
  3. 把驗收搬出去:agent 交卷 → CI 跑完整測試+回歸 → 失敗才把摘要回給 agent。這一步讓「出題的人」和「答題的人」分開。
  4. 兩週後回看:比較預算前後的 token、時間、退回率。數字說話,不靠感覺。

**** 第三步其實才是重點。前兩步省的是錢,第三步修的是 81–100% 那個問題:只要 agent 自己決定什麼叫通過,它跑幾次都一樣。


6. 實作:Claude Code 測試預算 hook(約 400 字)


Claude Code 的 PreToolUse hook 會在每次工具呼叫前,把呼叫內容以 JSON 傳進 stdin。hook 以 exit code 2 結束時,該次呼叫會被擋下,stderr 的內容會回給 agent。我們用這個機制,讓同一個 session 的測試執行超過預算就擋下,並提示它改用推理。

.claude/hooks/test_budget.py:

#!/usr/bin/env python3
"""Claude Code PreToolUse hook:限制每個 session 的測試執行次數。"""
import json
import os
import re
import sys
from pathlib import Path

# 預算可用環境變數調整,預設 2 次
BUDGET = int(os.environ.get("AGENT_TEST_BUDGET", "2"))
# 視為「測試執行」的指令,依專案自行增減
TEST_PATTERN = re.compile(
    r"\b(pytest|py\.test|unittest|tox|nosetests|manage\.py\s+test"
    r"|npm\s+(run\s+)?test|pnpm\s+test|go\s+test|cargo\s+test)\b"
)

def main() -> None:
    event = json.load(sys.stdin)
    if event.get("tool_name") != "Bash":
        sys.exit(0)
    command = event.get("tool_input", {}).get("command", "")
    if not TEST_PATTERN.search(command):
        sys.exit(0)

    # 每個 session 一個計數檔,避免不同任務互相干擾
    session = event.get("session_id", "unknown")
    counter = Path(os.environ.get("TMPDIR", "/tmp")) / f"claude-test-budget-{session}.json"
    used = json.loads(counter.read_text())["used"] if counter.exists() else 0

    if used >= BUDGET:
        # exit 2:擋下這次呼叫,stderr 會回給 agent
        print(
            f"測試預算已用完({used}/{BUDGET})。請根據已讀過的程式碼推理修正,"
            "完成後直接交卷,CI 會跑完整測試。",
            file=sys.stderr,
        )
        sys.exit(2)

    counter.write_text(json.dumps({"used": used + 1}))
    sys.exit(0)

if __name__ == "__main__":
    main()

.claude/settings.json:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          { "type": "command", "command": "python3 .claude/hooks/test_budget.py" }
        ]
      }
    ]
  }
}

本機模擬測試結果:ls 放行;第 1、2 次 pytest 放行;第 3 次 npm test 被擋下並回傳提示。

注意:這是 regex 比對,agent 可以用 python -c 之類的方式繞過。它的定位是「預設行為的護欄」,不是安全邊界。真正的驗收仍在 CI。


7. 效能調優:讓剩下的那幾次跑得值得(約 300 字)

  1. 改完先跑快速檢查:仿照 harness 研究的設計,改完 Python 檔就跑 ruff check 或 python -m py_compile,Node 專案跑 tsc --noEmit。這些檢查秒級完成、輸出短,能擋掉大部分低級錯誤,不佔測試預算。
  2. 只跑相關測試,但驗收跑全部:agent 的那一兩次用 pytest tests/test_x.py -x -q;CI 跑全部。
  3. 壓縮輸出:pytest -q --tb=short、--maxfail=1。對小模型尤其重要。
  4. 把執行放後段:在 CLAUDE.md/AGENTS.md 寫明「先讀、先規劃、改完再驗證」。論文的軌跡分析顯示後段執行和成功的關聯較高。
  5. 失敗回饋要短:CI 失敗回給 agent 時,只給失敗測試名稱與 assert 訊息,不要貼整份 log。

8. 工具與資源(約 250 字)

工具/資源 說明
To Run or Not to Run 實驗框架 論文的四種執行模式實作,可在自己的題目上重跑
onlycodes execute_code 消融研究的程式碼與資料
Claude Code hooks/--disallowedTools 在工具呼叫前擋下或限制指令
SWE-bench 官方評測 harness,可拿來建立內部基準
Ruff 秒級的 Python lint,適合當「改完就跑」的檢查

9. 總結與展望(約 400 字)

一表看完

情境 測試預算 驗收
強模型+局部 bug 0–1 次 CI 完整測試
強模型+新功能/重構 2–3 次,後段 CI 完整測試+回歸
小模型/小 context 1 次+壓縮輸出 CI 完整測試
Agent 本來就少跑 不用限制 CI 完整測試

給不同讀者

  • 工程師:下週先量。打開 session 紀錄,數一數 agent 每題跑了幾次測試。
  • 技術主管:把「測試次數」「測試輸出 token」加進 agent 用量報表,它很可能是最好壓的一塊。
  • 決策者:agent 回報「測試全過」不是驗收。驗收流程要在 agent 之外。

未來趨勢

  1. 自適應執行:論文作者把「adaptive execution allocation」列為下一步,讓 agent 自己判斷這題值不值得跑。
  2. 驗證與實作分離:越來越多 harness 把驗證交給另一個角色或 CI,而不是同一個 agent。
  3. 成本成為一級指標:三份研究都把成本和準確度並列報告,benchmark 只報解題率的時代在結束。

今天就能開始的四步

  1. 統計過去一週 agent 每題的測試呼叫次數
  2. 裝上測試預算 hook,預算設 2
  3. 確認 CI 會在 agent 交卷後跑完整測試
  4. 兩週後比較 token、時間與退回率

金句

「agent 跑的測試,多半是在確認它已經相信的答案。」

「出題的和答題的是同一個人,綠燈就只是自洽。」

「限制執行之前先量:你省不下本來就沒花的錢。」


延伸思考

  1. 你的 agent 上一次「說測試全過但其實壞了」,它跑的是哪一組測試?那組測試是誰挑的?
  2. 如果明天把 agent 的測試預算設為 1 次,你的 CI 接得住驗收的責任嗎?
  3. 在你的團隊裡,哪一類任務是真的需要 agent 邊跑邊改,而不是想清楚再改?

FAQ

Q1:這是不是說 coding agent 不該跑測試?
不是。研究顯示執行的價值集中在少數題目上,而且對小模型很重要。結論是「別當預設、要給預算」,不是「關掉」。

Q2:實驗用的模型都舊了,結論還適用嗎?
方向大概率適用,數字不一定。新模型的執行習慣會變,這也是為什麼建議先量自己的 agent,而不是直接套用 56–62%。

Q3:禁止執行只寫在 prompt,agent 不會偷跑嗎?
會偶爾嘗試。作者另做了一組用 --disallowedTools 的硬限制,結果方向相同(−4pp、省 62% token)。

Q4:為什麼 Codex 限制後幾乎沒省?
因為當時那個 Codex 設定本來就很少跑測試。沒有花的錢省不下來。

Q5:81–100% 自我驗證通過是什麼意思?
在兩種模式都失敗的題目裡,Claude Code 有 81.2%、Codex 有 100% 至少跑過一次自己的驗證並看到通過,但官方測試是失敗的。

Q6:這跟「agent 寫的測試品質差」是同一件事嗎?
相關但不同。那是測試寫得好不好;這是誰決定跑哪些測試。就算測試本身寫得很好,agent 只挑自己認為相關的跑,還是會漏掉。

Q7:新功能開發也適用嗎?
目前沒有同規模數據。建議給較多預算、只在後段跑,並把回歸檢查放在 agent 之外。

Q8:測試預算 hook 安全嗎?
它是預設行為的護欄,不是安全邊界。agent 可以用別的指令繞過 regex,真正的把關仍是 CI。

Q9:除了測試,lint 也要限制嗎?
不用。lint、型別檢查、語法檢查秒級完成、輸出短,反而建議改完就跑,讓它擋掉低級錯誤。

Q10:小模型為什麼反而需要配額?
它需要一點回饋來修正,但 context 小,大量測試輸出會擠掉推理空間。研究中 32B 模型放任時,交得出非空 patch 的比例從 74% 掉到 50%。


參考資料

論文

  • Lin, Z., Zhu, J., Zhou, M., Wang, X., Sun, Z., Yang, R., Lo, D., & Li, L. (2026). To Run or Not to Run: Analyzing the Cost-Effectiveness of Code Execution in LLM-Based Program Repair. ISSTA 2026. https://arxiv.org/abs/2606.26978
  • Yang, H., Yu, Q., & Desell, T. (2026). When Does Restricting a Coding Agent to execute_code Help? A Regime × Agent-Design Ablation. KDD 2026 SE 3.0 Workshop. https://arxiv.org/abs/2607.10569
  • Fan, R.-Z., Zhang, Z., et al. (2026). An Empirical Study of Harness Design for Coding Agents. https://arxiv.org/abs/2609.20804

GitHub

會議


文章裡這些把關做法,要在一個團隊裡真的落地、而不是只有你一個人在用,通常卡在流程與共識。我把這部分整理成企業內訓:
coding agent 導入與治理 — 企業內訓與顧問 →

發表迴響

%d 位部落客按了讚: