AI 開發

AI Coding Agent 正在改變軟體開發:Claude Code、GPT Agent 如何透過 JSON 呼叫工具和執行程式?

閱讀約 15 分鐘

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 再驗」。更常見的是:

  1. 人寫意圖:修這個失敗測試,或給這個 API 加欄位。
  2. Agent 跑迴圈:讀倉庫、搜符號、改檔案、跑測試,把軌跡留成工具呼叫。
  3. 人審 diff 和軌跡:不再從零敲出每一行,但型別、測試和權限還在。

這不是「AI 替你上班」。變的是第一稿由迴圈產出,人把關形狀和副作用。把工具與工作流收成 Schema,細節見 JSON Schema 與 AI Agent 工作流。

迴圈只做一件事:填 JSON,再讀 JSON

產品頁面會寫「自主寫程式」。工程上,一輪迴圈通常只有四跳:

  1. 觀察:工作區、測試輸出、上一次工具結果進入上下文。
  2. 提議:模型輸出工具名和參數物件,而不是自己去 open()。
  3. 執行:宿主校驗、跑命令或改檔案。副作用發生在這裡。
  4. 回寫: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 呼叫鏈應該先穩定。

延伸閱讀

更新紀錄: 首次發布