Day 01 - Claude Code 其實就只是一個 while 迴圈
打開跟 Claude Code 說「幫我把這個 bug 修一下」,去茶水間泡杯咖啡回來可能就發現它已經讀完了檔案、找到問題、改好程式碼,還順手把測試跑過一遍,最後回報「修好了,原因是某個地方少判斷了空值。」
對我這種寫了 30 年程式的老人來說,叫 AI 寫程式、改 bug 的體驗真的滿神奇的。你有沒有想過它在你不在的這幾分鐘到底在幹嘛?大部分人對 AI Agent 的印象,大概就是在很厲害、很聰明不過有點貴之類的形容詞。它好像什麼都會,背後有很多我們不懂的魔法。
從小我對於我看不懂的東西都會覺得很好奇,小時候曾經因為好奇為什麼鬧鐘會響所以把它拆開來看,結果因為裝不回去而被媽媽打了一頓。現在這些 AI 每個都這麼神奇,我怎麼忍得住不把它們拆開來看看呢 :)
先講結論,其實整個骨架就只是一個 while 迴圈而已,真的,就是一個迴圈。
接下來的每一天,我會從一個最陽春的 API 請求開始,最後手刻一個能實際幫我寫程式的 agent 出來,到最後你會發現,那些你覺得神奇的能力,拆開來看的話每一塊都可能簡單到有點好笑。
聲明:我目前是 Anthropic 的 community ambassador(社群大使),這個系列是我的個人專案,不是官方教學,Anthropic 沒有審過稿,內容的對錯由我自己負責。
這個系列要幹嘛
我有個壞習慣,就是做東西之前都得先把名字想好,這次也不例外。我決定叫它 KeSi,名字來自台語的「家私」:

