Claude API Streaming 流式输出 + Batch 批量调用完全教程(2026)

Claude API Streaming 流式输出 + Batch 批量调用完全教程(2026)

用 Claude API 做产品,有两个问题绕不开:用户等不了模型想半天才给结果,以及跑大量请求的时候账单让人肉疼。

第一个问题的答案是 streaming——让模型一边想一边往回吐字,用户看到的是逐字出现的效果,体感等待时间从十几秒缩短到几百毫秒。第二个问题的答案是 Batch API——把不需要实时返回的请求打包,Anthropic 给你打五折。

这篇把这两件事拆开讲。streaming 那块从基础的 SSE 事件流到工具调用场景的流式处理,再到 Extended Thinking 的行为变化。Batch 那块讲 Message Batches API 怎么用、什么场景划算。末尾顺带聊下不同规模团队的接入选型。

Claude Streaming 流式输出

基本原理

Claude 的流式输出基于 Server-Sent Events(SSE)协议。发请求时加上 stream: true,服务端不再等模型完整生成后一次性返回,而是通过一条长连接持续推送 token。

对用户来说就是打字机效果——第一个字几百毫秒就出来,后面的内容陆续到达。对开发者来说,你需要处理的是一系列事件(event),而不是一个完整的 JSON 响应。

Claude 的 SSE 事件类型主要有这几种:

  • message_start — 响应开始,包含消息的元数据(model、usage 等)
  • content_block_start — 一个内容块开始(文本、工具调用、或思考过程)
  • content_block_delta — 增量内容,文本块返回 text_delta,工具调用块返回 input_json_delta
  • content_block_stop — 一个内容块结束
  • message_delta — 消息级别的增量更新,主要是 stop_reason 和最终的 usage
  • message_stop — 整个响应结束

实际开发中不需要手动解析这些事件。Anthropic 的 Python 和 TypeScript SDK 都封装了流式接口,几行代码就能跑起来。

Python SDK 的流式调用大概长这样:

with client.messages.stream(
    model="claude-sonnet-4-6-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "解释量子计算的基本原理"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

TypeScript 那边用法差不多,SDK 返回一个异步迭代器,在 for await 循环里逐块处理就行。

通过 ofox.ai 等兼容 OpenAI 协议的平台调用时,也可以用 OpenAI SDK 的 stream=True 参数,效果一样。详细的接入配置参考《Claude API 国内怎么用》

Fine-Grained Tool Streaming

做 Agent 或者带工具调用的应用时,streaming 碰上 tool use 曾经是个麻烦事。早期的实现是等工具调用的 JSON 参数完整生成后才一次性返回,导致用户在工具调用阶段看不到任何进度。

现在这个问题解决了。Claude 的 fine-grained tool streaming 已经 GA(正式发布),工具调用的参数也会以 input_json_delta 的形式逐块推送。

实际表现是这样的:模型在生成过程中决定调用工具,你会先收到 content_block_start 事件(包含工具名),然后是一系列 input_json_delta(参数的 JSON 片段逐个到达),最后 content_block_stop 标志这个工具调用块结束。你的代码需要把这些 JSON 片段拼起来,解析成完整的参数对象,再去执行工具。

用户那边的感受就不一样了:能看到「正在调用搜索工具」的中间状态,不用对着空白屏幕干等。

如果你已经在用 Claude 的 tool use 功能,streaming 这块基本不需要额外改代码。SDK 在流式模式下会自动处理 tool use 事件的拼接。

Extended Thinking + Streaming

Opus 4.6 和 Sonnet 4.6 都支持 Extended Thinking(扩展思考),开启后模型会在回答前先进行一段内部推理。在流式模式下,这段思考过程也会以 thinking 类型的 content block 实时推送。

4.6 系列有个变化值得注意:自适应推理(Adaptive Thinking)。以前得手动设 budget_tokens 控制思考预算,现在推荐用 thinking: {type: "adaptive"} 配合 effort 参数(low / medium / high / max)。简单问题自动少想点,复杂问题多想点,不用你操心。

流式场景下的一个实用技巧:如果你不需要展示思考过程给用户看,可以设置 thinking.display: "omitted" 来跳过思考内容的传输,减少网络带宽消耗,加快整体传输速度。但推理本身还是会进行的,只是不往客户端推了。

关于 Opus 4.6 的 Extended Thinking 和自适应推理的具体用法,《Claude Opus 4.6 API 完全指南》里有更详细的说明。

Streaming 的生产注意事项

生产环境跑 streaming,踩过几个坑分享一下。

超时是最先碰到的。流式连接是长连接,默认的 HTTP 超时经常不够用。Anthropic SDK 默认 10 分钟,开了 Extended Thinking 跑复杂推理的话,可能要往上调。

SSE 连接会断。网络波动、中间代理超时都可能导致连接中断,SDK 不会帮你自动重连。我的做法是检测到断连后带着已收到的上下文重新发请求,不算优雅但管用。

Token 计量别在中间做。增量事件里不带 token 计数,要等 message_stop 之后从最终的 message_delta 里取 usage 数据,再去做计费。

并发用户多的时候注意连接数。每个流式请求占一条长连接,服务器扛不住就 429 了。处理方式和普通请求一样,指数退避重试。

Message Batches API 批量调用

为什么要用 Batch

不是所有场景都需要实时响应。文档翻译、数据标注、内容批量生成、定期报告——这些任务可以等几分钟甚至几小时拿结果,但可能一次要跑成百上千个请求。

Claude 的 Message Batches API 干的就是这事:多个请求打包提交,Anthropic 后台异步跑,跑完你来取。重点是价格直接打五折,所有模型的输入输出都减半。

具体数字:

模型标准输入标准输出Batch 输入Batch 输出
Haiku 4.5$1$5$0.5$2.5
Sonnet 4.6$3$15$1.5$7.5
Opus 4.6$5$25$2.5$12.5

价格单位:美元/百万 token

再叠加 Prompt Caching(重复的 system prompt 最多省 90%),综合下来一个月的账单能砍掉大半。具体怎么算的,这篇降本文章里有实测数据。

怎么用

用起来不复杂:创建批次、等它跑完、下载结果。

创建批次时,你提交一个请求数组,每个请求跟普通的 Messages API 参数一样(model、messages、max_tokens 等),外加一个 custom_id 用来在结果里对应。每个批次最多放 10,000 个请求

batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": "doc-001",
            "params": {
                "model": "claude-sonnet-4-6-20250514",
                "max_tokens": 1024,
                "messages": [{"role": "user", "content": "翻译这段文字..."}]
            }
        },
        # ... 更多请求
    ]
)

