很多人一开始就被名字搞晕。其实它们是同一个模型(claude-opus-4-7 / sonnet-4-6 / haiku-4-5),只是到达模型的路径不一样:
路径 A:Anthropic API 直连 你的代码 ─→ HTTP ─→ Anthropic API ─→ Claude(Opus/Sonnet/Haiku) 特点:最底层、最自由、自己写工具循环、独立 API key 计费 路径 B:Claude Code CLI(交互式) 人类 ─→ 终端 REPL ─→ Claude Code 进程 ─→ Anthropic API ─→ Claude 特点:给人用的命令行 IDE,REPL 模式,跟 Max/Pro 订阅绑定 路径 C:Claude Agent SDK(程序化) 你的代码 ─→ Python/TS SDK ─→ subprocess ─→ Claude Code(headless) ─→ Anthropic API ─→ Claude 特点:本质是 Claude Code 的 Python/TS 包装,给程序调的
看清楚没?路径 C 其实是路径 B 套了一层壳。Agent SDK 内部就是 spawn 一个 claude --print --json-stream 子进程,通过 stdin/stdout 跟它对话。
claude 子进程是不是更直接?" — 这是错觉。你那是在重新发明 Agent SDK,且大概率写得更差。装个 pip install anthropic,拿 API key,直接调 messages.create()。最原始最自由。
from anthropic import Anthropic
client = Anthropic(api_key="sk-...")
# 单次调用,自己处理 tool_use 循环
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
tools=[{"name": "search", "description": "...", "input_schema": {...}}],
messages=[{"role": "user", "content": "查下天气"}],
)
# 如果模型返回 tool_use,你要自己执行工具,把结果回传
while response.stop_reason == "tool_use":
result = your_tool_executor(response.content[-1])
response = client.messages.create(
...
messages=[..., {"role": "user", "content": [{"type": "tool_result", ...}]}],
)
response_format={"type": "json_object"} 强制 100% 合法 JSON 输出cache_control: {"type": "ephemeral"},省 90% input tokenthinking={"budget_tokens": 10000}.claude/ 文件系统配置(Skills/Slash commands 全没了)就是 claude 那个命令行工具,给人坐在终端前用的。打开 REPL 模式跟 Claude 对话,让它读文件改代码跑命令。
$ claude
> 帮我看看 src/auth.py 有什么 bug
[Claude 读文件、思考、给出修复建议、问你要不要应用]
它也有 --print headless 模式(吐一次结果就退出),但这本来不是给程序调的,是给 shell 脚本组合用的:
$ claude --print "git diff 干啥的,一句话总结"
~/.claude/ 配置深度集成(Skills、Slash commands、Memory)2025 年 Anthropic 把 Claude Code 的能力包装成了 Python/TS 库,叫 Agent SDK。它本质上是「让程序用上 Claude Code 全套能力」。
from claude_agent_sdk import query, ClaudeAgentOptions
async for message in query(
prompt="帮我找 src/ 里所有 TODO 并整理",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Glob", "Grep"],
model="claude-opus-4-7",
),
):
print(message)
# Tool 循环 SDK 帮你跑完,你只需要消费结果
你的 Python 代码
│
│ query(prompt, options)
▼
Agent SDK Python 包装
│
│ 把 ClaudeAgentOptions 翻译成 CLI flag
│ subprocess.Popen(["claude", "--print", "--json-stream", ...])
▼
Claude Code CLI 子进程(Node.js)
│
│ 内部跑 tool 循环 / hook / subagent 调度
│ HTTPS to api.anthropic.com
▼
Anthropic API
│
▼
Claude (Opus/Sonnet/Haiku)
AgentDefinition,主 agent 自动委派复杂任务.claude/ 文件系统配置自动加载| 维度 | 路径 A: API 直连 | 路径 B: Claude Code CLI | 路径 C: Agent SDK |
|---|---|---|---|
| 调用方 | 程序 | 人类(REPL) | 程序 |
| 编程接口 | HTTP / SDK | 命令行 | Python / TypeScript |
| Tool 循环 | 自己写 | 内置 | 内置 |
| Subagent | 自己造 | 支持 | 支持 |
| Hook | 无 | 有 | 有 |
| MCP | 自己接 | 原生 | 原生 |
| JSON mode | 强制 100% | 不透传 | 不透传 |
| Prompt caching | 手动控制 | 自动但不可见 | 自动但不可见 |
| 计费 | 独立 API key pay-as-you-go | Max/Pro 订阅 或 API key | Max SDK credit ($100/$200 月) |
| 启动延迟 | ~50ms HTTP | ~1-2s | ~0.5-1s spawn |
| 并发能力 | 极强 (asyncio) | REPL 不并发 | 受 subprocess 限 |
| 新 API 特性延迟 | 0 天 | 几周 | 几周 |
三个池子互相独立,不互通:
| 计费池 | 覆盖范围 | Max 20x 给的额度 |
|---|---|---|
| Interactive credit | Claude.ai 网页 / Claude Code 终端交互 | "无限"用(合理范围) |
| Agent SDK credit | Agent SDK 程序化调用 | $200/月独立额度 |
| API key | messages.create() 直连 |
不给,独立 pay-as-you-go |
我用 Agent SDK + Max 订阅 + Opus 4.7 给自己的微信群造了个机器人,48 小时迭代了 23 个 commit。下面是真实选型逻辑:
| 场景 | 用哪条路径 | 为什么 |
|---|---|---|
| 主回复(群友 @ 我) | Agent SDK | 要 Tool 循环、Subagent、Hook、MCP,SDK 全包 |
| 早报(每天 8:55) | Agent SDK + Extended Thinking | 多源综合,要长考。Opus 4.7 thinking 输出更深度 |
| 意图分类(每条群消息) | Agent SDK + Haiku 4.5 | 单步判断"是不是研究类问题",省钱用 Haiku |
| self_modify(bot 改自己代码) | Agent SDK + Opus 4.7 + Plan mode | 改代码风险高,先 plan 后改 |
| JSON 结构化输出 | 理论上 API 直连 | 但实际 Opus 4.7 在 SDK 里"听话度"够用,没切 |
主架构 Agent SDK + Max 订阅 + Opus 4.7。 打开了 Subagent(researcher / finance_analyst / group_summarizer / search_dispatcher)、 Hook(工具调用审计 + 危险命令拦截)、MCP(自建 8 个垂直 search 工具)、 Skills(人设 / 早报员)等全套。
个别 deterministic 场景(如热点新闻 JSON 输出)预留切 API 直连的口子, 但只在 SDK 真不行的时候才用。不要为了切而切,混合架构有维护成本。
不一定。HTTP 启动是快,但要自己写 tool 循环 = 一次任务多次 round-trip。 SDK 一次 query() 内部跑完,对终端用户感受未必更慢。 Max 订阅 $200/月覆盖大量调用,API 按 token 算可能更贵。
claude --print 是为程序设计的。但你不需要自己 spawn 它 — Agent SDK 已经替你包装好了。
你"自己 spawn claude" = 重写 Agent SDK。
SDK 支持所有 Anthropic 模型,包括最新的 Opus 4.7:
ClaudeAgentOptions(model="claude-opus-4-7")
SDK 在 tool 生态、subagent、hook、MCP 这些层面比 API 强很多。 API 强在 JSON mode、caching 控制、batch 这些底层旋钮。 不是"谁强",是"侧重不同"。