KeSi 就是工具、傢伙的意思。Agent 說穿了就是你手上一件順手的工具,會幫你動手,但真正做決定、驗收成果的那個人還是你。這也是我想在這 30 天裡一直提醒大家的一件事,晚點會再說明。
扣掉專案設定檔以及測試程式碼的話,KeSi 本體最後大概會是一、二千多行的程式,我會用 Python 來寫。你可能會好奇 Claude Code 那麼強怎麼可能一、二千多行就做得出來?我的目的不是復刻 Claude Code,這只是一個教學用的範例,不是拿來取代真傢伙的。但骨架就是骨架,一隻雞跟一隻鴕鳥的骨架長得其實差不多,差別在規模大小。
如果你對 Python 這個程式語言有興趣,我剛好有一本自己寫的《為你自己學 Python》的書 :)
30 天後的成品
完成版的 KeSi 可以在終端機裡跟它對話,例如丟給它一個有問題的小專案並跟它說「這個測試一直過不了,你看一下」。KeSi 會自己去讀測試檔、讀相關的程式碼、推敲原因、把該改的地方改掉,然後跑一次測試確認變綠燈,最後跟你講它做了什麼。
而且它不是悶著頭亂改,你會看到它把要做的事一條一條列出來,先搞懂測試在期待什麼、再回頭找是哪一段程式碼沒滿足這個期待、然後才動手。中間如果需要在一個大專案裡東翻西找,它甚至會另外開一個乾淨的分身去搜,搜完只把結論帶回來,免得把一堆無關的檔案內容塞進正事的對話裡。
一般的讀檔、改檔跟跑測試,它可以自己在那個 while 迴圈裡轉;碰到需要授權或需要你判斷的地方,才會停下來問。這些看起來很聰明的舉動,等你跟著做到後面就會發現,每一個都只是那張四塊地圖上的零件在互相搭配而已。
說白了就是個縮小版的 Claude Code,它需要的所有零件,我們會在這 30 天裡一個一個做出來。
Agent 的重點組成
如果要我把「什麼是 coding agent」壓縮成最短的答案就是:模型、迴圈、工具、context。這四個詞,就是接下來 30 天的地圖。我先在這裡把每一塊講清楚,你之後每天跟著做,都是在這張地圖上填東西。一個一個來:
模型
這可能最好懂,就是那個會講話、會推理的大型語言模型。我們接下來寫的 agent,本身不會思考,它做的事情是把問題連同一堆背景資料,打包成一個 HTTP 請求,透過網路送到 Anthropic 的伺服器,模型在那邊算完,再把答案傳回來給你。你的程式收到答案,才接著做下一步。
所謂的 agent 某種程度上只是一個很會「傳話」跟「跑腿」的中間人。真正的腦,是跟遠端借的,用一次算一次錢。
這決定了後面一大堆事情,我們人類的語言是以「字」為單位,但模型不是直接用「字」來讀內容,而是先把文字切成 token;context window、用量與 API 計費也都用 token 計算。對話越長,每次送出的 input token 通常也越多,所以我們得斤斤計較放進 context 的內容。
你會親手送出人生第一個對 API 的請求,看它回話。很陽春,就幾十行程式碼,但那就是一切的起點。
迴圈
迴圈,看起來不怎麼起眼,但這就是整個系列的重點。一個聊天機器人跟一個 agent,差別在哪?
為了先把差別講清楚,這裡把只負責回話、每一輪都等你下指令的程式叫聊天機器人。你問一句,它答一句,下一步還是等你開口。agent 不一樣,你丟一個目標給它,它會自己判斷「我需要先做 A,才能做 B」,然後一步一步做下去,做完一步看看結果,再決定下一步,直到目標達成才停。
這個「做一步、看結果、再決定下一步」的過程,以程式碼的角度來看就像一個 while 迴圈。
while 還沒完成:
問模型:現在該做什麼?
照它說的做
把結果告訴它
真的就這麼簡單而已。
這三行虛擬碼,就是大多數 coding agent 的心臟。實作時未必真的只寫一個 while,但都能看成差不多的節奏:模型選擇動作、程式執行、結果再送回模型。Anthropic 在 Building effective agents 裡對 agent 的描述也差不多。
當然,魔鬼藏在「照它說的做」這行裡。模型要怎麼告訴你的程式「我想讀某個檔案」?你的程式讀完之後,又要怎麼把內容還回去給它?這中間有一套很精巧的約定,在後面的幾天實作,你就會有一個真的會轉的迴圈,一個能自己讀你的程式碼、回答你問題的東西。那可能是這個系列第一個會讓你「哦~」出聲的時刻。
工具
模型很會講話,但它光會講話沒用。你請它幫你修 bug,它總得能真的讀到你的檔案、真的把改動寫回去、真的跑一次測試對吧?可是模型在遠端的伺服器上,它碰不到你的電腦。
所以「工具」這個東西,就是我們替模型打造的手腳。它的運作方式,說出來你可能會覺得有點反直覺,因為模型其實不會自己動手,它只會「許願」。
它會跟你的程式說:「我想要讀 5xcampus.py 這個檔案。」注意,是「想要」。真正打開檔案、把內容讀出來的,是你寫的那段程式碼。你讀完,再把內容送回去給它看。
這個設計超級重要,之後講權限控制的時候還會再講一次,動手的永遠是你的程式,不是模型。
為什麼要一直強調?因為這是所有安全機制的基礎。模型只會許願,代表你的程式握有最後的否決權。它許願要刪掉整個資料夾,你的程式可以攔下來問你一句「確定嗎」。如果模型能自己動手,那就沒有這道關卡了。
KeSi 預計會有讀檔、列出檔案、glob、搜尋、編輯、寫檔,還有執行指令這些手腳可以用。每個我都會親手做,也會去看看那些開源的 agent 是怎麼做同一件事的。
context
前面三個隨便找篇教學文可能都會講。但 context 才是我覺得這個系列最想聊的東西,也是把「玩具」跟「能用的東西」分開的關鍵。
還記得我說那顆腦是借來的、用一次算一次錢嗎?有個很多人不知道的事,其實我們要用的 Messages API 是沒有狀態的(stateless)的,模型不會替我們保存上一輪對話。
你以為你在跟 Claude Code「對話」,它好像記得剛剛聊了什麼。但對模型來說,每一次請求都是新的開始,它只看得到這次請求裡帶進來的內容。
那它為什麼看起來記得?
因為每次你的程式都要把「這一輪需要模型知道的 context」送給它。最陽春的版本,確實會把到目前為止的所有對話完整重送;真的 agent 不會這樣做,對話太長時會清掉不重要的 tool result、把舊內容濃縮成摘要,或另外開一個乾淨的 context。Claude Code 自己也會做自動整理與壓縮。
這件事的後果很直接,對話越長,你每次要念的日記就越厚,錢就燒得越兇,重點是念到後來,它反而會開始抓不到重點。你跟它聊的第一句話,送出去的可能只有幾百個 token。聊到第三十句,這次請求帶上的 context 可能已經是好幾萬個 token。送進去的 input、模型產生的 output,還有快取的寫入與讀取,都會反映在帳單上。
所以同樣一句「好,繼續」,在對話剛開始跟在對話很後面,整次請求的費用可能差很多。這不是我在嚇你,你會在後面的介紹親眼看到跳動的數字。
所以「怎麼安排送給模型的這一坨資料」,也就是 context 的管理,才是 agent 工程真正的功夫所在。要送什麼、不送什麼、什麼時候該把舊的對話濃縮掉、怎麼用快取省錢,這些我們會花好幾天專門來搞。這幾天大概會是整個系列最硬、但也最值錢的部分。
為什麼自己做一遍?
你可能會好奇 Claude Code 都做得那麼好了,幹嘛還花 30 天自己刻一個爛很多的?好問題。
這二、三年大家可能都會焦慮 AI 是不是要來搶工作了。看著它幾秒鐘寫出你要一小時才寫得完的程式碼,那種焦慮我完全懂,因為我自己也會這樣。我寫程式寫很多年了,是個用終端機用了十幾年的老骨頭,看著這些工具,說完全不動搖是騙人的。
但我後來想通了,AI 已經能幫你打字,也能參與一部分判斷,但最後要解什麼問題、能不能接受這個結果,責任還是在你身上。
我相信,AI 只是拿走了我的鍵盤,但並沒有拿走我的樂趣或工具。真正值錢的,是坐在螢幕前那個人,也就是你!知道這個 bug 大概要往哪查、知道這個設計哪裡怪怪的、也知道什麼時候該放手讓 AI 做、什麼時候該把它按住。AI 可以提出看法、甚至替你執行,但它不會替你承擔選錯方向的後果。因為打字這種雜事被它接手了,你反而更有空去做這些判斷,要當那個「知道什麼時候該攔住它」的人,你就得知道它裡面到底在幹嘛。
你不會攔一個你以為是魔法的東西,你只會攔一個你看得懂的東西。
舉個例子,AI 幫你寫的程式碼跑起來怪怪的,你會怎麼辦?如果你把它當一個黑盒子,你大概只能一直跟它說「不對,再改一下」,改到天荒地老最後還會生氣。但如果你知道它是怎麼讀你的檔案、怎麼一步一步組出那個答案的,你就會知道該去翻哪裡、該補什麼線索給它,甚至一眼看穿它是不是根本誤會了你的意思。
這會直接反映在你出問題時的處理速度上,這也是我覺得值得自己做一遍的理由。
我想做的不是一個更強的 Claude Code,是想在拆的過程裡,把那層「神奇」的濾鏡拿掉,之後每次用這類工具心裡都清楚它在做什麼、哪裡可能出包、哪裡該由你來把關,你會知道自己在跟什麼東西打交道。
哪些自己寫,哪些不重造?
會自己寫的,是那些構成 agent「之所以是 agent」的骨架:那個 while 迴圈、工具、權限的把關、context 的管理、省錢的快取,這些我們一行一行來。
不會重造的,是那些跟 agent 本身無關、重造只是浪費生命的東西。我不會自己刻一個 HTTP 函式庫而是會直接用官方的 SDK。我當然更不會自己訓練一個模型出來,那是完全不同的世界,也不是我這種等級的人做得到的。終端機的介面我也做得很陽春,因為這系列的重點是 agent 的腦,不是它的臉。
更精準的說,這個系列是「agent 的骨架自己寫」,不是「所有東西都從零開始」。
也許你會好奇,Claude Code 的核心 CLI 並沒有以開源授權釋出,我要怎麼「參考」它?還是社群大使有什麼其它人不知道的機密?並沒有。我也不用特別猜,真正需要看它送出什麼的時候,我會用側錄的方式,去攔它實際發出去的網路請求來看,這過程其實滿有趣的。至於實作細節的對照,市面上有一票開源的 coding agent,我會在做每個零件的時候,順手翻翻它們是怎麼做同一件事的,當作解剖實驗的對照組。
為什麼用 Python?
這系列我用 Python 寫。我知道一定會有人說,Python 效能那麼差,做這種東西不會很慢嗎?
其實真的慢都不是慢在程式語言上,agent 的每一輪迴圈,時間大多花在「等模型從遠端回話」上,一等就是好幾秒。你的 Python 程式在這中間做的事,例如組個請求、解析 JSON、串接幾個字串,這通常是毫秒等級,跟那個「等好幾秒」比起來快很多。真正需要拚速度的地方,比如檔案搜尋,這種的我就會拿現成的而且效能很好的工具來包進去。
但你不一定要跟我選一樣的,如果你想用別的語言跟著做,這 30 天的觀念完全通用,語言只是外殼。
需要準備什麼
跟著做這個系列,你需要一把 Anthropic API 金鑰,這把金鑰要到 Claude Console 申請,要注意的是這跟 Claude Pro、Max 等訂閱是分開計費的。
成功的 API 請求會依 token 用量計費。截至 2026 年 8 月,主線使用的 claude-haiku-4-5 每百萬個 input token 是 1 美元,output token 是 5 美元;命中 prompt cache 的 input token 是 0.1 美元。照這個費率算,十萬個 input token 加上一萬個 output token,大約是 0.15 美元。價格會變,動手前還是要看一眼官方定價頁。
這裡不先猜整套課程的總額,因為同一段程式重跑幾次、對話留多長,數字就會不一樣。之後我們會把每輪 token 和費用直接印在螢幕上,最後一天我也會把實際燒掉的 token 帳單攤出來。
這 30 天的程式碼都會放上公開的 repo,每天對應一個 tag,你看到第幾天,repo 上就有那一天能實際跑起來的版本,可以直接抓下來跑。除了金鑰,你只需要一個能跑 Python(或其它程式語言)的環境,跟一顆願意把東西拆開來看的好奇心,就這樣。
回到最開始那句話,你每天在用的 Claude Code,抽象來看核心就是一個會根據結果決定下一步的迴圈,接下來我們就來動手證明。
下一集,我要先在我的電腦跟 Anthropic 的伺服器中間架一個小小的攔截器,把 Claude Code 實際送出去的那一包東西攔下來看個裡面是怎麼回事。它送出去的東西,跟我們接下來要自己做的東西,基本骨架是一樣的。
咱們下集見 :)