目标:把模块 1/2 的概念变成可运维的生产调用:认证、SDK、请求/响应结构、错误处理与重试、超时与并发、prompt caching、Message Batches。模块结束你应能画出一张"带缓存与降级的调用链路图"。 所有接口事实以官方文档为准(截至 2026-08-30)。 📚 模块 03 重要英文词汇
🎯 学习重点:必考边界是 API key/WIF 与云平台 IAM 的差异;凭据隔离和轮换必须由 workspace 与密钥系统实现。
Claude API 是 https://api.anthropic.com 上的 RESTful API。每个请求的头部(来源: https://platform.claude.com/docs/en/api/overview(访问于 2026-08-30)):
| Header | 值 | 必需性 |
|---|---|---|
x-api-key | Console 生成的 API key | 与 Authorization 二选一 |
Authorization | Bearer <token>(Workload Identity Federation 的短期 token,经 POST /v1/oauth/token 获取) | 与 x-api-key 二选一 |
anthropic-workspace-id | wrkspc_... 工作区 ID | 多工作区 key 必需;其他可选;WIF 不用 |
anthropic-version | 如 2023-06-01 | 必需 |
content-type | application/json | 必需 |
要点:
🔪 架构师犀利细节 01|认证迁移不是换 Header:Anthropic 自营 API 的 key/WIF、Bedrock、Vertex、Foundry 分别依赖不同身份与权限体系。反模式是让业务代码到处拼认证头;正解是把认证、endpoint、模型 ID 映射封装在 provider adapter,并用 workspace/云账号隔离环境、预算和最小权限。
🎯 学习重点:能按实时生成、离线批量、发送前计数、模型发现和文件复用选择正确 endpoint。
正式 API(来源: API overview,同上):
POST /v1/messages(核心)POST /v1/messages/batches(异步批量,50% 折扣)POST /v1/messages/count_tokens(发送前估 token)GET /v1/models(含 max_input_tokens/capabilities)POST /v1/files(上传后 file_id 复用)/v1/skillsBeta:Agents / Sessions / Environments(Claude Managed Agents)。本模块聚焦 Messages + Batches + Count Tokens。
🎯 学习重点:请求最小三件套是 model、max_tokens、messages;响应必须同时读取 content、stop_reason、usage 与 request-id。
🎯 学习重点:max_tokens 必填且请求体有 32MB 硬上限;HTTP 成功后仍要检查内容块和停止原因。
# 认证头 x-api-key 从环境/密钥管理器注入(§1 表格);绝不硬编码进脚本
curl https://api.anthropic.com/v1/messages \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, Claude"}]
}'
(来源: https://platform.claude.com/docs/en/api/messages(访问于 2026-08-30))
请求要点:model + max_tokens(必填,也可为 0 做缓存预热)+ messages;可选 system、tools、tool_choice、stream、stop_sequences、temperature(4.7+ 弃用,见模块 2 §10)。请求体上限 32MB(超限 413 request_too_large)。
响应要点:content 是 block 数组(text / thinking / tool_use / redacted_thinking…),stop_reason、stop_sequence、usage(模块 2 §4 的账本)。每个响应带 request-id 头——报障必带。
🎯 学习重点:SDK 的核心价值是类型化异常、重试、超时、连接和流式管理,不只是少写几行 HTTP。
官方 SDK 的价值(来源: API overview + errors,同上):自动头部管理、类型安全、内置重试与错误处理、streaming 支持、超时与连接管理(含 TCP keep-alive、非流式 10 分钟校验)。
Python(参考代码,需 pip install anthropic):
import anthropic # github.com/anthropics/anthropic-sdk-python
client = anthropic.Anthropic() # 自动读 ANTHROPIC_API_KEY
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
)
print(message.content[0].text)
print(message.usage) # token 账本
print(message._request_id) # 报障用
TypeScript(参考代码,需 npm i @anthropic-ai/sdk):
import Anthropic from "@anthropic-ai/sdk"; // github.com/anthropics/anthropic-sdk-typescript
const client = new Anthropic(); // 读 ANTHROPIC_API_KEY
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});
console.log(message.content);
SDK 细节:重试默认 2 次、指数退避、尊重 retry-after(见 §5);Python SDK v1.0+ 已移除 temperature/top_p/top_k 参数(传了抛 TypeError,来源: https://platform.claude.com/docs/en/about-claude/model-deprecations(访问于 2026-08-30))。
🎯 学习重点:先按错误 type/HTTP 判定“修请求、修权限、等待还是退避”,再决定是否重试;request-id 是报障主键。
(来源: https://platform.claude.com/docs/en/api/errors(访问于 2026-08-30))
| HTTP | type | 含义与处理 |
|---|---|---|
| 400 | invalid_request_error | 请求格式/内容问题;也用于自设 spend limit 触顶(可调高恢复) |
| 401 | authentication_error | key 失效/格式错;检查 Console |
| 402 | billing_error | 账单/支付问题 |
| 403 | permission_error | key 无权访问该资源(如 workspace 限制) |
| 404 | not_found_error | 路径或资源 ID 错 |
| 409 | conflict_error | 状态冲突(并发修改/唯一性冲突);解决后可重试 |
| 413 | request_too_large | 超请求体上限(Messages 32MB / Batch 256MB / Files 500MB) |
| 429 | rate_limit_error | 限流或 spend cap;看 retry-after;tier cap 型 429 无 retry-after 且重试无效(模块 2 §7) |
| 500 | api_error | 内部错误;指数退避重试;持续存在带 request-id 找支持 |
| 504 | timeout_error | 处理超时;考虑 streaming 或 Batch |
| 529 | overloaded_error | 过载;退避重试;流式 200 后也可能以 error 事件出现 |
错误体恒为 JSON:顶层 error(type + message)+ request_id。SDK 抛类型化异常(Python anthropic.NotFoundError 等)——按具体类捕获,别字符串匹配。
🔪 架构师犀利细节 02|429 不是一个故障:有retry-after的速率限制可以等待;无retry-after的 tier/spend cap 型 429 原样重试不会恢复。生产告警至少要按status + error.type + retry-after 是否存在 + model + workspace分维,否则“429 上升”无法判断是突发流量、预算触顶还是加速限制。
🎯 学习重点:默认 2 次重试意味着最多 3 次尝试;确定性 4xx 不重试,瞬时故障才使用退避、抖动和预算。
官方 SDK 对瞬时故障(连接错误、429、5xx)自动重试:默认 2 次,指数退避,尊重 retry-after,可用 max_retries 配置或关闭(来源: errors 文档,同上)。
自己实现时的架构要点(examples/retry_backoff.py 无 key 可跑):
delay = base × 2^n + jitter(jitter 防止重试风暴同相共振)。🔪 架构师犀利细节 03|成功率上升不等于成本不变:SDK 默认 2 次重试即一次逻辑调用最多发出 3 次 API 尝试。Messages 没有真实世界副作用,但已完成却因网络丢响应的尝试仍可能产生 token 与费用;反模式是把重试次数调大来“提高 SLA”,正解是同时设置次数预算、总时限、并发闸和每个逻辑请求的最大成本。
🎯 学习重点:长输出用 streaming 或 Batch,吞吐按 RPM/ITPM/OTPM 三维限速;缓存首写并发会产生竞态 miss。
max_tokens 用 streaming(get_final_message() 拿完整对象)或 Batch 轮询(不需要持续连接,来源: errors "Long requests",同上)。Bad vs Better(超时与并发):
| Bad | Better |
|---|---|
| 非流式 + max_tokens=128000 + 10min HTTP 超时硬扛 | streaming 拿 final message;或 Batch 轮询 |
| 全局并发=100 无客户端限速 | 按 RPM/ITPM/OTPM 三维做客户端令牌桶 |
| 重试无预算无限循环 | 指数退避 + 预算 + 降级链 |
🎯 学习重点:发送前 count_tokens,发送后持久化 usage 四字段;这两步分别服务准入判断与真实成本归因。
count_tokens 精确预估(模块 1)。usage 四字段入库(模块 2 §4),它是成本归因、异常检测(输入突涨=缓存失效或注入)、预算熔断的数据源。message_delta.usage 是累计值(模块 2 §6)。🎯 学习重点:缓存的是逐字节稳定前缀,写入、读取、窗口占用和 ITPM 的计量口径必须分别回答。
(来源: https://platform.claude.com/docs/en/build-with-claude/prompt-caching(访问于 2026-08-30))
🎯 学习重点:多轮对话优先自动缓存,精确控制 tools/system/RAG 前缀时使用显式断点;两者可混用但共享 4 个槽位。
cache_control: {"type": "ephemeral"}——系统自动把断点放到最后一个可缓存 block 并随对话前移。多轮对话首选。cache_control(可设 ttl: "5m" / "1h")——精细控制缓存什么。🎯 学习重点:最多 4 个断点、向前回看 20 blocks、最小 token 门槛和 TTL 起算时刻是高频数字题。
tools → system → messages 顺序拼接,断点及其之前的一切。tool_choice 变化会作废 messages 缓存(tools/system 仍保留)。cache_creation_input_tokens 与 cache_read_input_tokens 同为 0 就是没缓存上。🔪 架构师犀利细节 04|先算回本,再谈命中率:同一前缀只调用两次时,5m 缓存成本系数是1.25 + 0.1 = 1.35,低于两次不缓存的2.0;1h 缓存则是2 + 0.1 = 2.1,反而略贵。1h 写入至少需要两次后续读取才低于三次原价(2 + 0.2 < 3)。因此 1h 适合会复用多次但排队较久的批任务,不适合“一写一读”短会话。
🎯 学习重点:排序原则是稳定且大的前缀靠前、每请求变化的内容靠后;时间戳放断点前会让缓存永久 miss。
tools 定义、大 system prompt、RAG 检索结果、多轮历史、few-shot 示例——稳定前缀靠前、易变内容靠后。经典错误:把每请求变化的 timestamp 放 system 尾部断点之前 → 永远 miss。
🎯 学习重点:Batch 用 50% 折扣换异步延迟;记住 100,000 请求/256MB、24 小时过期、结果保留 29 天。
(来源: https://platform.claude.com/docs/en/build-with-claude/batch-processing(访问于 2026-08-30))
🎯 学习重点:用 custom_id 对账、轮询批状态、下载 JSONL;验证异步且结果顺序不能当业务顺序。
custom_id(^[a-zA-Z0-9_-]{1,64}$)+ 完整 Messages params。succeeded / errored / canceled / expired(后两者不计费)。stream、speed(Fast mode)、store/Threads、cache_hint、max_tokens: 0、research preview。验证是异步的——先用 Messages API 验证请求形状再入批。1h 缓存 TTL(5m 大概率在批处理排队时过期)。🔪 架构师犀利细节 05|批量不是“大号同步调用”:100,000 项和 256MB 取先到者,且单项验证在提交后异步发生;结果必须以 custom_id 关联,不能依赖返回顺序。反模式是把未经验证的请求一次塞满整批;正解是先用 Messages API 做小样契约测试,再按可重放分片提交并持久化 batch_id/custom_id。
🎯 学习重点:用户不等待、允许小时级完成且能管理结果生命周期的任务,才是 Batch 候选。
不需要即时响应的一切:大规模评估(模块 12)、内容审核、数据集加工、批量生成。架构判断:同步链路上每个"用户不等待"的调用都是 Batch 候选。
🎯 学习重点:综合题应覆盖 SDK、分类重试、缓存、Batch/streaming、request-id 与 usage,而不是只给一个 API 调用示例。
Bad:裸 curl 逻辑搬到生产——无 SDK、无重试、401/429/500 一律 catch-all 重试 3 次、每轮重发全部历史、无缓存、批量任务循环调同步 API、错误只打一行 log。
Better:
🎯 学习重点:每个可靠性或成本杠杆都有对应代价,答案要明确延迟、依赖、写入溢价或流量放大。
| 选择 | 得到 | 付出 |
|---|---|---|
| SDK vs 裸 HTTP | 重试/超时/类型/流式全内置 | 少量依赖锁定的心智成本 |
| 自动缓存 vs 显式断点 | 零维护 | 断点不可控(易变尾部会 miss) |
| 1h TTL vs 5m | 高命中(批处理必备) | 写入 2x(vs 1.25x) |
| Batch vs 同步 | 5 折 + 不占同步链路 | 小时级延迟、结果生命周期管理 |
| 重试 2 次默认值 vs 调大 | 个别尾延迟改善 | 重试放大流量(可能触发加速限制) |
🎯 学习重点:高频坑集中在错误误重试、缓存静默 miss、Batch 参数不支持和流内错误漏处理。
type/SDK 异常类分派stream: true 或 max_tokens: 0(直接验证错误)^[a-zA-Z0-9_-]{1,64}$(整批验证失败)🎯 学习重点:重点掌握 retry/backoff/jitter、cache breakpoint/TTL、batch/custom_id 三组关联词。
完整分组版见:模块 03 重要英文词汇。
| 英文术语 | 中文 | 一句话解释 |
|---|---|---|
| API Key | API 密钥 | x-api-key 头携带的 Console 凭据 |
| Workload Identity Federation (WIF) | 工作负载身份联合 | 短期 token(Authorization: Bearer)换取长期 key |
| Exponential Backoff | 指数退避 | base×2^n(+jitter) 的重试间隔策略 |
| Retry Budget | 重试预算 | 最大次数/时限约束,防重试风暴 |
| Prompt Caching | 提示缓存 | 稳定前缀复用:写 1.25x/2x,读 0.1x |
| Cache Breakpoint | 缓存断点 | cache_control 标记;最多 4 个;20-block 回看 |
| TTL (5m / 1h) | 缓存存活时间 | 从请求开始计时;刷新免费 |
| Message Batches | 消息批处理 | 异步批量 API,50% 折扣,24h 过期/29 天取结果 |
| custom_id | 自定义批项 ID | 批内请求的业务标识(结果对账用) |
| request-id | 请求 ID | 每响应必有;报障与追踪的关键 |
| Idempotency | 幂等性 | 重试安全性:请求无副作用但计费仍发生 |
| Client-side Rate Limiting | 客户端限速 | 按三维限流做平滑发送,防 429 |
🎯 学习重点:认证题常与环境隔离结合,可靠性题常与错误分类结合,成本题常要求量化缓存与 Batch。
🎯 学习重点:完成实验后应能画出包含认证、限速、重试、缓存、降级和可观测性的生产调用链。
labs/lab.md;代码:examples/api_walkthrough.py(无 key 校验模式可跑;有 key 可实发)、examples/retry_backoff.py(无 key,退避策略模拟)questions/ + flashcards/flashcards-03.csv04-tool-use/——让 Claude 操作真实世界