Skip to main content
通过 Claude 原生格式/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_sequencetool_use(要调用工具)。开启思考后,content 数组里会多出 type: "thinking" 的块,排在 text 块之前。

流式响应(具名事件 SSE)

Claude 流式用的是 Anthropic 事件协议:每条消息有 event: 名称 + data: 负载,需要按事件类型分发,而不是像 OpenAI 那样每块都同构。
事件流的固定顺序与职责: 解析的核心是累加 content_block_delta 里的 text_delta
事件类型在 event: 行和 data: 负载的 "type" 字段里都有,按任一个分发都行。用官方 anthropic SDK 时,把 base_url 指向 https://api.apiyi.com 即可,SDK 会自动处理事件流,无需手写上面的循环。
开启思考(adaptive thinking)时,会先出现 type: "thinking" 的内容块,其增量是 thinking_delta,并在块结束前出现一个 signature_delta(思考块签名)。展示思考时把 thinking_deltatext_delta 分流渲染即可。思考用法见 Claude Effort 思考指南

与 OpenAI 兼容格式的关键差异

迁移最容易踩的两点:① 正文是数组不是字符串,必须遍历 contenttype=="text" 的块;② 流式没有 [DONE],要用 message_stop 事件判结束。

usage 与计费

  • 非流式:usage 随结果返回,含 input_tokensoutput_tokenscache_creation_input_tokenscache_read_input_tokens
  • 流式:input_tokensmessage_start,最终 output_tokensmessage_delta,需两处合并
  • 缓存命中字段(cache_read_input_tokens)的折扣与用法见 Claude 缓存计费

相关链接