流式消息
在创建消息时,您可以设置 "stream": true
来使用服务器发送事件 (SSE)增量流式传输响应。
使用 SDK 进行流式传输
我们的 Python 和 TypeScript SDK 提供了多种流式传输方式。Python SDK 同时支持同步和异步流。详情请参阅各 SDK 的文档。
事件类型
每个服务器发送事件都包含一个命名的事件类型和相关的 JSON 数据。每个事件都会使用 SSE 事件名称(例如 event: message_stop
),并在其数据中包含匹配的事件 type
。
每个流使用以下事件流程:
message_start
:包含一个带有空content
的Message
对象。- 一系列内容块,每个块都有一个
content_block_start
、一个或多个content_block_delta
事件和一个content_block_stop
事件。每个内容块都有一个index
,对应于其在最终 Messagecontent
数组中的索引。 - 一个或多个
message_delta
事件,表示最终Message
对象的顶层更改。 - 最后的
message_stop
事件。
Ping 事件
事件流中可能还包含任意数量的 ping
事件。
错误事件
我们可能偶尔会在事件流中发送错误。例如,在高负载期间,您可能会收到 overloaded_error
,这在非流式上下文中通常对应于 HTTP 529:
其他事件
根据我们的版本控制政策,我们可能会添加新的事件类型,您的代码应该能够优雅地处理未知的事件类型。
Delta 类型
每个 content_block_delta
事件包含一个 delta
,其类型用于更新给定 index
处的 content
块。
文本 delta
text
内容块 delta 如下所示:
输入 JSON delta
tool_use
内容块的 delta 对应于块的 input
字段的更新。为了支持最大粒度,delta 是_部分 JSON 字符串_,而最终的 tool_use.input
始终是一个_对象_。
您可以累积字符串 delta,并在收到 content_block_stop
事件后解析 JSON,方法是使用像 Pydantic 这样的库进行部分 JSON 解析,或使用我们的 SDK,它们提供了访问已解析增量值的辅助工具。
tool_use
内容块 delta 如下所示:
注意:我们当前的模型仅支持一次从 input
中发出一个完整的键和值属性。因此,在使用工具时,模型工作时流式事件之间可能会有延迟。一旦累积了 input
键和值,我们就会以分块的部分 json 形式发出多个 content_block_delta
事件,这样格式就可以自动支持未来模型中的更细粒度。
思考 delta
当启用扩展思考并启用流式传输时,您将通过 thinking_delta
事件接收思考内容。这些 delta 对应于 thinking
内容块的 thinking
字段。
对于思考内容,在 content_block_stop
事件之前会发送一个特殊的 signature_delta
事件。此签名用于验证思考块的完整性。
典型的思考 delta 如下所示:
签名 delta 如下所示:
原始 HTTP 流响应
我们强烈建议在使用流式模式时使用我们的客户端 SDK。但是,如果您正在构建直接的 API 集成,则需要自己处理这些事件。
流响应由以下部分组成:
- 一个
message_start
事件 - 可能有多个内容块,每个块包含:
a. 一个
content_block_start
事件 b. 可能有多个content_block_delta
事件 c. 一个content_block_stop
事件 - 一个
message_delta
事件 - 一个
message_stop
事件
整个响应中可能会分散有 ping
事件。有关格式的更多详细信息,请参见事件类型。
基本流式请求
使用工具的流式请求
在这个请求中,我们要求 Claude 使用工具来告诉我们天气情况。
带扩展思考的流式请求
在这个请求中,我们启用了带流式传输的扩展思考,以查看 Claude 的逐步推理过程。