Anthropic 于 2026 年 6 月 9 日发布了 Claude Fable 5。如果你是一名开发者,那么 Claude Fable 5 API 正是你关注的核心。它运行在你熟悉的 Messages API 之上,因此唯一真正改变的是模型字符串:claude-fable-5。本指南将带你完成从单行 curl 请求到流式传输(streaming)、工具调用(tool use)、错误处理以及成本计算的所有步骤,助你跑通代码并获取真实响应。如果你之前针对 Claude 进行过开发,你会觉得其结构非常熟悉。如果你是从旧模型迁移过来的,那么这次迁移主要就是替换一个字符串,就像从 Claude Opus 4.8 API 迁移时一样。
快速入门 (TL;DR)
从 Anthropic Console 获取 API 密钥,将其设置为 ANTHROPIC_API_KEY,然后向 Messages API 发送 POST 请求,设置 model: "claude-fable-5"、max_tokens 值以及 messages 数组。建议使用官方的 Anthropic Python 或 TypeScript SDK,也可以直接使用原始 HTTP 请求。对于长文本输出,请使用流式传输以避免请求超时。价格为每百万 input tokens 10 美元,每百万 output tokens 50 美元。

在开始之前
在发送第一次请求之前,你需要准备好以下四项:
- Anthropic 账号:在 console.anthropic.com 注册。你可以在 Console 中管理密钥、使用情况和账单。
- API 密钥:在 Console 的 API Keys 下创建一个。请务必复制并妥善保存,因为它不会再次显示。请像对待密码一样对待它。
- 账单或企业版计划:Fable 5 可在标准 Claude API 上使用,并完全适用于按量付费的企业版计划。在发送流量之前,请添加付款方式或确认你的计划已涵盖该模型。如果你还在犹豫 Fable 5 是否适合你的用例,可以查看 Claude Fable 5 的概述,了解该模型的优势。
- SDK(可选但推荐):安装适用于你所用语言的官方 Anthropic SDK。如果你愿意,也可以使用 curl 或任何 HTTP 客户端调用原始 HTTP 端点。

