流式输出

2025-03-13   访问量:1007

大模型收到输入后并不是一次性生成最终结果,而是逐步地生成中间结果,最终结果由中间结果拼接而成。用流式输出的方式调用大模型 API,能够实时返回中间结果,减少用户的阅读等待时间,并降低请求的超时风险。

概述

相比非流式输出,流式输出可以实时地将中间结果返回,您可以在模型进行输出的同时进行阅读,减少等待模型回复的时间;并且当输出内容较长时,有效降低请求超时的风险。

请求超时错误的报错信息:Request timed out, please try again later. 或 Response timeout。

以下为流式输出与非流式输出的效果对比。

⏱️ 等待时间:3 秒

已关闭流式输出

以上组件仅供您参考,并未真实发送请求。

如何使用

前提条件

您需要已获取API Key配置API Key到环境变量。如果通过OpenAI SDKDashScope SDK进行调用,还需要安装SDK

开始使用

OpenAI兼容

DashScope

通过 OpenAI 兼容方式开启流式输出十分简便,只需在请求参数中设置 stream 为 true 即可,详情请参见以下代码。

Python

Node.js

curl

流式输出默认不会返回本次请求所使用的 Token 量。您可以通过设置stream_options参数为{"include_usage": True},使最后一个返回的 chunk 包含本次请求所使用的 Token 量。
我们未来会将stream_options参数默认设置为{"include_usage": True},这会使最后一个chunkchoices字段成为空列表,我们建议您参考本文的最新代码,在业务代码中加上if chunk.choices:的判断条件。

 

import osfrom openai import OpenAI

client = OpenAI(    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

completion = client.chat.completions.create(
    model="qwen-plus",  # 此处以qwen-plus为例,您可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你是谁?"}
    ],
    stream=True)

full_content = ""print("流式输出内容为:")for chunk in completion:    # 如果stream_options.include_usage为True,则最后一个chunk的choices字段为空列表,需要跳过(可以通过chunk.usage获取 Token 使用量)
    if chunk.choices:
        full_content += chunk.choices[0].delta.content        print(chunk.choices[0].delta.content)print(f"完整内容为:{full_content}")

返回结果

 

流式输出内容为:

我是来自
阿里
云
的大规模语言模型
,我叫通
义千问。

完整内容为:我是来自阿里云的大规模语言模型,我叫通义千问。

错误码

如果模型调用失败并返回报错信息,请参见错误信息进行解决。

常见问题

Q1:开启流式输出对模型的回复效果是否有影响?

A1:不会有影响。


Q2:开启流式输出功能需要额外付费吗?

A2:不需要额外付费,流式输出与非流式输出计费规则一样,都是按照输入与输出的 Token 计费。


热门文章
更多>