教程
AI Agent 是什麼?2026 AI Agent 工作原理、Tool Calling、Function Calling 與 JSON 完整指南
聊天窗口只會回話。Agent 會選工具、填參數、看結果、再決定下一步。貫穿全程的不是魔法,是一份份 JSON:工具定義、arguments、執行結果。
2026 年「AI Agent」出現在產品發佈、招聘 JD 和架構評審裏,含義卻經常對不上。有人把帶插件的聊天窗口叫 Agent,有人把定時跑的工作流叫 Agent,有人把接了 MCP 的 IDE 助手叫 Agent。本文用工程定義收束:Agent 是一個由模型驅動、可循環調用工具、用結構化數據(幾乎總是 JSON)交接狀態的運行時。它不是更會聊天的模型,而是「模型 + 工具運行時 + 契約」的組合。下面按工作原理拆開 Tool Calling、Function Calling 與 JSON 各管哪一層,並接到站內 Structured Output、MCP Schema 與 A2A 對照文。
AI Agent 是什麼:和聊天、工作流差在哪
最小定義只需要三件事:目標(用戶要完成什麼)、感知(當前上下文與工具回執)、行動(調用哪一個工具、填什麼參數,或給出最終答覆)。大模型負責在每一步選擇行動;運行時負責執行工具並把觀察寫回上下文。沒有循環、沒有工具、沒有可校驗的參數形狀,只是聊天。
和聊天機器人的差別不在模型商標,而在停止條件。聊天一輪問答就可以結束。Agent 在拿到工具結果之前,通常不應宣稱任務完成——它可能先查發票、再彙總、再問你確認。和傳統工作流的差別在於邊是誰畫的:n8n / Temporal 的下一跳由人預先連好;Agent 的下一跳由模型根據當前這份 JSON 觀察決定。工作流可預期、可回放;Agent 更靈活,也把「參數填錯」變成一等故障。
2026 年常見形態包括:編碼 Agent(編輯器裏讀文件、跑測試、改補丁)、客服與內部運營 Agent(查訂單、開工單)、以及多 Agent 編排(一個規劃者把任務交給專長 Agent)。形態不同,契約相同:工具邊界用 JSON Schema 寫清,arguments 與 result 都是可 parse 的 JSON。Apple 把同一函數同時暴露給 App Intent 與模型工具,見Apple AI Agent 與 JSON。
2026 工作原理:觀察 → 決策 → 調工具 → 再觀察
把演示視頻裏的「智能」拆開,一條典型 Agent 循環只有五步:
- 用戶目標進入上下文(自然語言 + 可選系統約束)。
- 運行時注入工具清單:每個工具有 name、description 和一份 JSON Schema(parameters / inputSchema)。
- 模型返回 tool_calls(要調哪個函數、arguments 是什麼)或最終文本 / Structured Output。
- 運行時 JSON.parse arguments,執行本地函數、HTTP 或 MCP tools/call,把 result JSON 寫回消息列表。
- 模型再看結果,決定下一工具或結束。超過 maxSteps、用戶取消或 Schema 失敗則停。
循環的形狀本身也可以寫成配置,而不是埋在框架魔法裏。下面這份 JSON 只描述 hops 與停止條件,不包含任何業務字段——業務字段屬於各工具自己的 Schema。
{
"loop": "agent",
"maxSteps": 8,
"stopWhen": ["final_answer", "max_steps", "user_cancel", "schema_fail"],
"hops": [
{ "kind": "model", "emits": "tool_calls | text" },
{ "kind": "runtime", "emits": "tool_result JSON" },
{ "kind": "model", "emits": "next_tool | final JSON" }
]
}
故障幾乎總髮生在第 3→4 步:arguments 是字符串卻被當成對象、數字寫成字符串、漏 required、或工具名與緩存的清單不一致。模型「夠聰明」解決不了契約漂移。無狀態 MCP 下每次請求自帶協議元數據,但 arguments 形狀仍取決於你餵給模型的那份 Schema。
Tool Calling 與 Function Calling:同一件事的兩套名字
工程上它們是同一機制:模型不直接碰數據庫,而是發出一份「請調用某某函數、參數如下」的結構化請求,由運行時執行。產品名詞在 2023–2026 年間換了幾輪,對照如下:
| 概念 | Function Calling | Tool Calling |
|---|---|---|
| 出處 | OpenAI 2023 起的 function_call / functions[] | 2024–2026 業界統稱,覆蓋各家 API 與 MCP |
| 模型發出的載荷 | function.name + arguments(多爲 JSON 字符串) | OpenAI tools[]、Anthropic tool_use、Gemini functionCall |
| Schema 放哪 | function.parameters | tools[].function.parameters 或 MCP inputSchema |
| 和 Structured Output 的關係 | 不管最終答覆形狀,只管這一跳工具入參 | 同樣:工具 hop 與最終答覆 hop 必須分文件 |
OpenAI 後來把 functions 收進 tools,並加上 strict。Anthropic 叫 tool_use / input_schema。Gemini 叫 function declarations。MCP 用 JSON-RPC tools/call。名字不同,arguments 都是 JSON object。把「Function Calling 過時了」寫成遷移理由通常是錯的——過時的是舊字段名,不是機制。
同一份發票搜索工具,OpenAI strict tool 的寫法如下。注意 strict 下所有 properties 必須列入 required,否則模型可以合法地省略你以爲有默認值的字段:
{
"type": "function",
"function": {
"name": "searchInvoices",
"description": "Search invoices by date range and status",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"startDate": { "type": "string", "format": "date" },
"endDate": { "type": "string", "format": "date" },
"status": {
"type": "string",
"enum": ["draft", "sent", "paid", "void"]
}
},
"required": ["startDate", "endDate", "status"],
"additionalProperties": false
}
}
}
模型若決定調用,典型 tool_calls 項長這樣。arguments 仍是字符串,運行時必須先 parse 再校驗,不要直接 JSON.parse 失敗就當模型故障——先分清是語法壞了還是 Schema 不合。分類法見AI 生成 JSON 錯誤指南。
{
"id": "call_8f3a",
"type": "function",
"function": {
"name": "searchInvoices",
"arguments": "{\"startDate\":\"2026-01-01\",\"endDate\":\"2026-01-31\",\"status\":\"paid\"}"
}
}
JSON 爲什麼是 Agent 的契約語言
一條 Agent 流水線裏至少有三份 JSON,形狀應來自同一份 canonical Schema:
- 工具定義:name / description / parameters(或 MCP inputSchema)。
- 模型 arguments:選中的鍵值,常以字符串形式出現在 tool_calls 裏。
- 工具結果:運行時寫回的 ok / result 或錯誤信封,供模型決定下一跳。
還可以有第四份:模型最終答覆的 Structured Output。它描述「給用戶或下游系統的答案長什麼樣」,不是「調用 searchInvoices 要什麼」。兩份 Schema 語法相同、語義不同,應分文件、分版本。詳見AI Structured Output 教程。
工具執行成功後,回執建議固定信封,而不是把下游 HTTP 原文原樣丟給模型。下面的 result 只暴露業務需要的字段;原始響應進日誌。模型看到穩定形狀,重試與彙總纔可預期:
{
"toolCallId": "call_8f3a",
"name": "searchInvoices",
"ok": true,
"result": {
"count": 2,
"items": [
{ "id": "INV-1042", "total": 1280.5, "currency": "USD" },
{ "id": "INV-1048", "total": 640.0, "currency": "USD" }
]
}
}
2026 各棧:OpenAI、Anthropic、Gemini、MCP
沒有「一個 Schema 走天下」,但 Tool Calling 的數據結構在收斂:arguments 是 JSON object,契約基於 JSON Schema 子集。
| 棧 / 協議 | 工具怎麼聲明 | 調用怎麼發出 |
|---|---|---|
| OpenAI Chat / Responses | tools[].function.parameters,可選 strict | tool_calls[].function.arguments 字符串 |
| Anthropic Messages | tools[].input_schema | tool_use 塊裏的 input 對象 |
| Gemini | function_declarations.parameters | functionCall.args;最終 JSON 另走 responseSchema |
| MCP 2026-07-28 | Tool.inputSchema(協議不替你校驗) | JSON-RPC tools/call 的 params.arguments |
MCP 是發現與傳輸,不是類型系統。inputSchema 聲明形狀,Server 仍要本地 parse + Schema 校驗。字段對照與一份 Schema 三處複用,見MCP 與 JSON Schema。多 Agent 互調走 A2A 的 message/send,技能清單裏同樣掛 Schema——那是 Agent 對 Agent,不是模型對工具。對照A2A vs MCP。
無狀態 MCP 去掉 Session 之後更適合水平擴展,但不會自動修好 arguments。緩存了舊 tools/list,就會把錯誤形狀寫進調用。協議細節見Stateless MCP 解析。
落地校驗與 JSONVue 實操
每個 hop 固定三步:parse → Schema → 業務規則。模型再聰明,也不替代這三步。
- arguments 字符串:JSON.parse;失敗則記下 raw 與 tool_call id,返回可重試的錯誤信封。
- 對照 parameters / inputSchema 做 Draft 2020-12 校驗,輸出 path 與 keyword。
- 業務門:日期範圍合法、枚舉與權限匹配、外鍵存在。通過後再打下游 API。
聯調時把三份 JSON 並排:模型吐出的 arguments、你發給 MCP 或 HTTP 的 body、Server 實際使用的對象。形狀不一致,問題幾乎總在適配層。瀏覽器裏:JSON 格式化確認 parse;JSON Schema 校驗對 arguments 與 Schema 文件;JSON Diff對比模型 arguments 與下游 body。固定 fixture:valid、missing-field、wrong-enum,CI 與手工排查共用。
延伸閱讀:MCP 與 JSON Schema、Structured Output、AI JSON 錯誤指南、A2A vs MCP。
常見問題 FAQ
Agent 和 RAG 是一回事嗎?
不是。RAG 把檢索到的文檔塞進上下文,模型據此生成答案;它可以是 Agent 的一個工具(例如 searchDocs),本身沒有「選工具—執行—再觀察」的循環。沒有工具邊界的 RAG 仍是增強版問答。
Function Calling 過時了,應該只說 Tool Calling 嗎?
文檔和 SDK 標題在變,機制沒有變。OpenAI 仍用 type: function 的 tool;Anthropic / Gemini / MCP 用各自字段名。對內維護一份 canonical Schema,對外生成各家外殼即可,不必爲改名重寫業務。
已經開了 Structured Output,還要校驗工具 arguments 嗎?
要。Structured Output 約束最終答覆;arguments 是另一跳。常見事故是「答覆 Schema 過了,tools/call 仍缺鍵」。兩份 Schema 分文件,每 hop 都 parse + 校驗。
沒有 MCP 能不能做 Agent?
能。MCP 是工具發現與遠程調用的一種協議,不是 Agent 的定義。本地函數、OpenAPI、自建 HTTP 都能當工具,只要 arguments 與 result 是可校驗的 JSON。MCP 的價值是清單與傳輸標準化,尤其是遠程、多客戶端時。
總結與下一步
AI Agent 在 2026 年可以概括成:模型在循環裏選擇行動,運行時執行工具,JSON Schema 描述每一跳的形狀。Tool Calling 與 Function Calling 是同一機制的產品名詞;MCP、A2A、Structured Output 管的是不同 hop,不要共用一份文件硬套。
下一步:列出你係統裏的三份 JSON(定義、arguments、result),確認它們是否同源 Schema;用 JSONVue 跑通一條 valid / 缺字段 / 錯誤枚舉。協議細節讀 MCP 文,最終答覆形狀讀 Structured Output,失敗分層讀 JSON 錯誤指南。