将密钥设置为环境变量,以确保它永远不会出现在源代码中:
export ANTHROPIC_API_KEY="sk-ant-..."
Python 和 TypeScript SDK 都会自动从环境中读取 ANTHROPIC_API_KEY,因此你很少需要在代码中显式传递它。切勿将密钥提交到 git。如果密钥泄露,请立即在 Console 中进行轮换。
需要预先了解的一个行为:Fable 5 内置了安全保护机制,会将一小部分敏感查询(如网络安全、生物和化学以及模型蒸馏尝试)路由到 Claude Opus 4.8。这种情况在不到 5% 的会话中发生。你无需为此进行任何配置,但这解释了为什么偶尔会收到标记为不同模型的响应。更多信息请参阅错误处理部分。
你的第一次 Claude Fable 5 API 调用
从 curl 开始,这样你可以直接看到原始的请求和响应,没有任何干扰。端点是 POST https://api.anthropic.com/v1/messages,详见 Anthropic Messages API 参考文档,它需要三个 Header 和一个 JSON Body。
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-fable-5","max_tokens":1024,"messages":[{"role":"user","content":"Summarize what makes a good REST API in 3 bullet points."}]}'
这里有三个关键的 Header:x-api-key 携带你的密钥;anthropic-version 固定 API 版本(2023-06-01 是当前的稳定值);content-type 告知服务器你正在发送 JSON。Body 包含三个必填字段:model、max_tokens 和 messages。这就是全部的交互契约。
响应以 JSON 对象的形式返回。你关注的部分是 content,它是一个区块列表:
{
"id": "msg_01ABC...",
"type": "message",
"role": "assistant",
"model": "claude-fable-5",
"content": [
{ "type": "text", "text": "- Predictable, resource-oriented URLs..." }
],
"stop_reason": "end_turn",
"usage": { "input_tokens": 18, "output_tokens": 96 }
}
content 是一个列表而不是字符串,因为单个响应可以混合文本、工具调用块(tool-use blocks)和思考块(thinking blocks)。在读取 text 之前,请务必遍历列表并检查每个块的 type。stop_reason 告诉你模型停止的原因(end_turn 表示正常结束),usage 提供了用于后续成本计算的 token 计数。
在 Python 中调用 Fable 5
官方 Anthropic Python SDK 简化了 Header 和 JSON 的样板代码。首先安装它:
pip install anthropic
这是基础调用代码。客户端会从环境中读取你的密钥,因此无需在代码中传递:
import anthropic
client = anthropic.Anthropic() # 从环境变量读取 ANTHROPIC_API_KEY
response = client.messages.create(
model="claude-fable-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Summarize what makes a good REST API."}],
)
for block in response.content:
if block.type == "text":
print(block.text)
该模式与 curl 调用一致。你传递 model、max_tokens 和 messages,并得到一个 content 为块列表的响应。循环中使用 block.type == "text" 进行保护,以确保不会在非文本块上出错。
添加系统提示词 (System Prompt)
系统提示词用于设定模型的角色和整个对话的基本准则。将其作为 system 字段传递,与 messages 分开:
response = client.messages.create(
model="claude-fable-5",
max_tokens=2048,
system="You are a senior backend engineer. Be concise and use code examples.",
messages=[{"role": "user", "content": "Write a Flask route that validates a JSON body."}],
)
for block in response.content:
if block.type == "text":
print(block.text)
系统提示词是定义人设、输出格式规则以及希望在每一轮对话中保持的约束条件的最佳场所。请保持其稳定性,因为在每个请求中更改它会使你以后添加的提示词缓存(prompt caching)失效。
流式传输长输出
对于任何会产生长回答的任务,请使用流式传输。流式传输会在 token 生成时立即发送,因此你可以立即显示进度,并避免大型非流式响应可能导致的请求超时。Fable 5 处理长期任务的能力使其成为实际工作负载的默认选择:
with client.messages.stream(
model="claude-fable-5",
max_tokens=4096,
messages=[{"role": "user", "content": "Explain idempotency keys for payment APIs."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()
print(f"\n\nTokens: {final.usage.output_tokens}")
stream.text_stream 会在文本块到达时产出它们。flush=True 很重要,这样每个块都会立即打印而不是进入缓冲区。当流结束时,stream.get_final_message() 会为你提供完整的组装消息,包括最终的 usage 数据,这样你既获得了流式的用户体验,又无需第二次请求即可获得完整对象。
在 TypeScript / Node 中调用 Fable 5
Node SDK 遵循相同的结构。安装它:
npm install @anthropic-ai/sdk
然后发起调用。客户端同样会从环境中读取 ANTHROPIC_API_KEY:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic(); // 读取 ANTHROPIC_API_KEY
const msg = await client.messages.create({
model: "claude-fable-5",
max_tokens: 1024,
messages: [{ role: "user", content: "List 3 common API security mistakes." }],
});
console.log(msg.content);
msg.content 与你在 Python 和 curl 中看到的块列表相同。要提取纯文本,可以根据块类型进行过滤:
const text = msg.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join("");
console.log(text);
流式传输的工作方式与 Python 相同。使用 client.messages.stream({...}) 并迭代事件,或者等待 finalMessage() 获取组装后的结果。如果你正在将其接入前端聊天界面,请从服务器路由进行流式传输,并将数据块转发到浏览器。无论是在 Node 还是 Python 中构建,同样的测试习惯都适用,而像 Apifox 这样的工具可以让你在编写任何客户端代码之前轻松验证契约,这与使用 Apifox 测试 ChatGPT API 的工作流是一致的。
Fable 5 的工具调用 (Function Calling)
工具调用(Tool use)允许 Fable 5 调用你定义的函数。你通过 JSON schema 描述一个工具,模型决定何时调用它,然后你运行实际函数并将结果反馈给模型。Fable 5 在工具调用方面表现强劲,这也是它非常适合智能体(agent)循环的原因。
定义一个包含名称、描述和 input_schema 的工具:
tools = [
{
"name": "get_order_status",
"description": "Look up the status of a customer order by ID.",
"input_schema": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
},
}
]
像传递 messages 一样将 tools 传递给请求:
messages = [{"role": "user", "content": "What's the status of order A1855?"}]
response = client.messages.create(
model="claude-fable-5",
max_tokens=1024,
tools=tools,
messages=messages,
)
当模型想要使用工具时,响应返回的 stop_reason == "tool_use",并且包含一个携带工具名称和所选输入的 tool_use 块。处理逻辑很直观:追加助手的响应,运行工具,然后在新的用户轮次中以 tool_result 块的形式发送结果:
if response.stop_reason == "tool_use":
tool_use = next(b for b in response.content if b.type == "tool_use")
# 使用模型选择的输入运行你的真实函数
result = lookup_order(tool_use.input["order_id"]) # 你的代码
messages.append({"role": "assistant", "content": response.content})
messages.append({
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": tool_use.id,
"content": result,
}],
})
# 将结果发送回去;模型现在将利用该结果进行回答
followup = client.messages.create(
model="claude-fable-5",
max_tokens=1024,
tools=tools,
messages=messages,
)
关键细节是 tool_use_id:tool_result 块必须引用 tool_use 块中确切的 id,以便模型知道该结果对应哪个调用。对于多步智能体,你可以将其封装在一个循环中,直到 stop_reason 变为 end_turn。Python SDK 还提供了一个工具运行器(tool runner)来自动处理这个循环,但上面的手动版本展示了底层原理,并允许你添加审批环节或日志记录。
自适应思考与努力程度 (Adaptive Thinking and Effort)
Fable 5 支持自适应思考(Adaptive thinking),模型可以自主决定在回答之前进行多深层次的推理。这是可选的。通过传递 thinking 来开启,并使用 output_config 调整整体深度和 token 消耗:
response = client.messages.create(
model="claude-fable-5",
max_tokens=4096,
thinking={"type": "adaptive"},
output_config={"effort": "high"}, # low | medium | high
messages=[{"role": "user", "content": "Design a retry strategy for a flaky webhook receiver."}],
)
effort 控制模型的思考和工作量:较低的 effort 意味着更简洁、更快速的响应;较高的 effort 意味着更彻底的推理,但 token 成本也更高。对于简单的查询和简短的回答,请关闭这两个选项,因为额外的推理不值得消耗 token。对于复杂的、多步骤的问题(即 Fable 5 专为之设计的长期规划任务),请使用这些功能。开始时保持简单即可;一旦你发现某个路径需要更强的推理能力,再添加 thinking。
错误处理与安全回退
实际的集成必须能够优雅地处理失败。SDK 会抛出类型化的异常,因此请捕获特定的类,而不是匹配错误字符串。你最常遇到的三个异常对应 HTTP 401、429 和 400:
import anthropic
client = anthropic.Anthropic()
try:
response = client.messages.create(
model="claude-fable-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain CORS preflight requests."}],
)
except anthropic.AuthenticationError:
# 401: API 密钥错误或缺失。检查 ANTHROPIC_API_KEY。
print("Invalid API key. Rotate it in the Console and re-export.")
except anthropic.RateLimitError as e:
# 429: 请求过多。请稍后重试。
retry_after = e.response.headers.get("retry-after", "60")
print(f"Rate limited. Retry after {retry_after}s.")
except anthropic.BadRequestError as e:
# 400: 请求格式错误(参数错误、消息为空、结构错误)。
print(f"Bad request: {e.message}")
以下是每个错误的含义及解决方法:
- 401 (
AuthenticationError):密钥缺失、格式错误或已撤销。请确认ANTHROPIC_API_KEY已在你代码运行的环境中设置,并且该密钥在 Console 中仍处于激活状态。 - 429 (
RateLimitError):你超过了每分钟请求数或每分钟 token 数限制。SDK 已经会自动使用指数退避算法重试 429 和 5xx 错误(默认重试两次)。如果你添加自定义退避逻辑,请读取retry-afterHeader。 - 400 (
BadRequestError):请求格式错误。常见原因包括messages数组为空、缺少max_tokens或消息角色未正确交替。错误消息通常会指明具体的字段。
关于安全回退(Safeguard fallback):Fable 5 会将一小部分敏感查询(网络安全、生物化学、蒸馏尝试)路由到 Claude Opus 4.8,而不是直接回答。这发生在不到 5% 的会话中。这并非错误,你的请求仍会成功,但响应可能会标记为不同的模型。如果你对 response.model 进行日志记录或断言,当它不是 claude-fable-5 时请不要直接报错;请求已被处理,只是底层由不同的模型完成。如果你的应用程序严格需要知道是哪个模型回答的,请从返回的对象中读取 response.model,而不是假设它与你发送的一致。
估算单次请求成本
价格为每百万 input tokens 10 美元,每百万 output tokens 50 美元。每个响应都在 usage 中携带了确切的计数,因此你可以精确计算每次请求的成本,而无需猜测:
response = client.messages.create(
model="claude-fable-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Write a SQL query to find duplicate emails."}],
)
input_tokens = response.usage.input_tokens
output_tokens = response.usage.output_tokens
input_cost = input_tokens / 1_000_000 * 10
output_cost = output_tokens / 1_000_000 * 50
total = input_cost + output_cost
print(f"Input: {input_tokens} tokens = ${input_cost:.6f}")
print(f"Output: {output_tokens} tokens = ${output_cost:.6f}")
print(f"Total: ${total:.6f}")
Output tokens 的成本是 input tokens 的五倍,因此保持响应简洁是降低成本最有效的手段。一个包含 2,000 个 input tokens 和 500 个 output tokens 的请求成本为 2000 / 1M * $10 + 500 / 1M * $50,即 $0.02 + $0.025 = $0.045。将其乘以你的请求量即可估算预算。如果 output 成本占据了账单的大部分,请限制 max_tokens 并在系统提示词中要求简洁回答。Output 的定价逻辑与 Claude Opus 4.8 相同,只是使用了 Fable 5 的具体数值。
使用 Apifox 测试和调试 Claude Fable 5 API
在编写客户端代码之前,手动发送一些请求并观察返回结果是非常值得的。Apifox 是为此设计的 API 客户端:你可以向 https://api.anthropic.com/v1/messages 发送真实请求,检查流式响应,并保存请求以便团队协作。以下是从零开始创建并保存请求的步骤:

