Skip to main content
专项模型

长上下文(Qwen-Long)

处理超长文本文档时,标准大型语言模型会因上下文窗口限制而失败。Qwen-Long 模型提供 1000 万 Token 的上下文长度,通过文件上传和引用机制处理大规模数据。

本文档仅适用于华北2(北京)地域。如需使用模型,需使用华北2(北京)地域的API Key

使用方式

Qwen-Long 处理长文档分为以下两个步骤:文件上传与 API 调用。
  1. 文件上传与解析:
    • 通过 API 上传文件,文件格式与大小限制请参考支持格式
    • 上传并成功后,系统返回一个当前账号下的唯一 file-id并开始解析。文件上传、存储以及解析本身不产生费用。
  2. API 调用与计费:
    • 在调用模型时,通过在 system 消息中引用一个或多个 file-id
    • 模型根据 file-id 关联的文本内容进行推理。
    • 每次API 调用都会将所引用文件内容 Token 数计入该次请求的输入Token
此机制避免了在每次请求中传输庞大的文件内容,但需留意其计费方式。

快速开始

前提条件

文档上传

阿里云百炼系列手机产品介绍.docx为例,通过OpenAI兼容接口上传到阿里云百炼平台的安全存储空间,获取返回的file-id。有关文档上传接口的详细参数解释及调用方式,请参考API文档页面进行了解。
Python
import os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    # 以下为华北2(北京)地域的URL,各地域的URL不同。
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务base_url
)

file_object = client.files.create(file=Path("阿里云百炼系列手机产品介绍.docx"), purpose="file-extract")
print(file_object.id)
运行以上代码,您可以得到本次上传文件对应的file-id

通过文件ID传入信息并对话

将获取的 file-id 嵌入到System Message 中。第一条System Message用于设定角色向模型提问,后续的System Message用于传入 file-id,User Message包含针对文档的具体问题。
较长的文档可能会需要相对更长的时间完成解析,请耐心等待解析完成后进行调用。
Python
import os
from openai import OpenAI, BadRequestError

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    # 以下为华北2(北京)地域的URL,各地域的URL不同。
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务base_url
)
try:
    # 初始化messages列表
    completion = client.chat.completions.create(
        model="qwen-long",
        messages=[
            # sys1: 角色定义
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            # sys2: 文档内容(纯文本或file-id)
            # 请将 '{FILE_ID}'替换为您实际对话场景所使用的 fileid
            {'role': 'system', 'content': f'fileid://{FILE_ID}'},
            # 当请求中包含第 2 条system message时,user消息内容长度限制在 9,000 Token 以内
            {'role': 'user', 'content': '这篇文章讲了什么?'}
        ],
        # 所有代码示例均采用流式输出,以清晰和直观地展示模型输出过程。如果您希望查看非流式输出的案例,请参见https://help.aliyun.com/zh/model-studio/text-generation
        stream=True,
        stream_options={"include_usage": True}
    )

    full_content = ""
    for chunk in completion:
        if chunk.choices and chunk.choices[0].delta.content:
            # 拼接输出内容
            full_content += chunk.choices[0].delta.content
            print(chunk.model_dump())

        # 获取 token 使用情况
        if chunk.usage:
            print(f"总计 tokens: {chunk.usage.total_tokens}")

    print(full_content)

except BadRequestError as e:
    print(f"错误信息:{e}")
    print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")

传入多个文档

您可以在一条System Message中传入多个file-id,以便在一次请求中处理多个文档;也可以在messages中添加新的System Message以补充新的文档信息。
  • 传入多文档
  • 追加文档
Python
import os
from openai import OpenAI, BadRequestError

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    # 以下为华北2(北京)地域的URL,各地域的URL不同。
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务base_url
)
try:
    # 初始化messages列表
    completion = client.chat.completions.create(
        model="qwen-long",
        messages=[
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            # 请将 '{FILE_ID1}' 和 '{FILE_ID2}' 替换为您实际对话场景所使用的 fileid。
            {'role': 'system', 'content': f"fileid://{FILE_ID1},fileid://{FILE_ID2}"},
            {'role': 'user', 'content': '这几篇文章讲了什么?'}
        ],
        # 所有代码示例均采用流式输出,以清晰和直观地展示模型输出过程。如果您希望查看非流式输出的案例,请参见https://help.aliyun.com/zh/model-studio/text-generation
        stream=True,
        stream_options={"include_usage": True}
    )

    full_content = ""
    for chunk in completion:
        if chunk.choices and chunk.choices[0].delta.content:
            # 拼接输出内容
            full_content += chunk.choices[0].delta.content
            print(chunk.model_dump())

        # 获取 token 使用情况
        if chunk.usage:
            print(f"总计 tokens: {chunk.usage.total_tokens}")

    print(full_content)

except BadRequestError as e:
    print(f"错误信息:{e}")
    print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")

通过纯文本传入信息

除了通过 file-id 传入文档信息外,您还可以直接使用字符串传入文档内容。在此方法下,为避免模型混淆角色设定与文档内容,请确保在 messages 的第一条消息中添加用于角色设定的信息。
受限于API调用请求体大小,如果您的文本内容长度超过100万Token,请通过文件ID传入信息对话。
  • 简单示例
  • 传入多文档
  • 追加文档
