# 流式处理功能说明

本文档介绍了Travel Content Creator中新增的三种流式输出处理方式，以及如何使用它们来优化内容生成体验。

## 新增的流式处理方式

我们在`AI_Agent`类中实现了三种不同的流式处理方式：

1. **同步流式响应** (`generate_text_stream`)
   - 已修改为返回完整响应，不再是生成器
   - 内部仍使用流式请求以获得更好的超时控制
   - 适用于简单的API调用场景

2. **基于回调的流式响应** (`generate_text_stream_with_callback`)
   - 通过回调函数处理每个文本块
   - 可在回调中实现实时显示、分析或保存
   - 最灵活的选项，适合需要自定义处理流程的场景

3. **异步流式响应** (`async_generate_text_stream`)
   - 基于`asyncio`的异步生成器
   - 适用于需要与其他异步操作集成的场景
   - 可在保持响应性的同时处理长时间运行的请求

## 演示脚本

我们提供了一个示例脚本`test_stream.py`，演示了如何使用这三种流式处理方式：

```bash
# 从项目根目录运行
python examples/test_stream.py
```

## 回调函数示例

以下是使用回调函数处理流式响应的例子：

```python
def handle_chunk(chunk, is_last=False, is_timeout=False, is_error=False, error=None):
    # 处理文本块
    if chunk:
        print(chunk, end="", flush=True)  # 实时显示
        
    # 处理结束状态
    if is_last:
        if is_timeout:
            print("\n流式响应超时")
        if is_error:
            print(f"\n发生错误: {error}")

# 使用回调函数进行流式处理
response = agent.generate_text_stream_with_callback(
    system_prompt, 
    user_prompt, 
    handle_chunk,  # 传入回调函数
    temperature=0.7
)
```

## 异步流式处理示例

以下是使用异步方式处理流式响应的例子：

```python
async def process_stream():
    async for chunk in agent.async_generate_text_stream(
        system_prompt, 
        user_prompt, 
        temperature=0.7
    ):
        print(chunk, end="", flush=True)  # 实时显示
        
        # 可以同时执行其他异步操作
        await other_async_task()

# 在异步环境中运行
asyncio.run(process_stream())
```

## 超时处理

所有流式处理方法都支持超时控制：

1. **全局请求超时**：控制整个请求的最长等待时间
2. **流式块超时**：控制两个连续文本块之间的最长等待时间

这些参数可以在创建`AI_Agent`实例时设置：

```python
agent = AI_Agent(
    api_url="http://localhost:8000/v1/",
    model="qwen",
    api_key="EMPTY",
    timeout=30,  # 全局请求超时(秒)
    stream_chunk_timeout=10  # 流式块超时(秒)
)
```

## 注意事项

1. 新的流式处理方法内置了重试机制和错误处理
2. 回调方式提供了最佳的灵活性和控制
3. 异步方式最适合需要保持UI响应性的应用
4. 所有方法都会在完成时自动关闭流式请求 