- 创建请求:在 Apifox 中新建一个 HTTP 请求,将方法设置为
POST,并粘贴 URLhttps://api.anthropic.com/v1/messages。这是本指南中每个示例都会访问的端点。 - 将密钥存储为环境变量:创建一个 Apifox 环境变量,命名为
anthropic_api_key之类的名称,并将你的密钥粘贴为敏感值(Secret)。将密钥保存在环境变量中意味着它不会出现在保存的请求或分享的导出文件中。 - 设置 Header:添加
x-api-key,值为{{anthropic_api_key}},然后添加anthropic-version: 2023-06-01和content-type: application/json。如果你更喜欢 Bearer 风格的变量,也可以用同样的方式存储并引用。 - 添加 JSON Body:填入最简 Payload:
{"model": "claude-fable-5", "max_tokens": 1024, "messages": [{"role": "user", "content": "Explain idempotency keys for payment APIs."}]}。发送请求并查看响应。你应该能在响应面板中直接看到content块、stop_reason和usage。 - 查看流式响应:在 Body 中设置
"stream": true并再次发送。Apifox 会实时渲染服务器发送的事件(SSE),因此你可以观察 token 的流式输入,并在将其构建到应用之前确认你的流式逻辑与 API 实际发送的内容匹配。 - 保存并生成代码:将请求保存到集合中以便同事复用,然后使用 Apifox 的代码生成功能导出 Python、JavaScript、curl 或其他语言的工作代码片段。这为你提供了一个经过测试的起点,而不是从零开始编写文件。
这种流程是学习 API 确切响应结构以及调试应用中异常请求的最快方法,因为你可以将代码生成的请求与已知正常的请求并排对比。准备就绪后,下载 Apifox 并从上述最简 Body 开始尝试吧。
开发必备:API 全流程管理神器 Apifox
介绍完上文的内容,我想额外介绍一个对开发者同样重要的效率工具 —— Apifox。作为一个集 API 文档、调试、设计、测试、Mock、自动化测试于一体的工具,Apifox 是目前提升研发效率的首选。
如果你正在开发项目,不妨试试其极其友好的界面设计,它完全兼容 Postman 和 Swagger 数据格式,导入数据非常方便,,即使是新手也能很快上手,点击这里即可注册使用。

值得一提的是,除了个人和常规团队使用,针对有高安全合规要求、或需要在内网环境协作的企业,Apifox 还提供了深度定制的私有化部署方案。
获取专属报价与部署方案
详细的私有化部署系统架构与安全白皮书
针对您公司规模的专属报价单
免费的 1v1 专属产品演示 (Demo) 机会