MengNotes
部落格標籤關於
首頁/部落格/模型越強,Skill 反而應該越薄:AI Coding 工作流的減法思考
AI

模型越強,Skill 反而應該越薄:AI Coding 工作流的減法思考

完整的 AI Coding 工作流能降低失誤,卻也可能讓小任務承擔過高的流程成本。這篇從 Superpowers 與 Matt Pocock 的 Skills 出發,討論如何讓 Agent 的控制方式配合任務大小與風險。

2026年7月13日3,579 字18 分鐘閱讀
#ai-coding#agent-skills#developer-workflow#prompt-engineering#agent-engineering

完整流程很省心,也真的很慢

一開始使用 Superpowers 時,我真的覺得很省事。

它會先幫你釐清需求、討論設計、產生實作計畫,再依照計畫寫程式、跑測試、做 code review。很多以前需要自己提醒 AI 的事情,它都已經包進一套完整流程裡。

對剛開始使用 Coding Agent 的人來說,這種體驗很有安全感。你不用一直想下一步該下什麼指令,也比較不容易遇到 AI 沒搞懂需求,就直接開始亂改程式的情況。

用了一段時間後,另一個問題浮現了:整套流程真的很慢。慢的不是模型產生文字或程式碼的速度,而是需求確認、設計、規格、任務拆解和多輪 review 全部疊在一起。對大型任務來說,這些步驟各有作用;放到幾分鐘能完成的小修改上,流程成本反而可能超過實作本身。

有些修改其實非常明確,可能只是調整一個條件、補一段 error handling、修改一個 SQL 欄位,或修正幾行程式碼。正常情況下,Agent 找到位置、完成修改、跑過相關測試,幾分鐘就能結束。

套用完整工作流後,Agent 可能會先重新確認需求,再討論設計、產生規格、拆成好幾個 implementation tasks,接著逐項執行、驗證,最後再做多輪 review。每個步驟單獨看都合理,疊在小任務上卻顯得太重。

這讓我開始思考:

AI Coding 工作流的目標,究竟是讓每一個任務都走完一套完整流程,還是讓 Agent 根據任務的大小與風險,選擇剛剛好的流程?

流程成本要跟任務風險相稱

Superpowers 將自己定位為一套完整的軟體開發方法,包含需求討論、設計、規劃、TDD、分工執行、review 與分支收尾。面對架構修改、跨服務變更或長時間自主執行,這套流程能提早暴露錯誤方向。

例如:

  • 開發一個全新的功能
  • 修改系統架構
  • 涉及多個服務
  • 進行資料 migration
  • Agent 需要自主執行很長一段時間

這些情況下,先討論清楚、再規劃、分階段驗證,可以避免 Agent 做到一半才發現方向錯了。

小任務只需要快速理解、精準修改與必要驗證;方向清楚但牽涉數個模組時,可以加一份簡短計畫;需求模糊、範圍廣或風險高,才值得啟動完整流程。

Matt Pocock 的 Skill,價值不只在比較短

後來我開始閱讀 Matt Pocock 公開的 Skills。

Matt Pocock 將自己的 Skills 描述為小型、容易調整,而且可以互相組合。提問、除錯、TDD 和 code review 分別由不同 Skill 處理,不必塞進同一份工作流。

例如,需求還不清楚時,可以使用負責提問和釐清的 Skill;遇到難解的錯誤時,使用 diagnosing-bugs;需要測試驅動開發時,使用 tdd;準備檢查程式碼時,再使用 code-review。

這些工程紀律都還在,只是可以按照任務選擇,不必每次同時出現。

從這種設計延伸到我的使用方式,就是先判斷任務,再決定要加入哪些工程紀律。幾分鐘的小修改可以直接修改並驗證;任務變複雜後,再逐步加入研究、規劃、TDD 和 review。

Skill 拆小後,才知道該改哪裡

當一個 Skill 同時負責需求分析、設計、實作、測試、review 和交付時,行為出了問題,很難確認該修改哪個部分。

  • 除錯流程有問題,就改 diagnosing-bugs
  • 測試方式有問題,就改 tdd
  • code review 太冗長,就調整 code-review
  • 需求尚未釐清,再啟動訪談或規格流程

能力拆小後,問題比較容易定位,使用者也能依照任務情況,決定要把流程開到什麼程度。

Skill 寫得短,不代表內容比較隨便

Skill 可以保持精簡,是因為資訊不必全部擠在同一個地方。

在 Matt 現行的分類裡,model-invoked Skill 需要留下可供模型判斷的 description,因此會增加每輪的 context load;user-invoked Skill 則以 disable-model-invocation: true 關閉自動觸發。

同一份文件也使用 progressive disclosure:每次執行都需要的步驟留在 Skill 裡,只有特定分支才需要的規則放進參考文件,等真的用到時再讀取。