您可以直接将文档内容输入System Message中。
Python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    # 以下为华北2(北京)地域的URL,各地域的URL不同。
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务base_url
)
# 初始化messages列表
completion = client.chat.completions.create(
    model="qwen-long",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'system', 'content': '阿里云百炼手机产品介绍 阿里云百炼X1 ——————畅享极致视界:搭载6.7英寸1440 x 3200像素超清屏幕...'},
        {'role': 'user', 'content': '文章讲了什么?'}
    ],
    # 所有代码示例均采用流式输出,以清晰和直观地展示模型输出过程。如果您希望查看非流式输出的案例,请参见https://help.aliyun.com/zh/model-studio/text-generation
    stream=True,
    stream_options={"include_usage": True}
)

full_content = ""
for chunk in completion:
    if chunk.choices and chunk.choices[0].delta.content:
        # 拼接输出内容
        full_content += chunk.choices[0].delta.content
        print(chunk.model_dump())

print(full_content)

模型定价

  • 华北2(北京)
模型名称版本上下文长度最大输入最大输出输入成本输出成本免费额度(注)
(Token数)(每百万Token)
qwen-long
Batch调用半价
稳定版10,000,00010,000,00032,7680.5元2元各100万Token有效期:百炼开通后90天内
qwen-long-latest
始终与最新快照版能力相同
Batch调用半价
最新版
qwen-long-2025-01-25
又称qwen-long-0125
快照版0.5元2元
Qwen-Long模型体验页面,您可以上传文档,在线提问。

常见问题

  1. Qwen-Long模型是否支持批量提交任务? 是的,Qwen-Long兼容 OpenAI Batch 接口并按照实时调用费用的 50% 来进行计费出账。该接口支持以文件方式批量提交任务,任务会以异步形式执行,并在完成或达到最长等待时间时返回结果。
  2. 通过OpenAI文件兼容接口上传文件后,文件将被保存在何处? 所有通过OpenAI文件兼容接口上传的文件均将被保存在当前阿里云账号下的阿里云百炼存储空间且不会产生任何费用,关于所上传文件的信息查询与管理请参考OpenAI文件接口
  3. qwen-long-2025-01-25 是什么? 这是一个版本快照标识。它代表模型在某个时间点的功能和性能冻结版本,提供比 latest 版更高的稳定性。它不代表到期日。
  4. 如何确定文件已经解析完成? 推荐通过查询文件状态来确认解析进度,无需反复试调用:调用查询文件信息(retrieve)接口获取文件对象,查看其 status 字段——processing 表示仍在解析中,processed 表示解析完成、可以引用调用,error 表示解析失败;当 status 为 processed 后即可正常调用。查询文件信息接口的详细说明请参考OpenAI文件接口。此外,也可以直接尝试使用该 file-id 与模型进行对话:若文件尚未解析完成,系统将返回错误码 400,并提示“File parsing in progress, please try again later.”;若模型调用成功并返回了回复内容,则表示文件已解析完成。
  5. 如何确保模型输出标准格式的 JSON 字符串? qwen-long及其所有快照版本均支持结构化输出功能。可以通过指定一个JSON Schema,使模型按照定义的结构以合法的JSON格式返回。

API参考

关于Qwen-Long模型的输入与输出参数,请参考通义千问API详情

错误码

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

限制

  • SDK 依赖:
    • 文件上传、删除、查询等管理操作必须使用 OpenAI 兼容 SDK。
    • 模型调用可使用 OpenAI 兼容 SDK 或 Dashscope SDK。
  • 文件上传:
    • 支持格式:TXT, DOCX, PDF, XLSX, EPUB, MOBI, MD, CSV, JSON, BMP, PNG, JPG/JPEG, GIF。
    • 文件大小:图片格式文件上限 20MB,其他格式文件上限 150MB。
    • 账户配额:单个账户最多上传 1 万个文件,总大小不超过 100GB。当文件数量或总大小达到任一上限时,新的文件上传请求将会失败。请先参考OpenAI兼容-File,删除不再需要的文件以释放配额,然后才能继续上传。
    • 存储有效期:当前暂无有效期限制。
  • API 输入:
    • 第 1 条 system 消息用于角色定义,第 2 条 system 消息用于传入文档内容或 fileid://xxxuser 消息用于用户提问。
    • 通过 file-id 引用时,单次请求最多引用 100 个文件。
    • 当请求中包含第 2 条system 消息(即存在两个 system 消息)时,user消息的内容长度不得超过 9,000 Token。仅当请求中不存在第 2 条 system 消息时,user 消息才不受此限制。
    • 总上下文长度上限为 1000 万 Token。
  • API 输出:
    • 最大输出长度为 32,768 Token。
  • 文件共享:
    • file-id 仅在生成它的阿里云主账号内有效,不支持跨账号或通过 RAM 用户 API Key 调用。
  • 免费额度:100万Token的免费额度仅在阿里云百炼开通后的90天内有效。使用超出免费额度的部分将按照相应的输入输出成本收费。
  • 限流:关于模型的限流条件,请参见限流
Token Plan
模型调优
模型压缩目录节点
用量统计与性能监控
资产中心
服务支持