Agent 已經能做出第一版,這門課還要學什麼?

課程簡介|AI Agent 開發與維運

Vibe coding 徹底改變了生態:從 Agent 怎麼工作、認知債怎麼累積,到為什麼要學軟體工程。
作者
單位

黃俊銘

藍震有限公司

投影片

線上檢視(PowerPoint)

Vibe coding 徹底改變生態

「幫我做一個簡易的地震監測系統」——現在對 agent 講一句話, 它就可以做出一個能動的第一版。

一句話讓 agent 做出簡易地震監測系統

所以這堂課不是要教大家怎麼讓 AI 多寫一點程式, 因為現在最便宜的,可能已經是「做出第一版」。 真正昂貴的是:我們知不知道它做了什麼、為什麼這樣做、 結果能不能相信,以及下一次改動時還能不能控制它。

Coding 新範式

以前學 Coding 要從語法開始學,上課大部分時間都在找錯字。 後來 IDE 大幅解決了打字問題,但環境設定還是會勸退很多人。 從打孔卡、終端機到 IDE,學習的時間都花在瑣碎的事情上,而不是邏輯思考。

打孔卡時代

終端機時代

IDE 時代

然後 AI Coding 出現了。2021 年,GitHub Copilot 第一代只能補齊一小段程式; 2024 年 10 月,Claude Computer Use 給 LLM 雙手操控對話外的螢幕; 2025 年 2 月,Claude Code CLI 開始跑迴圈自主寫程式。 現在使用者不用看到程式碼就可以改寫程式,大幅降低門檻。

2021:GitHub Copilot 第一代

2024/10:Claude Computer Use

2025/02:Claude Code CLI

AI FOMO

AI 變得越來越厲害,新名詞一直出現:Prompt、Context、Harness、Loop、Graph…… 人們開始出現技術焦慮,也就是所謂的 FOMO(fear of missing out)。 不過在研討會上,每個講者提出的新技巧都很類似——這幾乎成為一種必然。

AI 新名詞不斷出現,技術焦慮也隨之而來

為什麼會如此相似?

由於研究 AI 的人大部分都是軟體工程師, 就會想把自己的工作流程套用到 Agent 上做實驗。 大家面對的是同一個新模型的新特性,加上相似的軟體開發流程—— 所以工程師們在 Agent 上玩出來的 vibe coding 技巧, 大部分是從軟體工程的思維轉化而來。

相似的軟體開發流程:DevOps 開發與維運循環

參考:What is DevOps?

這就是這門課的出發點:與其追逐每一個新名詞, 不如把底下那套共同的軟體工程思維學起來。

第一部分:Agent 簡介

LLM 是個很會接龍的程式

LLM 是個很會接龍的程式:給他對應的上下文,引導模型接龍出你要的東西。 Prompt/context engineering,就是給他合適的內容。

LLM 依下一個 token 的機率分佈與解碼演算法產生輸出

Agent 小轉變帶來新的突破

過去我們使用 AI 輔助寫程式的時候, 最初需要把程式段落貼給 AI,得到解答後再貼回來執行。 再來 context window 變大後就可以吃整個檔案,IDE 開始預設帶入當前檔案, 所以人就不用去找他在整個檔案的哪個位置。 後來 agent 尋找程式碼片段的能力增強了以後, 連程式碼本身在哪個檔案內都不用管了。

Prompt 時期、Context 時期到 Harness 時期

這個技術上雖然沒有很難實現,不過卻有很大的影響: 程式庫對人開始變得抽象,到了不用看到程式碼也可以開發的階段。

第一階段來回奔波的那個人就是你——你就是那個迴圈; 到第三階段,迴圈已經整個搬進了 agent。

Agentic loop

Agent 有了自己探索的能力後,就可以先假設需要的資料在哪, 執行工具獲取後再判斷下一步——這就變成一個可以循環的迴圈。

Agentic loop:取得脈絡、行動、驗證結果,一圈一圈跑

它可以使用工具,所以不只是回答問題,還可以實際修改系統; 它可以看到執行結果,所以能根據錯誤或測試輸出繼續修正。 但它每一步的判斷都依賴當下取得的 context: 如果背景不完整、工具回傳的訊息不清楚,或前面形成了錯誤假設, 它就可能一路往錯誤方向前進。

