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 方案