大模型收到输入后并不是一次性生成最终结果,而是逐步地生成中间结果,最终结果由中间结果拼接而成。用流式输出的方式调用大模型 API,能够实时返回中间结果,减少用户的阅读等待时间,并降低请求的超时风险。
相比非流式输出,流式输出可以实时地将中间结果返回,您可以在模型进行输出的同时进行阅读,减少等待模型回复的时间;并且当输出内容较长时,有效降低请求超时的风险。 以下为流式输出与非流式输出的效果对比。 ⏱️ 等待时间:3 秒 已关闭流式输出 您需要已获取API Key并配置API Key到环境变量。如果通过OpenAI SDK或DashScope SDK进行调用,还需要安装SDK。 OpenAI兼容 DashScope 通过 OpenAI 兼容方式开启流式输出十分简便,只需在请求参数中设置 Python Node.js curl 返回结果 如果模型调用失败并返回报错信息,请参见错误信息进行解决。 Q1:开启流式输出对模型的回复效果是否有影响? A1:不会有影响。 Q2:开启流式输出功能需要额外付费吗? A2:不需要额外付费,流式输出与非流式输出计费规则一样,都是按照输入与输出的 Token 计费。概述
请求超时错误的报错信息:Request timed out, please try again later. 或 Response timeout。
以上组件仅供您参考,并未真实发送请求。
如何使用
前提条件
开始使用
stream
为 true 即可,详情请参见以下代码。流式输出默认不会返回本次请求所使用的 Token 量。您可以通过设置
stream_options
参数为{"include_usage": True}
,使最后一个返回的 chunk 包含本次请求所使用的 Token 量。我们未来会将
stream_options
参数默认设置为{"include_usage": True}
,这会使最后一个chunk的choices
字段成为空列表,我们建议您参考本文的最新代码,在业务代码中加上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}")
流式输出内容为:
我是来自
阿里
云
的大规模语言模型
,我叫通
义千问。
完整内容为:我是来自阿里云的大规模语言模型,我叫通义千问。
错误码
常见问题