所以模型能力固然重要,但真正決定 Agent 能不能可靠工作的,還包括: 它拿到什麼脈絡、可以使用哪些工具、擁有哪些權限、 執行後能看到什麼回饋、工作流程有沒有設計檢查點。

Agent 分工

當工作變得複雜,就會用多個 Agent 分工合作,達到更高的效率。 這個派工的形式,就變成一種 Agent 之間的流程圖。

多個 Agent 分工合作的派工流程

Agent 怕誤刪,導致程式庫膨脹

由於 Agent 誤刪事件頻傳,後來被調整成保守的做法: 害怕誤刪造成損失,傾向以新增、疊加的方式寫程式, 而不是修改或刪除既有的東西。

造成的結果:功能相似的片段散落各地、已棄用的程式碼沒有被清除, 程式庫快速膨脹。

AI 通靈很強的代價

現在一線模型的通靈能力很強,可以讀得懂字面以下的意思, 就變成可以補齊很多原本沒講的東西。 但是反過來說,很多他猜的東西是大部分的情況, 有時候自己的情況就不是這麼大部分—— 必然一定會有幾個條件不是跟大家一樣,這時候模型就會猜錯、越來越偏。

自己沒有開發經驗的話,也不會知道要給出什麼關鍵資訊。 就像 Andrew Ng 說的:the AI doesn’t know what it doesn’t know。

例如使用者沒有提的話,AI 會給雲端方案;實際上可能是地端更合適。

AI 因上下文不同而建議雲端或地端方案

AI 的視野有限

當程式庫膨脹到塞不下 context window 後,Agent 其實也很難知道所有的事情: 缺少對應的資訊就會做出不準確的判斷,對話壓縮也會慢慢損失訊息。

程式庫膨脹到塞不下 context window,Agent 一次只看得到一部分 甚至有些事情 AI 沒有權限、也沒有能力知道所有情況, 就沒有辦法像真的工程師給出準確的建議。

所以 vibe coding 卡住的人,大多是對軟體開發的知識比較模糊, 不知道哪些關鍵的資訊需要提供出來給模型——而不是少了 AI 的技巧或工具。

第二部分:認知模型

認知債累積

如果給 Agent 一直做都沒檢視,黑箱的部分會越來越大。 拿地震監測系統當例子:從測站感測器、資料接收 API、事件判定, 一路到地圖前端、通報服務、告警推播—— 一開始還能理解,後面 Agent 做太多跟不上,實際跟想像會越差越遠。

一直做都沒檢視,黑箱的部分會越來越大

Agent 幾分鐘內可以修改十幾個檔案,但人未必能同步理解。 技術債是系統越來越難改;認知債是我們越來越不知道它為什麼能動。

認知債也可以欠,但不能欠太多; 欠太多時,專案出問題就不知道怎麼定位,也不知道要讓 agent 往哪裡查, 只能繼續依賴 agent 猜,債就越滾越大。

Agent 奪走了路上的風景

現在 agent 幾乎可以迭代後交出可以使用的程式碼,大幅減少人查找 API 的行為。 這直接減少了人認識整個套件能做的其他功能,會讓新的想法變少; 也會讓交流變得困難——很多運作原理跟設計的取捨,會放在 API 頁面裡面。

「問 agent 就好」比較像是完成一個已知範圍的任務; 如果更偏向探索型的開發,就會需要看到很多自己沒想過的東西—— 問 agent 通常只會問出自己知道的延伸,問不出自己不知道的東西。 這時去逛 API 就是一個很好的吸收方式: 開發者在整理 API 的時候,就是在整理那個領域的相關知識, 很容易可以發現相似的方法去延伸。

例子:ObsPy Gallery

程式碼是意圖的產物

寫程式的主要工作是在設計意圖,程式碼只是意圖的產物。 Peter Naur 提到,軟體開發過程中有些思考邏輯, 很難用程式碼或文件完整記錄下來:

  • 現實世界與原始碼的對應關係。
  • 技術決策當下的背景與原因。
  • 原始碼如何適應新的需求。

這些知識存在參與者的腦中,原始碼本身還原不出來—— 所以原始碼沒有想像中有價值。