其他 Agent 產品的實作可能不同,但設計問題相同:哪些資訊真的需要一直留在模型眼前?不是所有重要內容都要常駐,規則寫得更多,也不保證 Agent 更可靠。

每一段提示詞,都應該證明自己為什麼需要在現在被模型看到。

模型升級後,舊規則要重新驗證

LLM 的能力一直在變。新模型發布後,理解程式碼、搜尋專案、規劃修改、呼叫工具與驗證結果的能力,都可能比上一代更好。

過去必須寫進 AGENTS.md 或 Skill 的提醒,到了新模型上,可能已經成為它原本就會做的事。例如:

  • 先閱讀相關程式碼
  • 修改前先理解現有架構
  • 找出根因,不只修表面問題
  • 完成後執行測試
  • 回報修改了哪些檔案
  • 資訊不足時先搜尋專案

這些指令在舊模型上可能有幫助。新模型如果原本就會做,繼續保留不一定能提升品質,反而可能把幾分鐘能完成的任務推進完整的分析、規劃和回報流程。

我的判斷是,模型升級會讓一部分舊規則失去作用。Skill 仍然有用,只是某些通用能力可能已被模型吸收;是否真的能刪,仍要用實際任務比較。

Prompt 也會累積技術債

每次 Agent 犯錯時,我們很自然會多加一條規則。

上次忘記跑測試,就規定每次都跑完整測試;上次沒搞懂需求,就要求所有修改都先進行訪談;上次改壞架構,就要求每次都先產生設計文件;上次漏掉問題,就再加一輪 review。

每一條規則都有合理的來歷,但我們通常只會增加,很少回頭刪除。

Matt 把這種只加不刪的陳舊規則稱為 sediment:舊指令一層層沉積,最後留下重複、過時,甚至互相衝突的要求。Prompt 和程式碼一樣會累積技術債,也需要定期重構。

用移除測試找出 no-op

很多提示詞看起來都很正確:

  • 請仔細思考
  • 請遵循最佳實踐
  • 請確保程式碼品質
  • 請完整分析問題
  • 完成後請確認沒有遺漏

維護 Skill 時,我會直接做一個測試:拿掉這句話,模型的行為有沒有變差?

Matt 將不會改變模型預設行為的指令稱為 no-op。像「請仔細思考」或「請確保程式碼品質」這類句子,如果移除後結果沒有差別,留下來只會增加 context 和維護成本。

真正有價值的規則通常更具體:

  • 修改後必須執行哪一條測試指令
  • 哪些模組不能修改
  • 哪些 API 必須維持相容
  • 哪些 edge cases 一定要覆蓋
  • 必須提供哪些驗證結果
  • 什麼情況下才可以把任務標成完成

「請做好」只是期待。「必須通過這三項測試」才是可以驗證的要求。

哪些內容不容易被新模型取代?

模型越來越強後,我認為還是有三類資訊值得長期保留。

第一類:模型不可能自己知道的專案資訊

例如:

  • 專案真正的測試與部署指令
  • 公司內部的業務名詞
  • 哪份文件才是正確來源
  • 各個模組實際負責什麼
  • 程式碼裡看不出來的環境限制

模型無法從公開資訊或程式碼自行推知公司內部規則,這些內容仍然需要由團隊明確提供。

第二類:不能讓模型自己決定的邊界

例如:

  • 不得修改公開 API
  • 必須維持 backward compatibility
  • 不可以新增 dependency
  • 只能修改指定的服務
  • Production 資料不能拿來本機測試

這些是團隊的決策。模型再強,也沒有權力替團隊改變限制。

第三類:可以明確驗證的完成條件

例如:

  • 哪些測試一定要通過
  • 哪些情境必須驗證
  • 要提供哪些 evidence
  • 哪些既有行為不能改變
  • 什麼結果才算真正完成

這類規則通常比冗長的流程更有效。它不需要規定 Agent 每一步怎麼走,但會清楚告訴它最後必須交出什麼結果。

為上一代模型準備的護欄,可能成為下一代模型的限制

有些 Skill 的內容,是在修補特定模型的弱點。

假設舊模型不擅長找測試檔案,我們可能會寫下一套非常詳細的搜尋步驟。換成新模型後,它已經可以自己找到更適合的測試位置,舊流程卻仍然強迫它照固定步驟搜尋。這時原本的護欄就可能變成限制。

所以每次更換主要模型後,都應該重新檢查原本的 Prompt 和 Skills:

  1. 先不載入額外規則,觀察新模型自然會怎麼做
  2. 再加入原本的 AGENTS.md 和 Skills
  3. 比較結果是否真的變好
  4. 找出哪些規則只是在重複模型原本的能力
  5. 刪除沒有改善結果,卻增加流程的內容
  6. 把低頻資訊改成需要時才載入
  7. 保留專案事實、工程邊界與完成條件

這就像軟體升級後重新檢查以前的 workaround。底層問題已經不存在時,補丁不該永遠留著。

