> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qoder.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 流式输出

默认情况下，模型一轮回复要等完整产出后才作为整段消息送达。启用流式输出后，SDK 在生成过程中持续推送细粒度增量片段，可以做打字机效果，或单独渲染推理过程、工具调用过程。

<div id="启用" />

## 启用

在 `QoderAgentOptions` 里设置 `include_partial_messages=True`：

```python theme={null}
from qoder_agent_sdk import QoderAgentOptions, access_token_from_env, query

options = QoderAgentOptions(
    auth=access_token_from_env(),
    include_partial_messages=True,
)

async for msg in query(prompt="Write a short analysis report", options=options):
    ...
```

<div id="打字机效果" />

## 打字机效果

模型生成的文本以增量片段连续到达，逐片打印就是打字机效果：

```python theme={null}
import sys

from qoder_agent_sdk import StreamEvent


async for msg in query(prompt="...", options=options):
    if isinstance(msg, StreamEvent):
        delta = msg.event.get("delta")
        if delta and delta.get("type") == "text_delta":
            sys.stdout.write(delta["text"])
            sys.stdout.flush()
```

<div id="推理过程" />

## 推理过程

推理类模型在正式回复前会产出"思考"片段：

```python theme={null}
if isinstance(msg, StreamEvent):
    delta = msg.event.get("delta")
    if delta and delta.get("type") == "thinking_delta":
        sys.stdout.write(delta["thinking"])
        sys.stdout.flush()
```

<div id="工具调用入参" />

## 工具调用入参

工具调用的参数也是逐步生成的，例如可以拿来在 UI 里实时渲染模型正在写入的文件内容：

```python theme={null}
if isinstance(msg, StreamEvent):
    delta = msg.event.get("delta")
    if delta and delta.get("type") == "input_json_delta":
        sys.stdout.write(delta["partial_json"])
        sys.stdout.flush()
```

完整事件结构见 [SDK References](/zh/cli/sdk/python/references#streamevent)。
