/v1/messages)调用时,响应结构与 OpenAI 兼容格式完全不同:正文是按类型区分的 content 块数组,流式则用 Anthropic 的具名事件 SSE 协议。本页讲清两种模式怎么解析。
请求侧(端点、
anthropic-version 头、x-api-key 鉴权、effort / thinking 参数)见 Claude API 基础说明 与 Claude Effort 思考指南。本页只讲响应侧。示例用轻量模型 claude-haiku-4-5-20251001。非流式响应
顶层是一个message 对象,正文在 content 数组里,按 type 区分块:
content 数组——不能像 OpenAI 那样直接取一个字符串字段:
stop_reason 取值:end_turn(正常结束)、max_tokens(被 max_tokens 截断,正文可能为空,调大即可)、stop_sequence、tool_use(要调用工具)。开启思考后,content 数组里会多出 type: "thinking" 的块,排在 text 块之前。流式响应(具名事件 SSE)
Claude 流式用的是 Anthropic 事件协议:每条消息有event: 名称 + data: 负载,需要按事件类型分发,而不是像 OpenAI 那样每块都同构。
| 事件 | 作用 |
|---|---|
message_start | 消息骨架;usage.input_tokens 和初始 output_tokens 在此 |
content_block_start | 一个内容块开始(index + 块类型 text / thinking) |
content_block_delta | 增量;正文是 delta.type == "text_delta" 的 delta.text |
content_block_stop | 当前块结束 |
message_delta | 最终 stop_reason + 累计的 output_tokens 在此 |
message_stop | 整条消息结束(无 [DONE],以此事件为终止信号) |
content_block_delta 里的 text_delta:
开启思考(adaptive thinking)时,会先出现
type: "thinking" 的内容块,其增量是 thinking_delta,并在块结束前出现一个 signature_delta(思考块签名)。展示思考时把 thinking_delta 与 text_delta 分流渲染即可。思考用法见 Claude Effort 思考指南。与 OpenAI 兼容格式的关键差异
| 维度 | Claude 原生(/v1/messages) | OpenAI 兼容(/v1/chat/completions) |
|---|---|---|
| 正文位置 | content 块数组,按 type 区分 | choices[0].message.content 字符串 |
| 流式协议 | 具名事件(event: + data:) | 同构 chunk 对象 |
| 流式终止 | message_stop 事件,无 [DONE] | data: [DONE] |
| 增量字段 | content_block_delta.delta.text | choices[0].delta.content |
| usage 字段 | input_tokens / output_tokens(分散在 message_start 与 message_delta) | prompt_tokens / completion_tokens / total_tokens |
| 结束原因 | stop_reason(end_turn 等) | finish_reason(stop 等) |
max_tokens | 必填 | 选填 |
usage 与计费
- 非流式:
usage随结果返回,含input_tokens、output_tokens、cache_creation_input_tokens、cache_read_input_tokens。 - 流式:
input_tokens在message_start,最终output_tokens在message_delta,需两处合并。 - 缓存命中字段(
cache_read_input_tokens)的折扣与用法见 Claude 缓存计费。
相关链接
- 同组页面:Claude API 基础说明 · Claude 缓存计费 · Claude Effort 思考指南
- 兼容格式对照:OpenAI 兼容模式响应数据处理
- 获取 / 管理令牌:
https://api.apiyi.com/token