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 调用链应该先稳定。

延伸阅读

更新记录: 首次发布