出處:Peter Naur, “Programming as Theory Building,” Microprocessing and Microprogramming, Vol. 15, No. 5 (1985), pp. 253–261.

沒有人知道所有東西怎麼運作

寫程式本身就是在整理一個很大的流程圖: 起初只能看到很大很模糊的概念,像是前端、後端、資料庫; 想要更具體的時候,就往下把某一塊流程圖打開,把細節找出來觀察與思考。 在那個層級下(像是後端好了),就只會看到這一塊的細節—— 因為人的注意力是有限的,能在腦中思考的範圍就是這麼大。 所以整個軟體開發就很像在抽象與具體中來回遊走。

人的注意力有限,一次只能看一個層級,在抽象與具體中來回遊走

那這就有個結論:不用知道所有東西就可以開始做, 因為沒有人知道所有東西怎麼運作。

用了 agent 之後,人被迫往上一層思考更大的架構。 一方面不用因為不知道所有細節而擔心; 另一方面細節也不是不用學——當問題發生的時候,我們就是要往下去探索。

理解外部化

人的注意力有限,Agent 的 context 也有限。 關鍵的理解既無法從原始碼還原,也塞不進任何一顆腦袋——所以要外部化: 把腦中的理解,變成可以共同查看、修正、驗證的產物。 文件與工具,本質上是團隊的外部記憶,也是人與 Agent 的共同介面。

對應 Naur 那三條藏在腦中的東西,各有外部化的做法:

藏在腦中的理解 外部化的產物
現實世界與原始碼的對應關係 架構圖、資料流與任務拆解
技術決策當下的背景與原因 決策紀錄、Git commit 與 diff
原始碼如何適應新的需求 規格與驗收條件、測試與 log

《Beyond Vibe Coding》的講法是:程式設計現在變成在「設計意圖」, 我們實際上產出的東西,就是那些紀錄意圖的東西—— 規格是給人讀的意圖,agents.md 是給 agent 讀的意圖,測試是可執行的意圖。

Agent 帶來的角色轉變

過去寫程式大多都在最基層的角色; 現在 Agent 解放雙手後,人就會被推向更高層做規劃與決策, 去思考真正重要的問題。

Agent 接手實作與測試後,人的重心往策略與規劃上移

而升上去之後會發現: 軟體工程的瓶頸一直都還是在人身上——真正會卡住專案的,是人的決策速度。

第三部分:軟體工程

軟體開發的領域知識

計算機科學大部分有最佳答案:演算法、資料結構、通訊協定、作業系統。 可以背答案與套模板——交給 AI 生成並驗證。

軟體工程則是看情況取捨、多跟人有關:專案管理、開發流程、軟體架構、團隊文化。 不同資源、團隊、時空背景——人做決策。

軟體工程的核心邏輯

從面試題目的方向,可以看出系統設計要具備什麼思維。 現在的技術面試其實不是在看你對於語法熟不熟, 而是在看怎麼解決問題, 還有為什麼選擇這個技術、這個技術的成本、與這個技術有什麼限制:

  • 釐清模糊需求:先問清楚範圍與限制再設計。
  • 提出設計取得共識:先講高層架構,再往下深入細節。
  • 說明瓶頸與取捨:每個決策都要能講出它的代價。

參考:Alex Xu《系統設計面試指南》Ch.3

軟體工程要學什麼

以軟體工程的角度,Andrew Ng 建議可以學習:

  • 全端程式設計
  • 資料管理
  • 系統架構設計
  • 可靠性與安全性
  • 生產環境的擴展性與維運

目前業界開始偏向不看程式碼

像 Ruby on Rails 的作者 DHH, 現在不逐行審查程式碼,改用自動化測試與工程指標把關品質。 人力往上移:設計架構、定義介面與驗收條件—— 從「寫程式碼」變成「設計品質關卡」。

Vibe Coding vs Agentic Engineering

Vibe coding 是探索式的開發:從想法或感覺出發,下提示、AI 生成、試錯調整。 有些需求還不明確,本來就很難規劃——vibe coding 是很好的探索方式, 很多東西拿在手上玩玩看之後會冒出新想法,探索到一個範圍就了解了實際需求。 所以 vibe coding 是探索需求的鷹架:必須存在的拋棄式物件。 以前軟工也一堆這種鷹架(prototype),做出來就是階段性要被丟掉的。

