这篇文章的方向很明确:面向备考 Anthropic 官方 Claude Certified Architect 认证的开发者,把前置知识里的 API 部分补齐。Part 3 的重点落在 API 接入、请求编写、认证鉴权、批量任务和常见报错处理上。文章会从实际开发者的视角,把认证涉及到的 API 知识点拆成可以直接落地的操作步骤。
1. Claude API 核心能力速览
在开始调用之前,先把 Claude API 的能力边界和认证考试关注点整理成一张表。这张表同时适合作为备考笔记和开发选型参考。
| 能力项 | 说明 |
|---|---|
| API 服务类型 | 海外云服务 API,由 Anthropic 官方提供,需在其 Console 创建 API Key 后调用 |
| 核心 Endpoint | /v1/messages(Messages API,当前主推)、/v1/complete(Text Completions,旧版) |
| 认证方式 | x-api-key请求头 +anthropic-version版本头,或Authorization: Bearer方式 |
| 模型命名 | Claude 系列模型,如claude-sonnet-4-5、claude-opus-4-1等,实际可用模型以官方列表为准 |
| 主要功能 | 文本生成、多轮对话、工具调用(Tool Use)、结构化输出、长上下文(1M token 级模型)、流式响应 |
| API 类型 | REST API,支持 HTTP 调用 |
| 官方 SDK | Python SDK、TypeScript SDK |
| 命令行工具 | Claude Code,可接入 API 或订阅账号使用 |
| 批量任务 | 支持批量请求接口(Message Batches API),成本更低,适合异步大批量任务 |
| 是否支持本地部署 | 不支持,Claude API 为云端服务,需联网调用 |
| 适合场景 | 智能客服、Agent 应用、代码生成、文档分析、内容生产、认证备考开发实践 |
Claude Certified Architect 认证的前置知识会反复围绕“模型能力边界、API 设计、上下文工程、安全与合规、应用架构”这几个维度展开。Part 3 直接聚焦 API 调用本身,因为所有的架构设计和成本优化,最终都要落在 API 请求是否正确、是否可维护、是否能控制成本这三个问题上。
需要特别说明的是,Claude API 是 Anthropic 提供的海外云服务。开发者在中国大陆境内访问或部署相关应用时,需要确认自身的网络访问合规性,并且严格遵守 Anthropic 的服务条款、所在地区的法律法规,以及数据出境相关的合规要求。这篇文章只讨论技术实现,不涉及任何规避网络限制的方法。
2. 适用场景与使用边界
Claude API 的典型使用场景可以分成四类,每一类在认证考试里都有对应的架构讨论。
第一类是对话与内容生成应用。最常见的如客服机器人、写作助手、代码解释器。这类应用直接调用 Messages API,把用户输入和历史上下文一起传给模型,拿到文本结果后返回给前端。实现难度低,但要注意上下文窗口耗尽、响应延迟和 token 成本这三件事。
第二类是 Agent 与工具调用应用。开发者通过 Tool Use 能力,让 Claude 在回答过程中调用外部函数,比如查数据库、调天气接口、执行代码。这是 Certified Architect 考试的重点内容之一,因为它涉及“模型如何决定调用哪个工具”“工具返回结果如何回传给模型”“多次工具调用如何控制循环次数”等架构问题。
第三类是异步批量处理任务。比如把几万条客服工单做分类、把大量 PDF 做摘要提取、批量生成商品文案。这种场景不应该用同步请求逐条调用,而是用 Message Batches API,把任务打包提交,后台异步处理,成本比同步调用低,但延迟更高。
第四类是代码与集成类场景。包括 Claude Code 命令行工具、MCP(Model Context Protocol)接入、IDE 插件等。这类场景的价值在于把 Claude 模型能力嵌入到开发工具链里,让开发者不离开编辑器就能完成代码生成、重构和测试。
使用边界方面,有四个点是开发者必须遵守的:
- 数据合规。API 请求会包含业务数据。涉及个人信息、敏感数据、商业秘密时,必须先确认数据出境和存储是否符合当地法律和企业内部规定。考试里会频繁考察“敏感数据是否应该发往第三方 API”“如何做数据脱敏”这类问题。
- 内容安全。Claude 有内置的内容安全策略,开发者不能故意构造提示词绕过限制。应用上线前应该配置内容过滤或人工审核环节。
- 服务条款。不能利用 API 做自动化爬虫、批量生成恶意内容、规避平台限制等违反服务条款的事情。
- 版权与授权。如果应用会处理他人作品、肖像、声音或版权素材,必须获得合法授权。生成内容的版权归属和发布边界也要在应用设计中明确。
Certified Architect 考试不会只考“能不能调通 API”,更多是考“在什么样的架构下调用 API 才是安全、高效、可维护的”。所以下面的每节内容,都会在操作步骤之外补充认证角度的理解。
3. Claude API 环境准备与前置条件
在写第一个请求之前,需要先完成账号、密钥、SDK 三部分准备工作。按顺序操作即可,不要跳步。
3.1 账号与 API Key
调用 Claude API 需要先有一个 Anthropic Console 账号。注册、登录后进入 Console,在 API Keys 页面创建密钥。
创建时需要关注三点:
- API Key 只在创建时完整显示一次,之后无法再次查看,必须立即复制保存到本地密码管理器。
- API Key 是敏感凭证,任何情况下都不要提交到 Git 仓库、不要写死在客户端代码里、不要粘贴到公开论坛或调试日志中。
- 认证考试和实际项目中的标准做法是使用环境变量保存密钥,服务端通过
process.env.ANTHROPIC_API_KEY或os.environ["ANTHROPIC_API_KEY"]读取。
# Linux / macOS 临时设置 export ANTHROPIC_API_KEY="sk-ant-xxxxxxx" # Windows PowerShell 临时设置 $env:ANTHROPIC_API_KEY = "sk-ant-xxxxxxx"长期使用建议写进.bashrc、.zshrc或系统环境变量配置中。注意配置文件本身也要设置权限,避免其他系统用户读取。
3.2 Python 环境与 SDK 安装
开发环境方面,推荐使用 Python 3.9 以上版本。首先创建虚拟环境,避免依赖冲突。
python -m venv claude-env source claude-env/bin/activate # Windows 下执行 claude-env\Scripts\activate然后安装官方 SDK。
pip install anthropic安装完成后可以检查版本。
pip show anthropic如果是在 Node.js 项目中使用,安装 TypeScript SDK。
npm install @anthropic-ai/sdk3.3 网络与代理合规说明
Claude API 是海外服务,调用时会请求api.anthropic.com域名。在中国大陆境内的网络环境下,访问该服务的合规性需要开发者自行确认。企业用户尤其要确认公司网络策略和数据出境审批流程。
一个稳妥的做法是:在代码层面预留 Base URL 配置项,这样当企业有合规网关或代理时,可以通过环境变量切换:
from anthropic import Anthropic client = Anthropic( api_key=os.environ.get("ANTHROPIC_API_KEY"), base_url=os.environ.get("ANTHROPIC_BASE_URL", "https://api.anthropic.com") )这样做的好处是代码本身不绑定特定网络方案,部署到不同环境时只需要改环境变量。
4. 第一个 Claude API 请求示例
4.1 通过 curl 验证 API Key 是否可用
拿到 API Key 之后,第一步先用 curl 发一个最小请求,验证 Key 有效性和网络连通性。这一步能快速排除 SDK 层面的干扰。
curl https://api.anthropic.com/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "max_tokens": 1024, "messages": [ {"role": "user", "content": "用一句话解释 HTTP 状态码 429 的含义"} ] }'这里有几个关键点:
x-api-key是 API Key 的传递方式。anthropic-version是 API 版本号,Anthropic 要求请求中必须带这个请求头,否则会报错。目前仍然被广泛使用和兼容的版本是2023-06-01,新版本号和兼容策略以官方文档为准。model参数指定模型。具体可用的模型名和版本需要以 Anthropic 官方模型列表为准,不同账号可能有不同可用范围。max_tokens是允许模型生成的最大 token 数,这个参数是必填的,不填会直接报错。messages数组里是对话消息,用user和assistant角色交替。
如果返回200 OK和一段文本内容,说明 API 调用链路已通。
4.2 通过 Python SDK 调用
curl 验证通过后,用 Python SDK 编写更完整的调用逻辑。
import os from anthropic import Anthropic client = Anthropic( api_key=os.environ.get("ANTHROPIC_API_KEY"), ) response = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, messages=[ {"role": "user", "content": "请用中文解释 Claude API 的 Messages API 和 Text Completions API 的区别。"} ] ) print(response.content[0].text)运行后,控制台会输出模型返回的文本。响应对象的结构值得注意:
response.content是一个内容块列表,通常第一个元素的.text就是纯文本结果。response.model返回实际使用的模型名。response.usage.input_tokens和response.usage.output_tokens分别记录输入和输出的 token 数量。response.stop_reason表示停止原因,end_turn表示模型正常结束,如果看到max_tokens,说明输出被截断,需要增加max_tokens或优化提示词。
4.3 Node.js SDK 调用示例
import Anthropic from '@anthropic-ai/sdk'; const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY, }); const response = await client.messages.create({ model: 'claude-sonnet-4-5', max_tokens: 1024, messages: [ { role: 'user', content: '用一句话说明 REST API 的最佳实践。' } ], }); console.log(response.content[0].text);Node.js 环境要求 18 以上版本,SDK 默认使用 fetch,比较方便。
5. Claude API 核心功能测试与验证
API 调通之后,按功能模块逐个测试。每个功能都用“测试目的 + 测试输入 + 预期结果 + 判断标准”的格式来验证,这也是把考试知识转成实战能力的过程。
5.1 多轮对话测试
多轮对话的关键是正确维护messages数组。系统提示(system)放在请求顶层,历史对话按user和assistant交替排列。
import os from anthropic import Anthropic client = Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")) conversation = [ {"role": "user", "content": "我准备考 Claude Certified Architect 认证,给我一个三周学习计划。"} ] response = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, system="你是一位经验丰富的 AI 架构师,擅长为开发者制定学习路径。", messages=conversation ) print(response.content[0].text) # 第二轮:把模型回答加入历史 conversation.append({"role": "assistant", "content": response.content[0].text}) conversation.append({"role": "user", "content": "这个计划里的第三周内容,可以再细化到每天吗?"}) response = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, system="你是一位经验丰富的 AI 架构师,擅长为开发者制定学习路径。", messages=conversation ) print(response.content[0].text)多轮对话最容易犯的错误是历史消息没有按角色轮流传,或者把system也塞进messages数组。API 对角色顺序有要求,如果出现连续两个相同角色,部分模型版本会报错或导致对话质量下降。
从认证考试角度看,多轮对话还涉及上下文管理策略:是每次都传全部历史,还是只传最近 N 轮?这直接关系到 token 成本和上下文窗口占用。实际项目中常见做法是滑动窗口截断,只保留最近 10 到 20 轮对话,加上一个动态摘要模块压缩早期内容。
5.2 流式输出测试
流式输出(Streaming)适合聊天机器人和需要逐字展示响应的场景。用户感知延迟更低,同时可以尽早获取输出内容。
import os from anthropic import Anthropic client = Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")) with client.messages.stream( model="claude-sonnet-4-5", max_tokens=1024, messages=[ {"role": "user", "content": "给我介绍一下 Claude API 的流式响应机制。"} ] ) as stream: for text in stream.text_stream: print(text, end="", flush=True)流式输出返回的是增量文本片段,而不是一次性返回完整响应。开发时要特别注意:流式响应的 token 统计在结束事件中返回,不能在首个事件里获取最终 usage 数据。
在考试里,流式输出对应的架构问题通常是“如何把流式响应转发给前端”“后端是否需要缓存完整响应用于审计”“流中断后如何恢复”。后端如果做转发,还需要考虑缓冲区和超时机制。
5.3 长上下文测试
Claude 系列支持很大的上下文窗口,部分模型达到 1M token 级别。这个能力对处理长文档、代码仓库、历史对话非常有价值。
实际测试时,可以提交一份长文档,要求模型定位其中特定信息:
import os from anthropic import Anthropic client = Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")) with open("./data/sample_long_document.md", "r", encoding="utf-8") as f: long_doc = f.read() response = client.messages.create( model="claude-sonnet-4-5", max_tokens=2048, messages=[ {"role": "user", "content": f"下面是文档内容:\n\n{long_doc}\n\n请找出文档中关于上下文工程的所有建议,并整理成列表。"} ] ) print(response.content[0].text)判断成功的标准是:模型能准确从长文档中定位信息,而不是泛泛回答。如果 1M 上下文超长,会返回400错误,提示信息类似 “this model's maximum context length is ... tokens”。这里要区分是请求的输入 token 超过了窗口上限,还是输入加上最大输出 token 超过了上限。
长上下文场景的架构设计重点有两个:
- 不是所有内容都需要直接塞进上下文。文档检索、RAG、分块摘要往往比“全文塞入”成本更低、效果更稳定。
- 长上下文的 token 成本是线性增长的。成本估算公式是
(输入 token 数 × 输入单价) + (输出 token 数 × 输出单价)。考试里出现成本计算时,用这个公式基本不会错。
5.4 工具调用(Tool Use)测试
工具调用是 Claude Certified Architect 考试的必考内容,也是 Agent 应用的核心能力。它让模型在回答时请求调用你提供的函数,然后你把函数执行结果回传给模型,模型再基于结果生成最终回答。
先定义一个简单的工具:获取服务器状态。
import os import json from anthropic import Anthropic client = Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")) tools = [ { "name": "get_server_status", "description": "获取指定服务器的当前状态,包括 CPU、内存和磁盘占用率", "input_schema": { "type": "object", "properties": { "server_id": { "type": "string", "description": "服务器 ID,例如 server-01" } }, "required": ["server_id"] } } ] messages = [ {"role": "user", "content": "请检查 server-01 这台服务器的运行状态。"} ] response = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, tools=tools, messages=messages ) # 模型返回工具调用请求 for block in response.content: if block.type == "tool_use": print(f"模型请求调用工具: {block.name}") print(f"参数: {block.input}") # 模拟执行工具 tool_result = { "server_id": block.input["server_id"], "status": "healthy", "cpu": 15.2, "memory": 31.4, "disk": 47.0 } # 把工具结果回传给模型 messages.append({"role": "assistant", "content": response.content}) messages.append({ "role": "user", "content": [ { "type": "tool_result", "tool_use_id": block.id, "content": json.dumps(tool_result) } ] }) final_response = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, tools=tools, messages=messages ) print("\n最终回答:") print(final_response.content[0].text)工具调用的核心理解点:
- 模型不会真的执行工具,它只是请求调用。真正执行的是你的代码。
- 工具执行结果必须通过
tool_result内容块回传给模型,并关联到对应的tool_use_id。 tool_use_id是连接“模型请求工具调用”和“工具返回结果”的唯一标识,不能搞错,否则 API 会报错。- 一次回复里可能包含多个
tool_use块,需要循环处理每个工具调用,再把所有结果一次性回传。
认证考试里,工具调用相关的架构问题集中在:工具数量上限、工具描述如何影响调用准确率、工具调用循环如何防止死循环、超时和错误结果如何处理。实践中的建议是设置最大工具调用轮数,比如 5 轮,达到上限后强制终止并返回当前结果。
5.5 结构化输出测试
用 Claude API 生成 JSON 结构数据时,最简单也最稳的方法是:先声明输出格式要求,然后让模型返回 JSON,再做一次 JSON 解析校验。
import os import json from anthropic import Anthropic client = Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")) response = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, system="你是一个数据结构化抽取助手。请只输出 JSON,不要输出任何其他文字。", messages=[ {"role": "user", "content": "从下面这段客服工单中抽取字段:客户的姓名、地区、问题类型、紧急程度、处理状态。\n\n工单内容:客户张先生来自上海,反馈昨天下午开始无法登录系统,报错提示验证码错误。多次重试仍无法解决,客户表示非常着急,希望今天内处理。"} ] ) try: data = json.loads(response.content[0].text) print(json.dumps(data, ensure_ascii=False, indent=2)) except json.JSONDecodeError as e: print("JSON 解析失败,原文如下:") print(response.content[0].text) print("错误:", e)结构化输出的稳定性可以通过改进提示词来提升:给出 JSON 字段名和类型定义、提供示例、强调只输出 JSON、要求禁用 markdown 代码块标记。更工程化的方案是使用 Tool Use 强制模型按 JSON Schema 输出,但这需要额外处理工具调用流程,适合对稳定性要求极高的场景。
6. Claude API 请求参数与认证体系详解
理解了基本调用后,需要把请求参数和认证体系系统地过一遍。这部分既是开发基础,也是考试直接考察的内容。
6.1 Messages API 必填参数
Messages API 接收 JSON 格式的请求体,常见的参数如下:
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
model | string | 是 | 模型名称,如claude-sonnet-4-5 |
max_tokens | integer | 是 | 最大输出 token 数,必填 |
messages | array | 是 | 对话消息列表,角色为user或assistant |
system | string | 否 | 系统提示词,说明模型的身份和行为 |
temperature | number | 否 | 采样温度,0 到 1 之间,默认值因模型而异 |
top_p | number | 否 | 核采样参数,一般和 temperature 二选一使用 |
stop_sequences | array | 否 | 停止序列,模型生成到该字符串时停止 |
stream | boolean | 否 | 是否启用流式返回 |
tools | array | 否 | 工具定义列表 |
tool_choice | object/string | 否 | 控制工具调用行为,如auto、any、none |
metadata | object | 否 | 用户自定义元数据,可用于追踪请求 |
max_tokens是最容易被忽略的必填参数。如果忘记设置,API 会返回参数错误。考试中也常考这一点,因为很多新手把max_tokens当成可选参数。
6.2 认证请求头
Claude API 的认证方式主要有两种。第一种是标准方式,通过请求头传递:
x-api-key: <你的 API Key>anthropic-version: 2023-06-01
第二种是 OAuth 或 Bearer Token 方式,适用于通过身份提供商获得的访问令牌:
curl https://api.anthropic.com/v1/messages \ -H "Authorization: Bearer <访问令牌>" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "max_tokens": 1024, "messages": [{"role": "user", "content": "你好"}] }'用x-api-key的请求中也可以同时携带Authorization头,但官方文档通常建议选择其中一种,避免混淆。考试中常见的错误题是:忘记带anthropic-version头,或者把 API Key 放在Authorization: Bearer里但格式不正确。
另外要说明的是,客户端应把 API Key 放在服务端环境变量中,由服务端与 Claude API 通信,再转发结果给前端。直接在前端代码里暴露 API Key 是严重的安全事故。
6.3 响应结构说明
Messages API 的响应结构:
{ "id": "msg_xxxxx", "type": "message", "role": "assistant", "model": "claude-sonnet-4-5", "content": [ { "type": "text", "text": "这是模型的回答内容。" } ], "stop_reason": "end_turn", "stop_sequence": null, "usage": { "input_tokens": 56, "output_tokens": 32 } }content是内容块数组,不只是纯文本字符串。因为content里可能是text块,也可能是tool_use块,甚至可能有多个文本块。开发时应该遍历content数组,按块类型处理,不能直接假设content是字符串。
stop_reason的常见取值:
end_turn:模型自然结束。max_tokens:输出达到了max_tokens限制。stop_sequence:命中了停止序列。tool_use:模型请求调用工具。
这里有一个实际开发中常见的坑:如果看到stop_reason是max_tokens,说明回答被截断了。此时不要直接把不完整的文本展示给用户,更不要作为最终结果入库。应该适当提高max_tokens,或者把当前输出追加到对话历史中让模型继续生成。
7. Claude API 批量任务与工程化落地
认证考试不要求背代码,但要求理解批量任务的设计思路和成本优化策略。实际项目中也是同样的要求。
7.1 批量接口 Message Batches API
对于大批量、不需要实时响应的任务,应该使用 Message Batches API。它允许你把最多一定数量的请求打包提交,Anthropic 在后台异步处理。因为是异步批量,单位成本比同步请求更低。
典型使用流程:
- 把每个独立请求构造成一个 JSONL 行,包含
custom_id、params等字段。 - 将 JSONL 文件内容作为请求体提交到
/v1/messages/batches。 - 拿到
batch_id。 - 轮询批量任务状态。
- 任务完成后,下载结果文件。
批量接口适合的典型任务:历史客服工单分类、新闻文章摘要、批量数据清洗、大量文档的字段抽取、离线生成的商品文案。共同特点是“任务量大”、“不要求秒级返回”、“单条失败不影响整体”。
7.2 同步请求的批量任务设计
没有开通批量接口时,也可以用同步请求组织批量任务。下面是 Python 伪代码示例,展示了一个带重试和并发控制的批量处理框架:
import os import time from concurrent.futures import ThreadPoolExecutor, as_completed from anthropic import Anthropic client = Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")) def process_single_item(item): """处理单条文本,返回结果字典。""" try: response = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, messages=[ {"role": "user", "content": f"请对下面的用户反馈做情感分类:正面/负面/中性。\n\n{item['text']}"} ] ) return { "id": item["id"], "status": "success", "result": response.content[0].text, "usage": response.usage } except Exception as e: return { "id": item["id"], "status": "failed", "error": str(e) } def run_batch(items, max_workers=4): """批量执行,限制并发数。""" results = [] with ThreadPoolExecutor(max_workers=max_workers) as executor: future_map = {executor.submit(process_single_item, item): item for item in items} for future in as_completed(future_map): results.append(future.result()) return results # 模拟要处理的工单数据 items = [ {"id": 1, "text": "你们的服务真的很棒,我会推荐给朋友。"}, {"id": 2, "text": "发货太慢了,等了一周还没收到。"}, {"id": 3, "text": "商品质量一般,颜色和图片有偏差。"} ] results = run_batch(items, max_workers=3) for r in results: print(r)这段代码的关键设计:
ThreadPoolExecutor限制并发数。常见做法是从 1 开始调,逐步增加到 5 或 10,观察是否触发限流。- 单条失败不影响整体,失败记录保留错误信息。
- 每条结果都附带
usage,方便后续汇总 token 成本和核算费用。
实际项目中,建议把结果写入数据库或表格日志,而不是输出到控制台。整个批量流程要支持断点续跑,理想的方式是把每个请求的输入、输出、状态、重试次数存成结构化记录。
7.3 批量任务的重试与限流策略
CLI 或 Server 调用时,经常遇到529状态码。这个错误码的意思是:服务端过载(server overloaded),是一个临时问题,通常稍后重试即可。
处理原则是使用指数退避重试,而不是立即高频重试。下面是一个简单的重试封装:
import time def call_with_retry(fn, max_retries=5, base_delay=1.0): """带指数退避的重试调用。""" for attempt in range(max_retries): try: return fn() except Exception as e: # 对 429 和 529 这类临时错误做重试 if attempt == max_retries - 1: raise e delay = base_delay * (2 ** attempt) print(f"请求失败,{delay:.1f} 秒后重试... ({attempt + 1}/{max_retries})") time.sleep(delay) # 使用示例 response = call_with_retry( lambda: client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, messages=[{"role": "user", "content": "你好"}] ) )限流的另一个来源是每分钟请求数(RPM)或每分钟 token 数(TPM)配额。如果达到配额,服务端返回429。应对思路是降低并发数、在请求间隔中加入固定延迟、启用流式响应减少单次等待时间。
7.4 成本估算与控制
Claude API 的成本计算模型是“按 token 计费”。开发前应该先估算成本,避免月底账单超标。
成本估算公式:
单次请求成本 = (输入 token 数 × 输入单价) + (输出 token 数 × 输出单价)控制成本的手段按优先级排列:
- 减少输入 token:用摘要替代长历史,用检索替代全文塞入。
- 控制输出长度:设置合理的
max_tokens,不要让模型无限制生成。 - 使用缓存:如果多次请求的 system prompt 相同,可以使用提示词缓存降低重复输入的 cost。
- 批量接口:非实时任务用 Message Batches API,拿到更低单价。
- 模型选型:简单任务用便宜模型,复杂任务才用顶配模型。
考试里常出现的成本题,本质上就是“输入和输出 token 分别计费”加上“不同模型单价不同”这两个知识点的组合。
8. Claude API 性能观察与调优
Claude API 是云端 API,它没有本地显存占用这个概念,但性能观察仍然重要。核心指标是三个:端到端延迟、首字延迟、吞吐量。
8.1 延迟分析
一个完整请求的时间由这几部分构成:
- 网络传输时间:客户端到数据中心。
- 服务端排队时间:请求多时会增加。
- 模型推理时间:主要由输入长度、输出长度和模型大小决定。
- 客户端等待时间:取决于是否有流式响应逻辑。
降低延迟的手段:
- 使用流式输出,让用户体验到“第一个字很快”。
- 减少输入 token,避免大量重复历史内容。
- 对非核心任务使用批量接口,不占用同步链路。
- 在靠近服务区域的网络环境下部署后端,缩短网络传输时间。
注意这里不讨论任何本地部署或代理优化,只讨论正常的服务端架构调整。
8.2 Tokens 使用量观察
每次响应返回的usage对象是成本核算和性能分析的基础数据。建议在日志中记录以下信息:
- 请求 ID。
- 模型名称。
- 输入 token 数。
- 输出 token 数。
- 完整的 stop_reason。
- 单次请求耗时。
- 是否发生重试及重试次数。
有了这些日志,才能准确回答“这个功能的月度 API 成本是多少”“哪个环节消耗 token 最多”“有没有异常请求”这三个问题。
8.3 性能调优经验
从实际项目的通用经验来看,最容易带来明显收益的调优动作有三个:
第一,把长文档做分块和摘要,不要连原文带历史一起塞进上下文。这个动作可能把 token 成本降低 50% 以上。
第二,让模型只输出关键内容,不要输出解释性废话。比如在 system prompt 里写“只返回 JSON”,在需要 JSON 的场景中能显著减少输出 token。
第三,系统提示词写成稳定的、不易变的内容,这样可以启用提示词缓存,显著降低重复输入的 cost 和延迟。注意缓存机制和计费规则以官方文档为准。
9. Claude API 常见问题与排查方法
这一节把最常遇到的 API 问题整理成排查表。开发和生产环境都要靠它来快速定位问题。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
请求返回401 authentication_error | API Key 无效、已撤销或格式错误 | 检查环境变量中的 API Key 是否完整 | 重新复制 API Key,更新环境变量 |
请求返回403 permission_error | 账号没有该模型的访问权限 | 查看 Console 中的模型可用范围 | 改用账号可用的模型,或联系账号管理员 |
请求返回404 model_not_found | 模型名称拼写错误或已下线 | 对照官方模型列表核对模型名 | 修正model参数 |
请求返回400,提示 context length 超限 | 输入 token + 输出 token 超过模型上下文窗口 | 检查usage.input_tokens和max_tokens之和 | 减少输入内容,分块处理;或提高max_tokens(如果窗口允许) |
请求返回429 | 触发速率限制或配额不足 | 查看响应头中的限流字段 | 降低并发、加重试退避、检查配额 |
请求返回529 | 服务端过载,临时性问题 | 查看错误信息是否为 overloaded | 使用指数退避重试 |
请求返回529且持续出现 | 请求量过大或网络链路不稳定 | 观察重试次数和成功率 | 降低并发,启用批量接口,分时段处理 |
Windows 命令行执行claude显示“无法将claude项识别为 cmdlet、函数、脚本文件或可运行程序的名称” | Claude Code 未安装或未加入 PATH | 检查是否完成安装,重新打开终端 | 重新安装或手动添加 PATH,重开 PowerShell |
claude命令可以执行但连接不上 API | API Key 未配置或配置错误 | 运行claude --version和简单对话测试 | 设置ANTHROPIC_API_KEY环境变量,重启终端 |
Python 脚本报ModuleNotFoundError: No module named 'anthropic' | SDK 未安装或虚拟环境未激活 | 检查pip show anthropic | 激活虚拟环境后执行pip install anthropic |
| 返回内容出现中英文混杂或格式混乱 | 提示词未明确语言和格式要求 | 检查 system prompt | 在提示词中明确“请使用简体中文回答,按 Markdown 格式输出” |
返回max_tokens截断 | 输出长度超过max_tokens | 检查stop_reason | 提高max_tokens,或优化提示词让模型简洁回答 |
| 工具调用结果回传报错 | tool_use_id不匹配或格式错误 | 检查tool_result结构 | 确保tool_use_id来自对应tool_use块的id |
| 批量任务部分请求失败 | 单条请求超时或参数不合法 | 记录每条请求的 error 信息 | 对失败请求单独重试,检查参数格式 |
在 Windows 环境下,最常见的“非代码”问题是环境变量没有生效。修改完ANTHROPIC_API_KEY后,需要重新打开终端,或者执行refreshenv刷新环境变量,否则新的值不会加载进来。
还有一个容易忽略的点:有的代码把 API Key 写到代码文件里直接运行,这种项目一旦分享到 GitHub 就等于泄露密钥。标准做法是写环境变量,并通过.gitignore排除.env文件(如果使用 dotenv)。
10. Claude Certified Architect 认证备考与工程实践建议
认证考试不会只考 API 调用语法,而是会围绕 API 能力构建完整的架构方案。这里把 API 相关的备考知识整理成可执行的学习路径。
10.1 核心知识检查清单
备考时,按下面的清单自检,确认每个点都能用“是什么、怎么用、什么场景用、有什么坑”四问来回答:
- Messages API 和 Text Completions API 的区别,为什么 Messages API 是主推方向。
- 认证方式:API Key 与 OAuth/Bearer Token 的区别和使用场景。
max_tokens、temperature、top_p、stop_sequences对生成行为的影响。- 上下文窗口、上下文截断、token 成本计算。
- 流式输出的实现机制和架构影响。
- Tool Use 的完整流程:定义工具、模型决策、执行工具、回传结果。
- 批量任务的设计:同步批量、Message Batches API、失败重试。
- 错误处理:401、403、404、400、429、529 的含义和应对。
- 安全合规:API Key 管理、数据隐私、内容安全、版权边界。
- 模型选型:不同任务的模型选择策略。
10.2 建议动手做的五个实验
只看文档很难真正理解 API。建议在本地完成下面五个实验,每个实验控制在 1 小时内:
实验一:调用 Messages API 完成一个 JSON 结构化输出,并成功解析结果。
实验二:实现一个带系统提示词的多轮对话,验证历史消息的轮转维护方式。
实验三:用工具调用实现“根据输入的城市名查询天气并返回出行建议”。
实验四:把 100 条测试文本批量分类,输出结果 CSV,记录总的 token 用量。
实验五:对比同一个需求在“全文塞入”和“分块摘要后塞入”两种方式下的 token 消耗差异。
这五个实验做完,API 部分的前置知识就基本扎实了。
10.3 工程实践建议
部署到生产环境前,下面这些工程化建议值得过一遍:
- API Key 只存在服务端,用环境变量或密钥管理服务保存。
- 所有请求和响应都记录日志,至少包含
request_id、model、usage、stop_reason、耗时和错误码。 - 对消息内容做合规检测,涉及敏感数据时先脱敏再发送。
- 建一个统一的 API 网关层,把模型调用、成本统计、权限控制集中在一层,而不是让每个业务直接各调各的。
- 批量任务要支持暂停、恢复和失败重跑,不要设计成一次性脚本。
- 上线前设置预算上限和配额告警,防止异常调用导致费用失控。
- 定期复核模型效果,因为模型版本更新可能带来行为差异,测试用例集要保持可回归。
10.4 避开常见备考误区
第一个误区是只背 API 参数,不写代码。认证考的是理解和应用,代码写一遍比背十遍更有效。
第二个误区是忽略安全合规。考试中会考察数据安全和 API Key 管理,很多题目就是在考察“开发者是否会把密钥暴露到前端”“是否会用明文传输敏感数据”。
第三个误区是不关注成本。架构题里经常出现“两个方案选择哪个”的问题,成本计算往往是决定因素。
第四个误区是混淆 Claude API 和 Claude 订阅产品。API 是面向开发者的服务,按 token 计费,适合集成到应用里;订阅产品是面向个人用户的对话产品。两者的功能边界和计费方式完全不同,考试题里经常出现这类混淆,务必分清。
11. Claude API 后续学习方向
API 调用只是起点。Claude Certified Architect 认证要求开发者具备更完整的视野,后续值得深入的方向有:
RAG 与检索增强:当背景知识超过上下文窗口时,如何把知识库切分、向量化、检索回来再交给模型,是实际项目中最常问的问题之一。
Agent 架构:多步骤任务怎么拆解、工具调用循环怎么控制、子 Agent 之间怎么协同。这是目前 API 应用复杂度最高的方向,也是考试里区分架构师能力的关键点。
提示词缓存与模型路由:面对不同复杂度的请求,如何把任务路由到合适的模型,如何在保证效果的同时把成本压到最低。
安全评估与红队测试:当模型被应用到生产环境后,如何评估注入攻击、提示词泄露、越狱攻击等风险,如何设计防御和人工兜底流程。
到这里,Claude Certified Architect 前置课程 Part 3 的 API 主线已经完全梳理清楚了。如果只记住一句话,那就是:把 API 调用写通只是入门,能控制成本、保证安全、处理好错误,才算真正具备认证要求的架构师思路。建议按文章里的实验清单动手跑一遍,遇到 529 就等一等,遇到 400 就先看 token,遇到 401 先检查环境变量,实际的工程经验比任何备考资料都有用。