D4:執行評估、錯誤分析與調校
D4-O1 定義成功標準與評估訊號
評估先問使用者要得到什麼,再選能觀察它的訊號。匯出案例的成功不是「代理寫了程式」,而是讀取匯出檔案的人能取得正確欄位,且原有格式沒有被破壞。測試通過率、耗時與成本有助於比較方案,但都不能替代這個行為定義。
把成果、限制與證據分開
| 類型 | 案例 | 判讀方式 |
|---|---|---|
| 功能結果 | 含逗號、引號與換行的資料可正確還原 | 對照輸入與預期欄位,不只檢查檔案存在 |
| 操作限制 | 不修改資料庫,不接觸正式資料 | 檢查差異與工具操作紀錄 |
| 品質判斷 | 修正是否容易理解與維護 | 審查者依事先約定的準則評估 |
| 效率訊號 | 同一工作量的時間與工具成本 | 同時確認正確性沒有退步 |
Code scanning 分析程式中的潛在弱點;secret scanning 尋找支援類型的機密;dependency review 協助檢查依賴變更。它們處理的問題不同,掃描無告警也不能證明匯出規格已滿足。審查報告應說明用了哪些工具與設定,而不是把任何一個綠勾概括為「安全」。
GitHub status checks 是傳遞檢查狀態的機制,是否阻擋合併還取決於分支規則。官方文件也說明,被跳過的 job 可能回報 success;所以必須確認預期的工作確實執行,且結果對應目前提交。不要把「可合併」與「所有驗收情境都測過」混為一談。
判讀示例:同一份 PR 的四種證據
假設 CSV 修正已產生差異,交付包包含以下紀錄。表格中的結果是原創教學資料,不是本專案的實際掃描或測試報告。
| 證據 | 觀察 | 可以支持什麼 | 還缺什麼 |
|---|---|---|---|
| 格式測試 | 逗號與引號通過;換行案例未執行 | 受測版本的兩種輸入符合斷言 | 換行案例及其他約定行為的結果 |
| Code scanning | 指定分析設定未產生告警 | 該次分析範圍內未報出弱點 | 分析是否涵蓋修改語言、檔案與版本 |
| Secret scanning | 啟用的掃描未報出機密 | 該次掃描未偵測到支援的機密模式 | 資料處理是否合規、其他機密型態是否涵蓋 |
| Dependency review | 依賴差異沒有已知弱點告警 | 被辨識的依賴變更沒有該類告警 | 自寫程式的弱點與匯出功能正確性 |
這些證據互補,不能互相代替。換行未測不能由安全掃描補成通過;格式測試通過也不能撤銷掃描發現的弱點。若掃描出現告警,先定位規則、路徑、適用版本與可到達的程式流程,再決定修正或依政策處理;不能只因代理說「誤報」就忽略。
Status check 的綠燈還要追到實際 job 與步驟。官方文件描述被跳過的 job 可回報成功,但整個 workflow 未觸發、或 required check 一直等待,是不同情況。讀報告時應寫「換行測試未執行」,而不是把檢查列的成功概括為「全部測試通過」。
產物練習: 為上述 PR 寫兩句交付判斷。第一句指出已驗證的輸入與版本;第二句指出換行缺口及補驗方式。參考回答:「此受測版本的逗號與引號案例通過。換行案例未執行,需在同一交付版本補跑,現有掃描結果不能代替它。」若 PR 又增加修改,原證據的適用性也要重新核對。
判斷練習: 改版後測試通過率從 90% 升到 100%,但失敗的換行案例被排除。代理品質改善了嗎?
解析: 沒有足夠證據。分母改變了,使用者需要的換行行為反而失去檢查。應用相同案例集合比較前後,另列新增或移除案例的理由;不能以跳過檢查來達成品質目標。
來源:Status checks(GH-DOC-17);Code scanning、Secret scanning、Dependency review(GH-DOC-18、GH-DOC-19、GH-DOC-20)。2026-09-30 核對;證據表與交付練習為教學設計。
D4-O2 分析代理失敗並識別根因
先保存可重跑的失敗輸入與版本,再整理時間線:代理讀了什麼、選擇了哪個工具、工具回傳什麼,以及哪個觀察首次偏離預期。最後才提出根因假設。若一開始就認定「模型不夠聰明」,後續很容易只尋找支持這個判斷的訊息。
用能區分原因的實驗縮小範圍
| 候選原因 | 匯出案例的症狀 | 能區分它的檢查 |
|---|---|---|
| 推理錯誤 | 認為只用逗號分隔就能處理所有欄位 | 對照明確規格與失敗輸入 |
| 工具誤用 | 測試指令跑到另一個模組 | 核對參數、工作目錄與實際執行的測試 |
| 脈絡問題 | 沿用另一個分支的格式約定 | 比對來源文件、commit 與 checkpoint |
| 環境問題 | runner 缺套件或無法存取測試服務 | 在相同版本下補齊環境再重跑 |
這些分類可以同時出現,不能只依錯誤字串硬選一類。缺少套件可能源於安裝步驟被跳過,也可能源於代理誤刪依賴宣告。找出可修正的因果鏈,才比貼上分類標籤更有用。
例如本機正常、runner 失敗時,先固定程式版本,只修正缺少的執行階段。如果同一測試恢復,就支持環境假設;若仍失敗,應撤回「只缺 SDK」的結論,繼續檢查其他差異。多跑幾次偶然通過,不能證明根因已消失。
診斷示例:測試通過,產物卻仍錯誤
假設代理說「CSV 測試通過」,但審查者用含換行的資料仍看到錯誤。先不要加長提示或換模型,先保存下面這份時間線。任務與步驟名稱是示意,不是任何產品固定的日誌格式。
任務:CSV-LF-01
步驟 1:讀取目前格式契約。
要求保留欄位內換行。
步驟 2:代理在另一個模組測試。
命令結束碼為 0。
步驟 3:代理摘要為
「CSV 測試通過」。
步驟 4:審查者在匯出模組
測試換行,斷言失敗。
步驟 2 與 3 的落差支持「測試工具使用或結果解讀錯誤」,尚不能解釋匯出程式如何破壞換行。這裡有兩條需要分開查的因果鏈:為什麼錯誤沒有被代理發現,以及程式為什麼產生錯誤輸出。
保持程式版本與輸入固定,改在正確目錄重跑原本應執行的案例。若能重現格式錯誤,就證明先前的綠燈沒有驗證這項需求;接著讀取匯出實作,找出造成錯誤輸出的處理步驟。若正確案例反而通過,應撤回「目前程式仍有相同缺陷」的假設,查核審查者使用的版本與輸入差異。
產物練習: 在診斷紀錄分別填「已觀察」「候選原因」「區分實驗」「撤回條件」。本例可寫:已觀察到測試目錄不符;候選原因是工具誤用;區分實驗是在同一版本的匯出模組執行相同輸入;若原紀錄其實確實涵蓋該模組,便不能再以目錄錯誤解釋漏測。不要把尚未讀過的序列化程式直接列為已確認根因。
判斷練習: 日誌最後一行是「PR 建立失敗」,應先改 PR 內容嗎?
解析: 先查看實際工具回應,分清驗證失敗、網路逾時與權限拒絕。標題格式錯誤才需要調整內容;身分不具權限則需要走授權處理。症狀文字沒有提供足夠證據時,把原因標為未知,不用推測補齊。
技能範圍:GH600-SG;產品診斷延伸閱讀:GH-DOC-22。代理產生的審查意見(GH-DOC-24)同樣是待查證線索,不會自動成為根因。
D4-O3 依評估結果調整代理行為
調校應對準已確認的失敗機制。代理漏讀格式要求,可以改善任務輸入或文件查找;工具參數反覆錯誤,可以改善工具契約;環境缺依賴,應修正環境準備。把每個問題都改寫成更長的 prompt,會讓系統愈來愈複雜,卻不一定修到原因。
建立可比較的基線
保留調整前的程式、指令、工具設定與 evaluation set,再選一個主要變因修改。匯出案例可先加入「修改前讀取格式契約並列出邊界案例」的指令,觀察是否降低漏測,而不是同時換模型、換工具與換測試資料。
評估集合應包含已知失敗案例,也包含原本正常的情境與尚未用來調校的代表性案例。只測剛修好的逗號案例,可能看不見空值或引號處理退步。若代理輸出具有變動性,可在相同條件下重複觀察,記錄每次結果與失敗分布;不要只保留最好的一次。
提升通過率之外,也要看是否增加權限、人工介入、時間或成本。若方案 A 每次都要求人替它做關鍵判斷,它的成功率不能直接與自主完成同一工作的方案 B 比較。評估應保留任務條件與人工協助程度。
對照示例:指令調整改善了什麼
假設已確認代理常在未讀格式契約前修改程式。保留原指令為 A,只在 B 加入「先引用格式契約,再列出邊界案例」,其餘模型、工具、權限、任務資料與時間預算保持一致。每次執行都從相同程式基底與乾淨任務狀態開始,避免 B 直接承接 A 已修好的產物。
以下是教學用對照表,不能當成實際改善成果或統計結論:
| 核對項目 | A 的示意結果 | B 的示意結果 | 判讀 |
|---|---|---|---|
| 已知的逗號案例 | 通過 | 通過 | 單看這題無法區分方案 |
| 已知的引號案例 | 失敗 | 通過 | 支持特定失敗有所改善 |
| 未用於調校的換行案例 | 失敗 | 失敗 | 尚未證明能處理這項需求 |
| 人工協助 | 無 | 人指出換行位置 | 比較條件不一致,需另記並重做公平對照 |
| 執行時間與工具使用 | 保留完整紀錄 | 保留完整紀錄 | 與正確性及人工成本一起評估 |
若 B 仍漏掉換行,不應先宣稱整體能力提升。先看它是否讀到契約、是否列出該案例、是否真的執行測試,再針對已確認的失敗調整。若人工介入不同,就不能把最後通過率全歸功於新指令。
未參與調校的案例用來檢查遷移能力;一旦看過它的失敗並據此改指令,它就成為調校資料,後續仍可作回歸測試,但不能繼續當作未見案例。測試集合也應有版本,保留每次結果,避免反覆挑選最好的一次或偷偷縮小分母。
產物練習: 寫一份調校決策,列出唯一改動、固定條件、每次結果、人工協助及採用/撤回理由。若新指令使原本正常的空值案例退步,就依事先約定的門檻停止採用並恢復舊指令;設定恢復不會自動還原已經改動的程式與外部資料,這些產物仍須分別核對。
判斷練習: 增加幾段提示後,已知題庫全部答對,可以宣稱泛化能力提升嗎?
解析: 先確認是否只是記住固定案例。用未參與調校、但仍代表相同需求的資料檢查;若新資料依舊失敗,只能說特定案例改善。對部署中的代理,還要訂出回復舊設定的條件,避免把調校變成不可追溯的連續試錯。
技能範圍:GH600-SG。基線與對照實驗是本書採用的工程方法,並非官方保證的分數提升程序。