Agentic engineering 是規格式的開發:需求規格、拆解計畫、代理執行、測試驗證、交付迭代。 等需求探索得差不多,就把鷹架拆掉,把已經探索到的需求抽成規格重寫—— 換成一個可重現、可協作、可規模化的做法。

探索式與規格式兩種開發流程的對照

什麼時候該切換到 Agentic Engineering?

Vibe coding 在需求不明確時是個很好的探索工具, 但有些訊號代表該用更穩健的方式重建:

  • 程式本身的狀態:亂到開始臃腫、改不動了。
  • 軟體的壽命:如果很短、幾天而已用完即丟,那 vibe 無傷大雅; 但如果是要用好長一段時間,開始追求穩定時就會需要重構,也就會進入軟工領域。
  • 責任與依賴:如果這東西只有自己用,那 vibe 沒什麼問題; 但這個東西開始要負責任、要給其他人用、別人的任務開始依賴這個東西的時候, 可靠性的需求提高,就得進入軟工領域。

所以要不要做到軟工,其實本身是個成本與風險之間的取捨: 我們學了也不一定每個專案都要這麼做, 但不學的話,直接拿 vibe 的東西推出去就是不負責任的行為。

第四部分:課程架構

從試錯中學習

學習就是從過程中的摩擦得來:自己要先想過, 然後去嘗試看看跟自己假設對不對,才會學到東西—— 這個就跟機器學習的訓練一樣。 光是把範例複製貼上也能做出東西, 但自己腦中就不會建構出對於這個課題的心智模型。

落到日常就是兩個動作:

  • 測試:把對目標的理解寫下來——了解應該做到什麼跟邊界。
  • 重構:帶著目的再把問題想一遍。如果只叫 AI 做一次,印象不會太深; 重構本身一定會有個要優化的目的在, 就可以把這個問題的成本跟價值好好分析一遍,就會學到新東西。

《Beyond Vibe Coding》對維護 AI 程式碼的總結也是這兩件事: 持續重構跟測試,而不是回去手寫程式碼。

課程目的

上完課不會馬上變成大神,而是想要在這 16 週讓你可以:

  • 了解軟體開發的整個流程。
  • 不盲目追求新的 Buzzword。
  • 自己發現新的 Agent 使用方法。

課程架構

  • 九月開始,每週二 11:00。
  • 16 週 × 3 小時,共 48 小時。
  • 前 30 分理論、後 30 分實作示範,剩下兩小時實作。
  • 請攜帶筆電;推薦使用 Claude Code 與 Codex;歡迎帶問題來討論。

課程模組

  1. AI Agent 教學:Agentic Engineering 介紹、Skill 建立、Harness 技巧、Agent 基礎資安觀念。
  2. Agentic 開發與維運:DevOps 與 CI/CD、軟體開發生命週期、Git 版本控制、Docker 容器化、測試驅動開發(TDD)、規格驅動開發(SDD)、可觀測性工程。
  3. Agentic 舊專案實戰:抽取架構設計意圖、監控外顯表現、重構、除錯與優化、添加新功能。

三個實作

  1. 實作零:vibe coding 一個簡易地震監測系統——先做出來,用來探索需求。
  2. 實作一(第一階段):開發簡易地震監測系統——加入軟體工程,從頭建穩。
  3. 實作二(第二階段):接手舊有 AI 地震預警系統——讀懂既有程式,再改造。

三個實作:探索需求、從頭建穩、接手改造

課程方向

主軸 出現節奏 內容
Agent 原理 貫穿全課程 Context 工程、Prompt 與 Skill、Harness 技巧、Agent 資安
軟體工程 依專案進度出現 Git、規格、測試、環境、CI、觀測、資安、交付證據
領域知識 地震資料流 固定波形、GDMS 資料、PhaseNet picks、關聯定位、事件頁面

三條主線穿插在實例當中。

結論

Agent 出現徹底改變了 Coding 的生態,讓人可以思考更重要的問題。 在快速產出的同時,建立驗證機制來確保品質, 並保持對系統架構的認知。

抱持著不滿足於現有方案的心態持續學習。