AI Coding Agent 正在改變軟體開發:Claude Code、GPT Agent 如何透過 JSON 呼叫工具和執行程式?
2026 年的軟體開發,越來越不像「人在 IDE 裡敲補全」。Claude Code 在終端機裡讀倉庫、改檔案、跑測試;GPT Agent / Codex 在會話裡開沙箱、寫補丁、回傳結果。兩者產品形態不同,骨架一樣:模型只填 JSON,宿主去執行。本文拆開這條呼叫鏈——以及它如何改寫你每天的開發流程。
閱讀前速覽
| 概念 | 一句話 | 落在哪 |
|---|---|---|
| Coding Agent | 能讀倉庫、改檔案、跑命令的執行時 | Agent loop |
| Claude Code | 終端機裡的本地 Coding Agent | tool_use JSON |
| GPT Agent | 會話 / 沙箱裡的編碼與電腦使用 | tool_calls / code |
| JSON | 工具名、參數、結果的契約 | Schema / payload |
先記住分工:模型填物件,宿主執行,迴圈讓補丁和測試連續發生。換牌子,這條 JSON 呼叫鏈不變。
Coding Agent 不是「會寫程式的聊天框」
補全模型補下一行。聊天模型解釋一段程式。Coding Agent 是第三種東西:一個把模型放進迴圈的執行時——觀察倉庫狀態,提議下一步,呼叫外部工具,消化結果,再決定繼續、停手或交給人。
2026 年能交貨的 Coding Agent,通常是三件套:
- 模型:只生成文字或結構化物件,不直接碰磁碟。
- 工具目錄:讀檔案、改檔案、跑命令、搜倉庫,有時還有瀏覽器或 MCP。
- 宿主:解析 JSON、做門禁、真正執行、把結果寫回下一輪。
若你還把 Agent、Tool Calling、Function Calling 糊成一個詞,先讀 AI Agent 完整指南。本文只談其中一種產品形態:對著真實倉庫幹活的 Coding Agent。
軟體開發被改的不是編輯器,是迴圈
過去十年,IDE 補全把「敲字元」變短。過去兩年,聊天視窗把「問缺陷」變近。Coding Agent 改的是第三件事:誰先寫出第一份可執行的補丁。
典型一天不再是「人寫完,CI 再驗」。更常見的是:
- 人寫意圖:修這個失敗測試,或給這個 API 加欄位。
- Agent 跑迴圈:讀倉庫、搜符號、改檔案、跑測試,把軌跡留成工具呼叫。
- 人審 diff 和軌跡:不再從零敲出每一行,但型別、測試和權限還在。
這不是「AI 替你上班」。變的是第一稿由迴圈產出,人把關形狀和副作用。把工具與工作流收成 Schema,細節見 JSON Schema 與 AI Agent 工作流。
迴圈只做一件事:填 JSON,再讀 JSON
產品頁面會寫「自主寫程式」。工程上,一輪迴圈通常只有四跳:
- 觀察:工作區、測試輸出、上一次工具結果進入上下文。
- 提議:模型輸出工具名和參數物件,而不是自己去
open()。 - 執行:宿主校驗、跑命令或改檔案。副作用發生在這裡。
- 回寫:stdout、補丁、錯誤碼變成下一輪可見的物件。
四跳缺一門禁,JSON 就是命令。四跳齊了,你才有可回放的開發會話。AI 為什麼需要 JSON Schema 寫過:Schema 是口徑,不是 prompt 裡的「請返回 JSON」。
Claude Code:終端機裡的工具面
Claude Code 是 Anthropic 的本地 Coding Agent:跑在你的終端機,對著當前倉庫說話。模型側用 Messages API 的內容塊;工程上你每天看見的,是一串 tool_use。
常見工具面很窄,也正因為窄才好審:
- Read / Glob / Grep:先看,再改。
- Edit / Write:按精確取代或整檔寫入改倉庫。
- Bash:跑測試、安裝依賴、執行腳本。
- MCP:把外部系統接進同一套 JSON 工具表。細節見 MCP Tool Schema vs Function Calling。
模型發出的不是一段「請幫我改檔案」的散文。它發出一塊可校驗的物件:
{
"type": "tool_use",
"id": "call_read_1",
"name": "Read",
"input": {
"path": "src/billing/refund.py"
}
}
宿主做完事後,回寫的也是物件。stdout 可以很長,但入口仍然是 tool_result,而不是聊天氣泡:
{
"type": "tool_result",
"tool_use_id": "call_bash_4",
"content": {
"stdout": "12 passed, 1 failed",
"exit_code": 1
}
}
auto-mode 與確認門決定「這一跳要不要等人」。關掉門禁,迴圈會自己把 Bash 跑完——這正是開發變快的地方,也是事故半徑變大的地方。安全面見 Claude 事件與工具 JSON 與 AI Agent 安全與 JSON 驗證。
GPT Agent:會話、沙箱與 Function Calling
OpenAI 這一側名字更多:ChatGPT Agent、Codex、Responses API、GPT-6 Astra。產品殼不同,呼叫形狀仍是 Function Calling:tools[] 宣告,tool_calls 提議,arguments 是字串化的物件。
一次編碼相關的呼叫,看起來像這樣:
{
"tool_calls": [{
"id": "call_7f2a",
"type": "function",
"function": {
"name": "run_code",
"arguments": "{\"language\":\"python\",\"code\":\"from pathlib import Path\\nprint(Path('src').exists())\"}"
}
}]
}
和 Claude 的差別不在「會不會寫程式」,而在工具面怎麼組裝:
- 程式碼解釋器 / 沙箱:把多步計算收成一次
run_code或 python,減少來回。 - 電腦使用:瀏覽器、桌面操作走另一組結構化動作。
- Codex / CLI:更接近倉庫級 Coding Agent,工具表重新變成讀、改、跑。
GPT-6 Astra 指南 寫過同一條紀律:更穩地走完「選工具 → 調工具 → 交回物件」。對開發者,這意味著補丁和測試輸出都應該能從 JSON 軌跡重建,而不是只剩一段「我已經改好了」。
程式真正跑在哪?不在模型裡
這是最容易寫錯的一句。大模型不執行 Python,也不 spawn 行程。它只生成:
- 工具名:Bash、Read、python、
apply_patch。 - 參數物件:
command、path、old_string、code。 - 偶爾是補丁文字:仍然先作為欄位出現,再由宿主落盤。
真正跑程式的是宿主:本地行程、容器,或雲端沙箱。檔案系統與網路權限屬於宿主策略,不屬於模型權重。一份收緊的工具 Schema 長這樣:
{
"name": "Bash",
"description": "Run a shell command in the workspace",
"inputSchema": {
"type": "object",
"properties": {
"command": { "type": "string" },
"timeout_ms": { "type": "integer", "maximum": 120000 }
},
"required": ["command"],
"additionalProperties": false
}
}
additionalProperties: false 不是矯情。寬 object 等於讓模型多塞一個目標主機或一段額外腳本。金鑰、Cookie、內部基址必須留在宿主,不能進參數物件。
Claude Code 與 GPT Agent:買的不是同一層殼
不是誰更聰明,而是你把迴圈掛在哪:
| 維度 | Claude Code | GPT Agent / Codex |
|---|---|---|
| 入口 | 本地終端機,對著倉庫 | 會話、沙箱,或 CLI |
| 呼叫形狀 | tool_use / tool_result | tools[] / tool_calls |
| 預設工具 | Read、Edit、Bash、Grep、MCP | 函式、程式碼解釋器、電腦使用 |
| 執行世界 | 你的機器或你掛的沙箱 | 廠商沙箱或本地 Codex |
| 你維護什麼 | 權限門、MCP、會話軌跡 | 工具 Schema、Responses 軌跡 |
換牌子,迴圈不變。你要穩定的是工具契約和執行世界,不是某一家的聊天皮膚。DeepSeek 把宿主做成可替換基礎設施,見 DeepSeek Harness 與 Coding Agent 基礎設施。
開發者該檢查的是軌跡,不是氣泡
Agent 寫完程式以後,審的物件應該和審同事 PR 一樣:diff、測試、權限。多出來的一層是工具軌跡。
- 把
tool_use/tool_calls格式化,看名字和參數是不是你以為的那一下。 - 用 JSONPath 提取 抽出
name、command、path,不要靠眼睛掃散文。 - 和上週能過的軌跡 JSON Diff。迴圈漂了,先看工具表和參數形狀,再怪模型。
- 失敗測試的 stdout 要進軌跡,不要只留「我修了」。
- 生產憑證、客戶庫、內網位址不要貼進公共格式化站。JSONSort 在瀏覽器本地跑,適合看這些物件。
軌跡能重建,會話才能復盤。這是 Coding Agent 能進團隊流程的前提,不是錦上添花。
常見誤區
- 把 Coding Agent 當成更聰明的補全。補全改一行;Agent 改迴圈。
- 以為模型自己執行了程式。執行權在宿主。
- 不審工具 JSON,只看最後的檔案 diff。命令可能已經跑過了。
- 給 Bash 一張空白支票。沒有 cwd、逾時、網路門,迴圈就是生產事故。
- 用 prompt 代替 Schema。口徑必須能校驗。
- 把會話當聊天氣泡存。沒有
tool_result,就沒有可回放的開發紀錄。
FAQ
Claude Code 和 GPT Agent 哪個更適合團隊?
看執行世界。倉庫在你機器上、要接 MCP 和本地測試,Claude Code 或 Codex CLI 更近。要會話裡的沙箱計算或電腦使用,走 GPT Agent / Responses。先鎖工具 Schema,再選殼。
模型會不會偷偷跑我沒同意的命令?
模型只能提議。會不會跑,取決於宿主有沒有確認門、allowlist 和網路隔離。auto-mode 等於你預先同意了某一類 JSON。
這和普通 Function Calling 有什麼不同?
形狀相同,半徑不同。客服查單通常唯讀;Coding Agent 的工具能改磁碟、跑行程。所以 Schema、逾時和稽核必須更緊。
為什麼強調 JSON,而不是 prompt?
因為副作用發生在解析物件之後。prompt 影響模型填什麼;Schema 和宿主決定什麼能執行。除錯時,物件比形容詞值錢。
要不要讓 Agent 直接推生產?
不要。讓它出分支、跑測試、留軌跡。合併和發布仍是人的戰略門。迴圈負責起草,門禁負責放行。
結論
AI Coding Agent 改變軟體開發的方式,不是讓編輯器更會猜下一行,而是把「讀倉庫 → 填工具 JSON → 宿主執行 → 回寫結果」做成預設迴圈。Claude Code 和 GPT Agent 只是兩種殼。
從今天起,少爭論哪家模型更會寫程式。先把工具 Schema、執行世界和會話軌跡寫進倉庫。模型會換;這條 JSON 呼叫鏈應該先穩定。
延伸閱讀
- AI Agent 是什麼?完整指南 執行時、Tool Calling 與 JSON 契約
- DeepSeek Harness 改變了什麼 從 Framework 到可替換 Coding Agent 宿主
- MCP Tool Schema vs Function Calling 工具 JSON 的協定邊界
- AI 為什麼需要 JSON Schema Schema / Function Calling / Structured Output
- AI Agent 安全與 JSON 驗證 驗證能擋住什麼、擋不住什麼
- JSONSort 本地工具箱 格式化、校驗、Diff
- 全部文章 更多 JSON 與 AI 開發筆記
更新紀錄: 首次發布