Agent 規劃太多,問題未必出在 Skill

同一份 Skill 放進不同模型、Agent 產品或版本,可能出現完全不同的結果。觸發方式、context 載入、壓縮機制和工具權限都會影響行為。

一個 Coding Agent 的行為,通常同時受到幾個層次影響:

  • 模型本身
  • Agent 產品內建的系統指令
  • 專案中的 AGENTS.md
  • Skill 的描述與內容
  • plugin 或 hook 自動注入的流程
  • Agent 可以使用的工具
  • context 壓縮方式
  • subagent 收到的任務資訊

因此,看到 Agent 對小修改產生龐大計畫時,先確認是哪一層下了這個要求。可能是模型偏好先規劃、系統指令要求列計畫、AGENTS.md 規定先寫規格、Skill 的觸發範圍太廣,也可能是 plugin 在 session 開始時自動注入完整流程。

表面上都是「Agent 規劃太多」,修正方式卻完全不同。

讀源碼時,只追一條行為路徑

讀源碼時,我只先追一條路徑:從輸入任務,到 Agent 載入 Skill、選擇工具並執行,中間經過哪些判斷?接著確認:

  • Agent 會去哪裡找 Skill?
  • 哪些內容會一直放在 context 裡?
  • Skill 是手動啟動,還是模型自動選擇?
  • 同名 Skill 發生衝突時,哪一個優先?
  • 對話被壓縮後,哪些規則還會留下?
  • subagent 拿到的是完整任務,還是摘要後的版本?
  • Skill 要求的工具,在目前環境中是否真的存在?

知道這些之後,Agent 做錯事時,才知道應該修改哪一層。否則我們很容易一直改 Prompt,實際問題卻是 Skill 沒有被載入,或者工具沒有相關權限。

把控制放在適合的層

Agent 的行為由多個層次共同決定。專案資訊可以放在 AGENTS.md,特定流程放進 Skill,危險操作交給權限限制,結果則由測試、lint、CI 和完成條件驗證。

例如:

  • 用 AGENTS.md 保存每次都需要的專案資訊
  • 用 Skill 封裝特定任務才需要的流程
  • 用 Skill description 控制觸發時機
  • 用 reference 保存低頻細節
  • 用權限限制危險操作
  • 用測試和 lint 驗證結果
  • 用完成條件決定任務能不能結束
  • 用 hook 處理每次都必須自動執行的動作

如果只是怕 Agent 忘記跑測試,直接提供一個清楚的驗證指令,甚至把檢查放進 CI,通常比三段提醒可靠。擔心 Agent 修改不該碰的地方,也可以用權限、模組邊界或 review gate 處理。

Prompt 只是其中一層。

從 Prompt Engineering 走向 Agent Engineering

現在的 Coding Agent 由模型、context、tools、Skills、plugins、hooks、subagents 和外部系統共同組成。使用者需要決定哪些資訊每次都要提供、哪些能力按需載入、哪些邊界交由系統限制,以及哪些結果必須透過工具驗證。

我會把這種工作稱為 Agent Engineering:把整套 Agent 視為可觀察、測試、調整與除錯的系統。

我會如何重新整理自己的 Skills

接下來,我會用五個問題整理自己的 AGENTS.md 和 Skills:

  • 這個任務真的需要完整流程嗎?
  • 這段資訊是否每一輪都必須出現在 context?
  • 這個 Skill 是否只處理一個清楚的問題?
  • 完成條件能否由測試、lint 或其他工具驗證?
  • 換模型後,舊規則仍然會改善結果嗎?

完整流程和可組合 Skills 各有適用情境。現在我會在每次任務前再問三個問題:

這個任務需要多少流程?

這個模型還需要多少提醒?

這條規則,現在是否仍然值得存在?

好的 Skill,應該讓 Agent 在正確的時候做剛剛好的事。

靈感與研究來源

  1. Threads 靈感貼文
  2. YouTube 影片
  3. Matt Pocock — Skills For Real Engineers
  4. Matt Pocock — writing-great-skills
  5. Superpowers

目錄

完整流程很省心,也真的很慢流程成本要跟任務風險相稱Matt Pocock 的 Skill,價值不只在比較短Skill 拆小後,才知道該改哪裡Skill 寫得短,不代表內容比較隨便模型升級後,舊規則要重新驗證Prompt 也會累積技術債用移除測試找出 no-op哪些內容不容易被新模型取代?第一類:模型不可能自己知道的專案資訊第二類:不能讓模型自己決定的邊界第三類:可以明確驗證的完成條件為上一代模型準備的護欄,可能成為下一代模型的限制Agent 規劃太多,問題未必出在 Skill讀源碼時,只追一條行為路徑把控制放在適合的層從 Prompt Engineering 走向 Agent Engineering我會如何重新整理自己的 Skills靈感與研究來源
← 返回所有文章

© 2024-2026 MengNotes | 版權所有