代理式程式開發

程式開發代理(coding agents)是一種可對話的 AI 模型,能使用讀寫檔案、網頁搜尋、執行 shell 指令等工具。它們可以存在於 IDE 內,也可以存在於獨立的命令列或圖形介面工具中。這類代理具備高度自主性且功能強大,能支援非常多元的使用情境。

本講座延伸自開發環境與工具中的 AI 輔助開發內容。先來看一個快速示範:我們延續AI 輔助開發章節裡的範例:

from urllib.request import urlopen

def download_contents(url: str) -> str:
    with urlopen(url) as response:
        return response.read().decode('utf-8')

def extract(content: str) -> list[str]:
    import re
    pattern = r'\[.*?\]\((.*?)\)'
    return re.findall(pattern, content)

print(extract(download_contents("https://raw.githubusercontent.com/missing-semester/missing-semester/refs/heads/master/_2026/development-environment.md")))

我們可以用以下任務來提示一個程式開發代理:

把這段改成完整的命令列程式,使用 argparse 解析參數。補上型別註記,並確保程式可通過型別檢查。

代理會先讀取檔案理解內容,再進行修改,最後執行型別檢查器,確認型別註記是否正確。如果它犯錯導致型別檢查失敗,通常會自行反覆修正;不過這個任務很單純,發生機率較低。由於代理可以呼叫可能帶來風險的工具,多數 agent harness 預設都會先請使用者確認工具呼叫。

如果程式開發代理犯錯——例如你的 $PATH 裡已經有 mypy 可直接執行,但代理卻去呼叫 python -m mypy——你可以透過文字回饋引導它修正方向。

程式開發代理支援多輪互動,你可以在來回對話中持續迭代成果。如果它走錯方向,你也可以中途打斷。實用的心智模型是把自己想成實習生的主管:實習生會處理許多瑣碎工作,但需要你給方向,也偶爾會做錯,需要你校正。

若想看更具體的示範,可在下一輪請代理執行產生的腳本。觀察輸出結果後,再請它修改(例如只保留絕對 URL)。

AI 模型與代理如何運作

完整解釋現代大型語言模型(LLM)與 agent harness 等基礎設施的內部原理,超出本課程範圍。不過,掌握一些高層次的關鍵概念,能幫助你更有效地_使用_這項前沿技術,也更清楚它的限制。

你可以把 LLM 視為:在給定提示字串(輸入)後,去建模補全文字字串(輸出)的機率分布。LLM 推論(例如你在對話聊天工具送出問題時發生的事)會從這個機率分布中進行_取樣_。LLM 也有固定的_上下文視窗_,也就是輸入與輸出字串總長度的上限。

對話式聊天與程式開發代理等 AI 工具,都是建立在這個基礎之上。多輪互動時,聊天工具與代理會用回合標記,並在每次新提問時,把整段對話歷史都當成提示字串,再執行一次 LLM 推論。對於可呼叫工具的代理,harness 會把某些 LLM 輸出解讀成工具呼叫請求,並把工具回傳結果再餵給模型作為提示字串的一部分(所以每次工具呼叫與回應都會再跑一次 LLM 推論)。工具呼叫型代理的核心概念,甚至可以用 200 行程式碼實作

隱私

大多數 AI 程式工具在預設設定下,會把不少資料送到雲端。有時是 harness 在本機、LLM 推論在雲端;有時甚至更多軟體元件都在雲端執行(例如服務提供者可能實質上會取得你整個儲存庫副本,以及你與 AI 工具的所有互動內容)。

目前已有不錯的開源 AI 程式工具與開源 LLM(雖然通常還比不上封閉模型),但以現況來說,受限於硬體條件,多數使用者仍難以在本機跑最新一代的開源 LLM。

使用情境

程式開發代理可協助各式各樣的工作。以下是一些例子:

進階代理

以下簡要介紹一些更進階的使用模式與能力。

對於許多需要撰寫提示的進階功能(例如 skills 或 subagents),你可以先用 LLM 幫你打草稿。有些程式開發代理甚至內建這種能力。例如 Claude Code 能根據短提示直接產生子代理(執行 /agents 並建立新代理)。你可以試著用以下提示建立子代理:

一個 Python 程式檢查代理,使用 `mypy` 與 `ruff` 對自上次 git commit 以來有修改的所有檔案進行型別檢查、lint,以及格式化檢查。

接著你可以在上層代理明確下指令,例如「use the code checker subagent」,來呼叫這個子代理。你也可能讓上層代理在適當時機自動呼叫它,例如每次改動 Python 檔案之後。

注意事項

AI 工具會犯錯。它們建立在 LLM 之上,本質上只是機率式的下一個 token 預測模型,並不是與人類同等的「智慧」。請務必審查 AI 產出,確認正確性與安全性漏洞。有時驗證程式碼的成本甚至高於你自己手寫;對關鍵程式碼,建議考慮手寫。AI 也可能鑽牛角尖,甚至用看似合理的說法把你帶偏,請留意除錯螺旋。不要把 AI 當拐杖,也要避免過度依賴或只停留在表面理解。仍有大量程式任務是 AI 做不到的;運算思維依然非常重要。

推薦軟體

許多 IDE / AI 程式擴充套件都內建程式開發代理(可參考開發環境講座的推薦)。其他常見代理還有 Anthropic 的 Claude Code、OpenAI 的 Codex,以及像 opencode 這類開源代理。

練習

  1. 用同一個程式任務分別做四次,比較「手寫程式」、「AI 自動補全」、「行內聊天(inline chat)」與「代理」的體驗差異。最適合的題目,是你正在進行專案中的小功能。若想找其他題目,可考慮 GitHub 開源專案的「good first issue」類型任務,或 Advent of Code / LeetCode 題目。
  2. 使用 AI 程式開發代理探索一個你不熟悉的程式碼庫。最理想情境是你真的想在某個專案除錯或新增功能。如果暫時沒有目標,可試著用 AI 代理理解 opencode 中與安全性相關功能是如何運作的。
  3. 從零開始 vibe code 一個小型應用,過程中不要手寫任何一行程式碼。
  4. 針對你選擇的程式開發代理,建立並測試 AGENTS.md(或對應檔案,例如 CLAUDE.md)、一個 skill(例如 Claude Code 的 skillCodex 的 skill),以及一個 subagent(例如 Claude Code 的 subagent)。思考在什麼情境下該用哪一種機制。注意:你選的代理可能不支援全部功能;你可以略過,或改用其他有支援的代理。
  5. 用程式開發代理完成與程式碼品質講座中「Markdown 項目符號 regex 練習」同樣的目標。它是不是直接編輯檔案來完成任務?若代理用直接改檔方式完成,缺點與限制是什麼?再想辦法調整提示,讓代理不要靠直接改檔完成。提示:請代理使用第一堂課提到的某個命令列工具。
  6. 大多數程式開發代理都支援某種「yolo mode」(例如 Claude Code 的 --dangerously-skip-permissions)。直接使用這種模式並不安全,但你可以在虛擬機或容器等隔離環境中執行代理,再啟用自主模式,通常會比較可接受。請在你的電腦上完成這種設定。像是 Claude Code devcontainersDocker Sandboxes / Claude Code 這類文件可能很有幫助。這件事有不只一種做法。

編輯此頁面

本內容採用 CC BY-NC-SA 授權。