等待处理。创建后批次进入 in_progress 状态。大部分批次在 1 小时内处理完,复杂的可能要更久。你可以轮询批次状态,也可以用 results_url 在完成后一次性下载所有结果。每个结果会标明成功(succeeded)或失败(errored),失败的请求会附带错误信息。

获取结果。结果是一个 JSONL 文件,每行对应一个请求的响应,通过 custom_id 关联。

适合 Batch 的场景

我用 Batch API 跑过的场景,效果比较好的有这几类:

大规模文本翻译。比如把一个产品的文档从英文翻成中文,几百个文件打包一个批次提交。不需要实时,隔天早上来收结果就行,成本直接砍半。

数据分析和标注。几千条用户反馈做情感分析,或者对一批简历做结构化提取。每条请求的 system prompt 一样,叠加 Prompt Caching 效果拉满。

定期内容生成。每周生成一批营销文案或产品描述。任务本身就不要求实时,用 Batch 纯省钱。

回归测试。跑一批固定的 prompt 测试模型输出的一致性。这个场景 Batch 特别合适——你关心的是结果正确性而不是响应速度。

不适合 Batch 的场景也很明确:用户正在等回复的聊天、需要毫秒级响应的在线推理、依赖前一步结果才能继续的链式调用。这些老老实实用 streaming。

Batch API 的 300K 输出

一个值得注意的新特性:Opus 4.6 和 Sonnet 4.6 在 Batch API 中支持最大 300K token 的输出(需要设置 output-300k-2026-03-24 beta header)。这在同步 Messages API 中是做不到的——Opus 同步最大输出 128K,Sonnet 是 64K。

写完整的技术文档、生成大段代码这种需要超长输出的场景,用 Batch 就不再受同步接口的输出上限制约了。

企业级使用方案

选什么接入方式,取决于你的团队规模和合规需求。

个人和小团队

直接用 Anthropic 官方 API 或者通过聚合平台调用。按量付费,没有最低消费。国内用户通过 ofox.ai 这类平台可以用人民币支付、国内直连,不需要折腾海外信用卡和网络问题。付费方案的详细对比之前写过。

聚合平台还有个好处:一个 Key 能调 Claude、GPT、Gemini 几十个模型,切换模型改个参数就行。还在纠结选哪个模型的团队,先用着再说。

中型团队

请求量上来之后,几件事会变得现实。

Rate Limit 是第一个卡脖子的。Anthropic 按 Tier 分级限流,Tier 1 的 RPM 和 TPM 往往不够。要么在 Console 主动申请升级,要么多 Key 轮转分散流量。

成本控制这块,Batch API + Prompt Caching 组合起来能覆盖大部分降本需求。建议设个每日预算上限,防止一次代码 bug 把月度账单拉爆。

再就是模型分级。不是每个请求都需要 Opus。分类、提取这种简单活儿扔给 Haiku,常规任务用 Sonnet,只有真正需要深度推理的才上 Opus。实测一个月能省 40-60%。

企业级

Anthropic 有正式的 Enterprise 方案,主要卖点是合规和管控:HIPAA 合规(医疗数据场景必须的)、SCIM 对接企业 SSO、全量审计日志、自定义 Rate Limit 不受标准 Tier 限制,以及 API 数据不用于模型训练的承诺。有专属技术支持,出问题直接找工程团队。

定价不公开,需要找 Anthropic 销售谈。

还有一条路:AWS Bedrock 和 Google Vertex AI 上都有 Claude。走云厂商的合同体系,合规认证借现成的,不用单独跟 Anthropic 签约。适合已经在用 AWS 或 GCP 的团队。

实际开发中的选择策略

不想看前面细节的,直接看这张表:

场景推荐方案原因
用户在线聊天Streaming首 token 延迟低,体验好
Agent / 工具调用Streaming + Fine-grained tool streaming实时展示工具调用进度
大规模文本处理Batch API半价,不急
超长内容生成Batch API(300K output)同步 API 输出长度不够
日常开发调试标准 Messages API简单直接
高并发生产系统Streaming + Rate Limit 管理用户体验 + 流量控制

这三种方式不冲突。我自己的项目里,用户聊天走 streaming,夜间的数据处理走 batch,开发时候调试用同步。混着用就对了。


相关阅读: