Claude 系列
Anthropic Claude(claude-fable-5-1 / claude-opus-5-5 / claude-sonnet-5-5 / claude-haiku-5-5),原生 Anthropic Messages API(POST /v1/messages),同步或 SSE 流式,按输入/输出/缓存读取/缓存写入五项计费
Claude 系列走 Anthropic 原生 Messages API:请求体、响应体、SSE 事件、请求头与 Anthropic 官方完全一致,平台原样透传,可直接使用 Anthropic 官方 SDK 和 Claude Code。
| 项 | 值 |
|---|---|
| 模型 | 见下表(实际可用以模型列表为准) |
| 模式 | 同步;stream: true 时为 SSE 流式 |
| 计费 | 按 token,输入 / 输出 / 缓存读取 / 缓存写入(5m)/ 缓存写入(1h)五项分别计价,见计费 |
| 模型 | 上下文 | 最大输出 | 说明 |
|---|---|---|---|
claude-fable-5-1 | 1M | 128K | 能力最强,适合最高难度推理与长时程 Agent 任务;思考常开 |
claude-opus-5-5 | 1M | 128K | Opus 系列最新版,长时程编程与知识工作;思考常开 |
claude-sonnet-5-5 | 1M | 128K | 速度与能力兼顾,日常编程、Agent 与企业场景 |
claude-haiku-5-5 | 1M | 128K | 最快最经济;输入超过 100K 按长上下文价计费 |
/v1/messages 调用。用 /v1/chat/completions 或 /v1/responses 请求 claude-* 模型会返回 400:协议转换会丢失 thinking 签名,缓存写入也无法按实际档位计费。快速开始
curl https://api.vibelab.me/v1/messages \
-H "x-api-key: $LOOPTOKEN_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "用一句话介绍量子计算"}]
}'{
"id": "msg_011CgY7k2HkKZaASX2XaT26Y",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-5-5",
"content": [{"type": "text", "text": "量子计算是利用量子叠加与纠缠进行信息处理的计算范式。"}],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 18,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {"ephemeral_5m_input_tokens": 0, "ephemeral_1h_input_tokens": 0},
"output_tokens": 32
}
}鉴权与请求头
| 请求头 | 必填 | 说明 |
|---|---|---|
x-api-key | 二选一 | LoopToken Key(sk-lt-...),Anthropic SDK 与 Claude Code 配 ANTHROPIC_API_KEY 时使用 |
Authorization | 二选一 | Bearer sk-lt-...,Claude Code 配 ANTHROPIC_AUTH_TOKEN 时使用;两者都带时以本头为准 |
anthropic-version | 否 | 原样转发,缺省按 2023-06-01 |
anthropic-beta | 否 | 原样转发,用于启用 Anthropic beta 特性(如 interleaved-thinking-2025-05-14) |
content-type | 是 | application/json |
URL 上的查询参数(如 Claude Code 发送的 ?beta=true)也原样转发。不要填 Anthropic 官方的 sk-ant- 密钥。
请求参数
请求体与 Anthropic 官方 Messages API 一致,平台不改写任何字段,只读取下列字段用于路由和预扣:
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
model | string | 是 | - | 上表中的模型名 |
max_tokens | int | 是 | - | 最大输出 token;同时决定预扣金额 |
messages | array | 是 | - | 对话消息,content 支持字符串或内容块数组(text / image / document / tool_use / tool_result / thinking 等) |
stream | bool | 否 | false | true 时返回 SSE 流 |
system | string/array | 否 | - | 系统提示词,数组形式可在块上加 cache_control |
thinking | object | 否 | 见下 | {"type":"adaptive"};思考深度用 output_config.effort 控制 |
output_config.effort | string | 否 | 依模型 | low / medium / high / xhigh / max |
tools / tool_choice | - | 否 | - | 工具调用,见工具调用 |
cache_control | object | 否 | - | {"type":"ephemeral"}(5 分钟)或 {"type":"ephemeral","ttl":"1h"}(1 小时),可加在块上或顶层 |
stop_sequences / metadata | - | 否 | - | 与官方一致 |
各模型的官方限制同样生效(违反时由上游返回 400 invalid_request_error,平台原样透给你):
claude-fable-5-1/claude-opus-5-5→ 思考不能关闭,thinking: {"type":"disabled"}与{"type":"enabled","budget_tokens":N}均返回 400,用output_config.effort调节深度。claude-sonnet-5-5→{"type":"disabled"}返回 400;要关闭思考,发送{"type":"between_tools"}(仅在 effort 为high及以下时可用)。claude-fable-5-1/claude-opus-5-5/claude-sonnet-5-5→tool_choice为any或{"type":"tool"}时返回 400,请用auto并在提示词中点名工具。- 全部模型 → 不支持 assistant 预填(最后一条为 assistant 消息)。
请求示例
流式
curl https://api.vibelab.me/v1/messages \
-H "x-api-key: $LOOPTOKEN_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-opus-5-5",
"max_tokens": 4096,
"stream": true,
"messages": [{"role": "user", "content": "写一首关于秋天的短诗"}]
}'SSE 事件与官方一致,按 message_start → content_block_start / content_block_delta / content_block_stop → message_delta → message_stop 的顺序到达,中间可能有 ping。平台逐事件原样转发,thinking 签名、tool_use 增量都不做改动。
event: message_start
data: {"type":"message_start","message":{"id":"msg_011C...","model":"claude-opus-5-5","usage":{"input_tokens":21,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":1}}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"枫叶"}}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":86}}
event: message_stop
data: {"type":"message_stop"}Prompt 缓存
长系统提示词、工具定义、长文档放在前面并打上 cache_control,后续请求命中缓存后按缓存读取价计费:
{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"system": [
{"type": "text", "text": "<很长的系统提示词或文档>", "cache_control": {"type": "ephemeral"}}
],
"messages": [{"role": "user", "content": "根据文档回答:……"}]
}第一次请求:usage.cache_creation_input_tokens 记录写入量;5 分钟内(ttl: "1h" 时为 1 小时)的后续请求:usage.cache_read_input_tokens 记录命中量。前缀里任何一个字节变化都会导致缓存失效。
工具调用
{
"model": "claude-sonnet-5-5",
"max_tokens": 2048,
"tools": [{
"name": "get_weather",
"description": "查询城市天气",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}],
"messages": [{"role": "user", "content": "巴黎今天天气怎么样?"}]
}响应 stop_reason 为 tool_use 时,执行工具后把整个 assistant content(包括 thinking 块)原样追加到历史,再追加一条 user 消息,在其中放入 tool_result 块。thinking 块被改动或删掉会导致后续请求报错。
统计 token
curl https://api.vibelab.me/v1/messages/count_tokens \
-H "x-api-key: $LOOPTOKEN_API_KEY" \
-H "content-type: application/json" \
-d '{"model": "claude-sonnet-5-5", "messages": [{"role": "user", "content": "hello"}]}'{"input_tokens": 2}count_tokens 由平台本地估算,不调用上游、不计费,数值是近似值(不计入图片等 base64 媒体);实际计费以 /v1/messages 返回的 usage 为准。
响应
与 Anthropic 官方 Message 对象一致。计费相关的 usage 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
usage.input_tokens | int | 普通输入 token,不含缓存部分 |
usage.cache_read_input_tokens | int | 命中缓存的输入 token |
usage.cache_creation_input_tokens | int | 写入缓存的输入 token(5m + 1h 之和) |
usage.cache_creation.ephemeral_5m_input_tokens | int | 其中按 5 分钟 TTL 写入的部分 |
usage.cache_creation.ephemeral_1h_input_tokens | int | 其中按 1 小时 TTL 写入的部分 |
usage.output_tokens | int | 输出 token,含思考 token |
总输入 = input_tokens + cache_read_input_tokens + cache_creation_input_tokens。控制台用量记录里的"输入 token"按总输入显示。
计费
按上游返回的 usage 五项分别计价:
费用 = input_tokens × 输入价
+ cache_read_input_tokens × 缓存读取价
+ ephemeral_5m_input_tokens × 缓存写入(5m)价
+ ephemeral_1h_input_tokens × 缓存写入(1h)价
+ output_tokens × 输出价单价(美元 / 百万 token,与 Anthropic 官方价一致;10 积分 = 1 美元):
| 模型 | 档位 | 输入 | 输出 | 缓存读取 | 缓存写入(5m) | 缓存写入(1h) |
|---|---|---|---|---|---|---|
claude-fable-5-1 | 全部 | $10 | $50 | $0.25 | $12.5 | $20 |
claude-opus-5-5 | 全部 | $4 | $20 | $0.20 | $5 | $8 |
claude-sonnet-5-5 | 全部 | $2 | $10 | $0.20 | $2.5 | $4 |
claude-haiku-5-5 | 总输入 ≤ 100K | $0.10 | $0.50 | $0.01 | $0.125 | $0.20 |
claude-haiku-5-5 | 总输入 > 100K | $0.50 | $2.50 | $0.05 | $0.625 | $1.00 |
价格以定价页为准。
- 预扣 → 请求进入时按估算输入 +
max_tokens(不超过模型最大输出)的输出价冻结积分,余额不足返回402。max_tokens越大冻结越多,结算后多退少补。 - 结算 → 按上游
usage实扣;上游没有返回usage时按输入、输出文本估算。 - 长上下文(
claude-haiku-5-5) → 按实际总输入(含缓存读写)判断,超过 100K 时整个请求的五项都按长上下文价计费。 - 失败 → 上游报错或未产生输出时全额退还预扣。流式已开始输出后中断,按已产生的用量结算。
count_tokens→ 不计费。
错误
本接口的错误体使用 Anthropic 格式,Anthropic SDK 能直接识别:
{
"type": "error",
"error": {"type": "invalid_request_error", "message": "prompt is too long: 1000001 tokens > 1000000 maximum"},
"request_id": "01a18c01-59e8-77df-83a6-cc66e28b5272"
}| HTTP | error.type | 触发场景 | 处理 |
|---|---|---|---|
| 400 | invalid_request_error | 请求体不合法、违反模型限制、上下文超长(prompt is too long),或通过 /v1/chat/completions 调用 Claude | 按 message 修改请求;超长时压缩上下文 |
| 401 | authentication_error | 缺少 Key、Key 无效或已禁用 | 检查 x-api-key / Authorization |
| 402 | billing_error | 余额不足以支付预扣 | 充值或调小 max_tokens |
| 403 | permission_error | Key 的模型白名单、IP 白名单或配额不允许 | 调整 Key 设置 |
| 404 | not_found_error | 模型不存在或未上架 | 使用模型列表中的模型名 |
| 429 | rate_limit_error | 触发 Key 或账户的 RPM 限制 | 退避后重试 |
| 502 / 503 | api_error | 上游全部失败或暂无可用渠道 | 退避后重试 |
| 504 | timeout_error | 非流式请求等待上游超时 | 改用 stream: true |
通用说明见错误码。
注意事项
- Base URL → Anthropic SDK 与 Claude Code 填
https://api.vibelab.me(不带/v1)。 - Claude Code → 配置方法见 Claude Code 接入。
- 长输出 →
max_tokens较大或开启思考时用stream: true,避免非流式超时。 - 多轮对话 → 历史中的
thinking块必须原样回传,不要删改。 - 缓存 → 缓存按模型隔离;切换模型、改动系统提示词或工具定义都会导致缓存失效,重新写入。