2026 年再談 AI Agent,爭論點已經不是「選 GPT、Gemini 還是 Claude」。真正決定系統能否上線的,是模型如何透過 Function Calling 發出結構化請求、JSON Schema 如何約束參數、MCP 如何把工具與上下文插到執行環境。三者疊在一起,才構成可編排、可稽核、可替換模型的 Agent 技術棧。
本文面向正在把聊天機器人升級成可執行 Agent 的工程團隊:拆開各層職責、走完一次完整工具循環,並說明在雲端 Mac 上跑構建類工具時該如何切分邊界。成本側可對照 OpenRouter 上 Claude / GPT / Gemini 的呼叫成本;工作區隔離見 Agent 虛擬檔案系統;跨會話狀態見 Agent Memory 橫向評測。
先把棧拆開:模型不是全部
把 Agent 理解成「會說話的模型」會漏掉真正承載可靠性的三層:
- 推理引擎:GPT、Gemini、Claude 等,負責規劃、選工具、解釋結果。
- 呼叫契約:Function Calling(各家也稱 tool use)加上 JSON Schema,規定「能調什麼、參數長什麼樣」。
- 執行時插槽:Model Context Protocol(MCP) 把檔案系統、倉庫、瀏覽器、內部 API 以標準方式接到 Agent 主機。
2025–2026 年的共識是:模型可以換,契約與插槽應盡量穩定。業務程式不要綁死某一家 SDK 的私有函式名,而應圍繞「工具清單 + Schema + 執行沙箱」來設計。
GPT、Gemini、Claude 在 Agent 裡怎麼分工
三家都支援工具呼叫,差異主要在預設風格、多模態入口、長上下文與合規姿態,而不是「有沒有 function call」。
- GPT 系列:工具循環文件成熟,OpenAI Function Calling 與 Responses / Chat Completions 生態最大,適合作為預設編排器或閘道後端。
- Gemini:多模態與長上下文強,官方 Function Calling 適合文件、截圖、倉庫樹同時進上下文的 Agent。
- Claude:工具使用與電腦/程式碼場景口碑穩,Anthropic tool use 適合高風險改程式碼、需要更謹慎拒絕越權呼叫的路徑。
生產上更常見的是路由而不是單模型信仰:規劃用強推理模型,大批量結構化抽取用便宜模型,敏感寫操作固定走帶人工確認的模型檔。路由與帳單拆解見 多模型呼叫成本對照。
Function Calling:模型與世界的合法介面
Function Calling 的本質不是「模型自己執行函式」,而是模型輸出一份符合約定的呼叫意圖,由宿主程式決定是否執行。正確拆分是:
- 模型:選擇工具名、填充參數、根據觀察繼續規劃。
- 宿主:鑑權、限流、校驗、實際 I/O、把結果編回訊息列表。
各家 JSON 欄位名略有差異(tools / function / input_schema),但循環相同:宣告工具 → 模型回傳 tool call → 執行 → tool result → 再推理。不要讓模型直接拼 shell 字串當「工具」;那會繞過 Schema,把注入風險交給提示詞。
工程底線
- 工具名穩定、語意單一:一個工具只做一類副作用。
- 寫操作與讀操作分開,寫操作預設需要確認或沙箱。
- 工具結果寫回時保留
call_id,便於稽核與重試。
JSON Schema:工具的型別系統
JSON Schema 在 Agent 棧裡扮演的是編譯期型別 + 執行時校驗。模型再聰明,也應先過 Schema:缺必填欄位、列舉越界、額外屬性,都應在進業務邏輯前失敗,並讓模型看到校驗錯誤後重試。
建議把每個工具的 parameters / input_schema 寫成一份可版本化的 Schema(見 JSON Schema),而不是散落在提示詞裡的「請傳入 repo 和 branch」。
必須寫進 Schema 的約束
type、required、additionalProperties: false:減少幻覺欄位。- 路徑、URL、列舉用
pattern/enum,不要用自由文字冒充識別碼。 - 大欄位(日誌、diff)不要塞進參數;改為「寫入工作區檔案 + 回傳路徑」,與 VFS 按需讀取一致。
- 版本號放 Schema 或工具名後綴(
deploy_v2),避免新舊 Agent 共用一份模糊契約。
校驗應發生在模型輸出之後、真實副作用之前。只靠「提示詞裡寫 JSON」無法構成生產控制。
MCP:工具與上下文的通用插槽
MCP 解決的是 Function Calling 之上的發現與傳輸問題:工具不一定寫死在應用程式裡,而可以由 MCP Server 動態列出 tools、resources、prompts。主機(Claude Code、IDE Agent、自建 orchestrator)透過標準協定連線多個 Server。
和「每個模型廠商各寫一套外掛」相比,MCP 的價值是:
- 工具可插拔:Git、瀏覽器、內部工單系統各跑一個 Server,Agent 主機只維護連線與權限。
- 上下文可引用:資源 URI 讓大檔不必整段塞進 prompt。
- 與模型解耦:同一套 MCP 工具清單可餵給 GPT、Gemini 或 Claude 的 Function Calling 層。
落地時仍要把 MCP 工具對應成帶 JSON Schema 的 function 宣告,並在主機側做路徑白名單。MCP 不是安全邊界本身,它是標準插頭;沙箱、金鑰與稽核仍在宿主。
一次完整循環:從意圖到工具結果
以「根據失敗的 iOS 構建日誌提修復 PR」為例,協同順序通常是:
- 使用者給出意圖;主機注入系統策略(禁止碰憑證、禁止生產金鑰)。
- 模型閱讀工具清單(來自靜態註冊或 MCP
list_tools)。 - 發出
fetch_ci_log的 Function Call,參數經 JSON Schema 校驗。 - 執行器在沙箱或 雲端 Mac 上取日誌,超長內容落入 VFS 檔案。
- 工具結果回寫;模型再呼叫
apply_patch,寫操作走確認或唯讀 diff 預覽。 - 若需要記憶「上次 Profile 過期」,寫入 Memory 層而不是塞進 Schema 參數。見 Memory 選型。
任何一步失敗都應結構化錯誤(校驗失敗、權限拒絕、逾時)而不是一段自然語言,否則模型難以正確重試。
對照表與選型
| 層 | 負責什麼 | 不負責什麼 | 2026 常見選擇 |
|---|---|---|---|
| GPT / Gemini / Claude | 規劃、選工具、解釋觀察 | 真實 I/O、鑑權 | 按任務路由,保留切換能力 |
| Function Calling | 把意圖變成帶 id 的工具請求 | 定義業務權限模型 | 各廠商 tool use,主機統一適配 |
| JSON Schema | 參數形狀、必填、列舉 | 執行時副作用 | 版本化 Schema,執行前校驗 |
| MCP | 發現工具/資源、標準傳輸 | 替代沙箱與金鑰保管 | 每類系統一個 Server + 主機策略 |
生產落地:校驗、權限、失敗回退
把上述層接上之後,上線前至少要過四道關:
- Schema 對抗測試:故意缺欄位、多欄位、錯誤列舉,確認宿主拒絕且模型能根據錯誤改參數。
- 越權工具:清單裡沒有的工具名、過期 MCP Server、偽造
call_id必須失敗。 - 副作用隔離:構建、簽署、部署與對話行程分離;Agent 預設拿不到生產憑證。
- 可觀測性:每次 tool call 記錄工具名、Schema 版本、耗時、成功/校驗失敗/權限失敗。
OWASP 將過度授權與提示注入列為 LLM 應用核心風險,因此「模型說要調就調」不能作為策略。OWASP LLM Top 10 可作為稽核清單錨點。
在雲端 Mac 上跑 Agent 工具鏈
對 iOS / 跨平台團隊,MCP 裡經常會出現 xcodebuild、模擬器、憑證相關工具。這些工具綁定 macOS 與 Apple 工具鏈,不適合塞進普通 Linux 函式沙箱。
務實切分:
- 對話與規劃:任意雲上的 GPT / Gemini / Claude。
- 倉庫讀寫:VFS / MCP filesystem,路徑白名單。
- 真實構建與真機:Zilmac 雲端 Mac 上的受控 MCP Server 或 CI 任務,金鑰留在構建機。
這樣模型棧可以換,Schema 與 MCP 清單保持穩定,Apple 側副作用始終落在可回收的雲端 Mac 會話裡,而不是開發者筆電。
常見問題
Function Calling 和 MCP 是不是重複了?
不重複。Function Calling 是模型輸出工具請求的方式;MCP 是主機發現並連線工具/資源的協定。落地時 MCP 的每個 tool 仍會對應成一次 Function Calling 宣告。
必須三家模型都接嗎?
不必。先選一家把契約與 MCP 跑穩,再用同一套 Schema 做第二家路由。為「評測而接三家」只會放大未校驗的工具面。
JSON Schema 能不能只寫在系統提示詞裡?
不能當作唯一控制。提示詞可輔助模型填參,但拒絕非法參數必須發生在宿主校驗器。否則注入或模型漂移會直接打到後端。
自建 Agent 怎樣避免鎖死某一家 API?
內部統一「工具名 + JSON Schema + 執行結果」結構,對 GPT / Gemini / Claude 只做適配層。MCP Server 對主機暴露同一清單,計費與故障切換放在閘道。
模型可以換,構建機不能含糊
把 GPT、Gemini、Claude 接到同一套 Function Calling 與 MCP 契約之後,真正卡住 iOS 交付的仍是 Apple 工具鏈。Zilmac 雲端 Mac 適合作為受控執行端:Agent 在 Schema 約束下發任務,簽署與 xcodebuild 在隔離的 macOS 上完成。
無需自備實體 Mac,即可給 Agent 接上可稽核的構建插槽。 — 查看雲 Mac 方案