【Agent智能体项目实战二】通义千问流式输出:实现像 ChatGPT 一样逐字打印效果

2 阅读1分钟

一、环境准备

pip install openai

二、完整流式输出代码

from openai import OpenAI

# 1. 创建 OpenAI 格式客户端(对接阿里云通义千问)
client = OpenAI(
    api_key="你的ApiKey",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

# 2. 发起聊天请求,开启流式输出
response = client.chat.completions.create(
    model="qwen3.5-flash",
    messages=[
        {"role": "system", "content": "你是一个Python编程专家,幽默、简洁、不废话。"},
        {"role": "assistant", "content": "我是Python编程专家,你要问什么?"},
        {"role": "user", "content": "你是谁"}
    ],
    stream=True  # 关键:开启流式输出
)

# 3. 逐字接收并打印结果
for chunk in response:
    # 获取当前片段的内容
    content = chunk.choices[0].delta.content
    if content:
        # 逐字输出,不换行,立即刷新缓冲区
        print(content, end="", flush=True)

三、调用流程图

graph TD
    A[用户运行代码] --> B[创建OpenAI客户端]
    B --> C[配置api_key + base_url]
    C --> D[发送请求 stream=True]
    D --> E[通义千问模型开始逐字生成]
    E --> F[返回一个个数据块chunk]
    F --> G[遍历chunk 提取delta.content]
    G --> H[逐字打印 实时显示]

四、代码核心讲解

1. 关键参数:stream=True

  • stream=True:开启流式输出
  • 模型不再等全部生成完再返回,而是生成一点返回一点

2. 流式响应处理

for chunk in response:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)
  • chunk:每一小段返回的数据
  • delta.content:本次新增的文字内容
  • end="":不自动换行
  • flush=True立即显示,不缓存

五、运行效果

控制台会像这样逐字蹦出来

我是一名专业又有趣的Python编程专家,专门帮你解决各种Python问题~

六、重要安全提醒

  • 不要把 API Key 明文上传到公网!
  • 建议使用环境变量:
import os
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

七、总结

  • 一行 stream=True 即可开启流式逐字输出
  • 通义千问完全兼容 OpenAI 格式,代码零改动
  • 适合做:聊天机器人、AI 助手、控制台炫酷效果