长上下文

您与大模型的对话(输入和输出)会受到模型上下文长度的限制。对于128K以内的长上下文场景,通义千问Plus或通义千问Turbo均能满足需求;而对于超过128K的超长上下文场景,建议使用Qwen-Long模型。Qwen-Long提供长达1,000Token(约1,500万字)的上下文长度,支持上传文档并基于文档进行问答,且使用成本极低,每1元可处理200Token(约300万字)。

场景示例

Qwen-Long可以用于快速分析代码、网页、论文、报告、合同、书籍、规范手册、技术文档等。示例场景如下:

根据公司年报分析战略风险和机遇

为对Qwen-Long模型在长文本处理方面的能力进行全面评估,此示例上传了某公司2015年至2024年的10-K公司财务业绩详细报告文件。以下是相关信息:

  • 文件数量:共10

  • 文件类型:PDF

  • 每份文件页数:约200

这些报告涵盖了每一年的详细财务数据和业务信息,所提供的10-K报告为提交给纽约证券交易所的正式官方文件。这些报告经过严格的审计和验证,由于这些报告涵盖了详细的财务和业务信息,它们能够为实际应用场景提供真实且有价值的参考

Prompt

请从这家公司的2015-2024提交给纽约证交所的10-K公司财务业绩详细报告回答以下问题,每一年的10-K文件都是单独的,
另外请不要在回答中出现任何公司的名字,如有需要请使用“该公司”或“某公司”代替:
1. 请从这份2015-2024年的某公司10-K报告中提取出每年报告的核心内容,包括财务数据、管理讨论和分析。
2. 请为该公司20152024年的10-K报告生成一个摘要,重点突出公司年度财务状况和重大事件。
3. 在这份10-K报告中,详细描述2018年的市场扩展策略和其对公司财务的影响。
4. 在分析了这份报告之后,请解释2019年公司面临的主要风险因素

模型输出

1. 每年报告的核心内容:
2015年:报告指出,信息系统的安全性是一个重要的关注点,并且公司已经采取措施加强安全防护。财务数据显示在美国市场的收入占比和经济条件对业务的影响。
2016年:报告强调了信息系统的安全性和风险管理,提到美国市场营收占总营收的比例以及经济波动可能带来的负面影响。
2017年:报告提到了信息系统攻击的风险,并说明公司在人员培训和技术投入上的努力,还提到美国市场收入占比和潜在的经济影响。
2018年:报告中提到了税务改革法案对其他负债增加的影响,并强调了管理层对财务报表的责任。
2019年:报告介绍了收购一家咖啡公司以扩大热饮市场平台的动作,同时提到管理层对财务报告的责任。
2020年:报告讨论了新冠疫情对公司业务的影响,包括产品销售下降等情况。
2021年:报告继续讨论新冠疫情对业务的持续影响,特别是对非家庭渠道销售的影响。
2022年:报告关注了疫情及政府措施对全球业务的影响。
2023年:报告警告了不利经济条件可能导致消费者转向更便宜的产品从而影响公司的盈利能力。
2024年:报告提到了库存增加的原因,包括为了应对供应链中断而提前储备物资。
2. 摘要:
  从2015年到2024年,该公司的10-K报告记录了其在美国市场的收入占比变化以及面临的各种风险,如信息安全威胁、经济波动等。特别是在2018年,该公司进行了重大的市场扩展,收购了一家咖啡公司来增强其在热饮料市场的地位。
  然而,2020年起,新冠疫情对公司造成了显著冲击,导致产品销售减少。尽管如此,公司还是通过增加库存来应对供应链中断的风险。
3. 2018年市场扩展策略及其财务影响:
    2018年,该公司通过收购一家咖啡公司来增强其在热饮料市场的存在感。这次收购预计能够帮助该公司扩大在这一领域的市场份额。不过,由于税务改革法案的要求,公司的一次性过渡税增加了其他负债。
4. 2019年主要风险因素:
    2019年,该公司面临的主要风险因素包括信息系统遭受攻击的可能性,这可能导致敏感信息泄露或被滥用;此外,美国市场的经济状况不佳也可能会影响消费者对该公司的产品需求,从而影响公司的盈利能力和整体财务表现。

输入tokens: 1,648,530 输出tokens: 423 预估成本: 0.83

代码项目的总体审查与优化

在当前编程辅助工具中,尽管许多生成式AI插件(如Copilot)提供了代码片段的生成和建议,但大多数工具的功能限制在单个代码文件的范围内,难以宏观地审视整个代码库。Qwen-Long模型通过处理长上下文窗口,能够对大型代码仓库进行全面分析和优化建议。此示例将一个GitHub项目的代码库转写为TXT文件并交给Qwen-Long模型

Prompt

附件是一个txt格式存储的代码库,请回答以下问题:
1.这个项目是基于什么编程语言开发的?主要依赖项有哪些?
2.此项目的主要功能有哪些?
3.此项目还有哪些部分可以进行优化?

模型输出

1.该项目是基于Kotlin编程语言开发的。主要依赖项包括:Jetpack Compose用于构建现代UI,Coil用于高效加载和缓存图片,Retrofit用于流畅的网络请求,Dagger Hilt简化了依赖注入,
  Room作为SQLite对象映射库用于本地数据存储,Paging Compose简化了分页列表的实现,Mockito、JUnitTurbine确保了应用的可靠性。
2.此项目的主要功能有:展示头条新闻文章;按照国家、语言和来源筛选新闻;保存新闻文章以备将来参考;搜索特定的新闻文章;在WebView中查看新闻文章以便详细阅读。
3.从提供的信息来看,项目的优化可以从以下几个方面入手:
  首先,项目的build.gradle文件中的API_KEY应该被替换为实际的API密钥,而不是使用占位符;其次,项目的proguard配置文件中有关于保留行号信息的注释代码,如果不需要原始源文件名,可以考虑取消注释并启用该设置;
  最后,项目中使用了多个第三方库,需要持续关注这些库的更新,并及时升级到最新版本,以利用最新的特性和修复已知的问题。同时,还可以考虑对现有的单元测试和UI测试进行扩展,提高代码覆盖率,进一步保证代码的质量。

输入tokens: 290,766 输出tokens: 251 预估成本: 0.15

内容发布平台的文章自动分类和添加标签

在内容发布场景中,利用Qwen-Long模型长上下文窗口实现自动化分类与标签添加,不仅能减少内容创作者的手动工作量,还能提高平台内容的管理效率与用户体验。此示例提供给Qwen-Long模型一系列不同主题的文章。要求模型自动分析每篇文章的主题和关键信息,为每篇文章分配一个主题分类,并生成相关的标签,最后格式化为JSON结构的数据。

Prompt

附件是若干篇不同的文章,请将文章划入若干主题分类,并为每篇文章添加若干标签。每篇文章只能有一个主题,但可以有一个或多个标签。
标签应当尽量总结突出文章主旨或主题,将结果放在一个json代码块中输出,其格式必须符合json语法,json结构如下:

[
  {
    文章标题:"Title"
    主题:"the theme"
    标签["tag1","tag2",....]
  }
]

模型输出

[
  {
    "文章标题": "Golang生成随机数案例实战-阿里云开发者社区",
    "主题": "编程技术",
    "标签": ["Go语言", "随机数生成", "编程案例"]
  },
  {
    "文章标题": "他们锁在连锁咖啡店",
    "主题": "社会现象",
    "标签": ["咖啡店", "工作环境", "连锁品牌"]
  },
  {
    "文章标题": "提升深度学习性能的利器全面解析PAI-TorchAcc的优化技术与应用场景-阿里云开发者社区",
    "主题": "人工智能技术",
    "标签": ["深度学习", "PAI-TorchAcc", "性能优化"]
  },
  {
    "文章标题": "一个美国人在东北散步",
    "主题": "旅行记述",
    "标签": ["旅行", "文化体验", "美国人在东北"]
  },
  {
    "文章标题": "一群没有被看到的运动员和他们未完成的奥运会",
    "主题": "体育人文",
    "标签": ["运动员", "奥运会", "未完成的比赛"]
  },
  {
    "文章标题": "与信任问题共存零信任架构的人性化一面-阿里云开发者社区",
    "主题": "网络安全",
    "标签": ["零信任架构", "网络安全", "人性化"]
  },
  {
    "文章标题": "在DockerDocker配置文件在哪里以及如何修改-阿里云开发者社区",
    "主题": "容器技术",
    "标签": ["Docker", "配置文件", "系统管理"]
  },
  {
    "文章标题": "FrontMatterInternationalTalentProgramsintheChanging",
    "主题": "教育研究",
    "标签": ["国际人才", "STEM", "全球环境"]
  },
  {
    "文章标题": "InterannualClimateVariabilityandMalariainMozambique-",
    "主题": "气候与健康",
    "标签": ["气候变化", "疟疾", "莫桑比克"]
  },
  {
    "文章标题": "SpringCloud常见面试题一SpringCloud5大组件服务注册和发现nacoseureka区别",
    "主题": "微服务架构",
    "标签": ["SpringCloud", "服务注册", "面试题"]
  }
]

输入tokens: 53,038 输出tokens: 557 预估成本: 0.03

支持的模型

模型名称

上下文长度

最大输入

最大输出

输入成本

输出成本

免费额度

(注)

(Token数)

(每千Token)

qwen-long

10,000,000

10,000,000

6,000

0.0005

0.002

100Token

有效期:百炼开通后30天内

20249190点后开通百炼的用户,免费额度有效期为180天。

Qwen-Long模型体验页面,您可以上传文档,在线提问。

通过API使用

前提条件

文档上传方式选择

在选择文档上传方式时,请考虑以下因素:

  1. 通过 file-id 上传

    • 推荐:适合需要频繁引用和管理的文档。可以有效减少文本输入错误,操作简便。

      文件格式仅限于纯文本文件类型,包括 txt、docx、pdf、epub、mobi、md 等,目前不支持图片或扫描文档等本质是图片形式的内容。每个文件的大小限制为 150MB,最多可以上传 1 万个文件,总文件大小不得超过 100GB。
  2. 通过纯文本上传

    • 适用场景:适合小规模文档或临时内容。如果文档较短且不需要长期存储,可以选择此方式。受限于API调用请求体大小,如果您的文本内容长度超过1M Tokens,请参考,通过file-id传入。

  3. 通过 JSON 字符串上传

    • 适用场景:适合需要传递复杂数据结构的情况。如果您的文档包含多层次信息,使用 JSON 字符串可以确保数据的完整性。

请根据您的具体需求和文档特性选择最合适的上传方式。我们建议优先考虑 file-id 上传,以获得最佳体验。

通过file-id传入文档信息

您可以通过OpenAI兼容接口上传文档,并将返回的file-id输入到System Message中,使得模型在回复时参考文档信息。

简单示例

Qwen-Long模型可以基于您上传的文档进行回复。此处以百炼系列手机产品介绍.docx作为示例文件。

  1. 将文件通过OpenAI兼容接口上传到百炼平台,获取file-id。有关文档上传接口的详细参数解释及调用方式,请参考API文档页面进行了解。

    Python

    import os
    from pathlib import Path
    from openai import OpenAI
    
    client = OpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )
    
    file_object = client.files.create(file=Path("百炼系列手机产品介绍.docx"), purpose="file-extract")
    print(file_object.id)
    

    curl

    curl --location --request POST 'https://dashscope.aliyuncs.com/compatible-mode/v1/files' \
      --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
      --form 'file=@"百炼系列手机产品介绍.docx"' \
      --form 'purpose="file-extract"'

    运行以上代码,您可以得到本次上传文件对应的file-id

  2. file-id传入System Message中,并在User Message中输入问题。

    在通过 system message 提供文档信息时,建议同时设置一个正常role-playsystem message,如默认的 “You are a helpful assistant.”,角色设定会对文档的处理效果产生影响,因此建议在消息中明确设定自己的角色。

    Python

    import os
    from openai import OpenAI
    
    client = OpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )
    
    completion = client.chat.completions.create(
        model="qwen-long",
        messages=[
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            {'role': 'system', 'content': 'fileid://file-fe-xxx'},
            {'role': 'user', 'content': '这篇文章讲了什么?'}
        ],
        stream=True,
        stream_options={"include_usage": True}
    )
    
    for chunk in completion:
        print(chunk.model_dump())
    

    curl

    curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
    --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
    --header "Content-Type: application/json" \
    --data '{
        "model": "qwen-long",
        "messages": [
            {"role": "system","content": "You are a helpful assistant."},
            {"role": "system","content": "fileid://file-fe-xxx"},
            {"role": "user","content": "这篇文章讲了什么?"}
        ],
        "stream": true,
        "stream_options": {
            "include_usage": true
        }
    }'
    

    通过配置streamstream_options参数,Qwen-Long模型会流式输出回复,并在最后返回的对象中通过usage字段展示Token使用情况。

    本文中的所有代码示例均采用流式输出,以清晰和直观地展示模型输出过程。如果您希望查看非流式输出的案例,请参见此处的非流式输出案例。

    Python

    {"id":"chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47","choices":[{"delta":{"content":"","function_call":null,"role":"assistant","tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1726023099,"model":"qwen-long","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
    {"id":"chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47","choices":[{"delta":{"content":"这篇文章","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1726023099,"model":"qwen-long","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
    {"id":"chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47","choices":[{"delta":{"content":"介绍了","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1726023099,"model":"qwen-long","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
    {"id":"chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47","choices":[{"delta":{"content":"百","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1726023099,"model":"qwen-long","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
    ......
    {"id":"chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47","choices":[{"delta":{"content":"满足不同的使用需求","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1726023099,"model":"qwen-long","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
    {"id":"chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47","choices":[{"delta":{"content":"。","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1726023099,"model":"qwen-long","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
    {"id":"chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47","choices":[{"delta":{"content":"","function_call":null,"role":null,"tool_calls":null},"finish_reason":"stop","index":0,"logprobs":null}],"created":1726023099,"model":"qwen-long","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
    {"id":"chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47","choices":[],"created":1726023099,"model":"qwen-long","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":{"completion_tokens":93,"prompt_tokens":5395,"total_tokens":5488}}

    curl

    data: {"choices":[{"delta":{"content":"","role":"assistant"},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: {"choices":[{"finish_reason":null,"delta":{"content":"这篇文章"},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: {"choices":[{"delta":{"content":"是"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: {"choices":[{"delta":{"content":"关于"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    .....
    
    data: {"choices":[{"delta":{"content":"描述了每款"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: {"choices":[{"delta":{"content":"手机的主要特点和"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: {"choices":[{"delta":{"content":"规格,并提供了参考"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: {"choices":[{"delta":{"content":"售价信息。"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: {"choices":[{"finish_reason":"stop","delta":{"content":""},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":5395,"completion_tokens":71,"total_tokens":5466},"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"}
    
    data: [DONE]
    

除了传入单个file-id外,您还可以通过传入多个file-id来向模型传入多个文档,或在对话过程中追加file-id使模型能够参考新的文档信息。

传入多文档

您可以在一条System Message中传入多个file-id,在一次请求中处理多个文档。使用方式请参考示例代码。

示例代码

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen-long",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        # 请将 'file-fe-xxx1' 和 'file-fe-xxx2' 替换为您实际对话场景所使用的 file-id。
        {'role': 'system', 'content': f"fileid://file-fe-xxx1,fileid://file-fe-xxx2"},
        {'role': 'user', 'content': '这几篇文章讲了什么?'}
    ],
    stream=True,
    stream_options={"include_usage": True}
)

for chunk in completion:
    print(chunk.model_dump())

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
        {"role": "system","content": "You are a helpful assistant."},
        {"role": "system","content": "fileid://file-fe-xxx1"},
        {"role": "system","content": "fileid://file-fe-xxx2"},
        {"role": "user","content": "这两篇文章讲了什么?"}
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

追加文档

在您与模型的交互过程中,可能需要补充新的文档信息。您可以在Messages 数组中添加新的file-idSystem Message中来实现这一效果。

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务base_url
)
# 初始化messages列表
messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    # 请将 'file-fe-xxx1' 替换为您实际对话场景所使用的 file-id。
    {'role': 'system', 'content': f'fileid://file-fe-xxx1'},
    {'role': 'user', 'content': '这篇文章讲了什么?'}
]

# 第一轮响应
completion_1 = client.chat.completions.create(
    model="qwen-long",
    messages=messages,
    stream=False
)

# 打印出第一轮响应
# 如果需要流式输出第一轮的响应,需要将stream设置为True,并拼接每一段输出内容,在构造assistant_message的content时传入拼接后的字符
print(f"第一轮响应:{completion_1.choices[0].message.model_dump()}")

# 构造assistant_message
assistant_message = {
    "role": "assistant",
    "content": completion_1.choices[0].message.content}

# 将assistant_message添加到messages中
messages.append(assistant_message)

# 将追加文档的fileid添加到messages中
# 请将 'file-fe-xxx2' 替换为您实际对话场景所使用的 file-id。
system_message = {'role': 'system', 'content': f'fileid://file-fe-xxx2'}
messages.append(system_message)

# 添加用户问题
messages.append({'role': 'user', 'content': '这两篇文章讨论的方法有什么异同点?'})

# 追加文档后的响应
completion_2 = client.chat.completions.create(
    model="qwen-long",
    messages=messages,
    stream=True,
    stream_options={
        "include_usage": True
    }
)

# 流式打印出追加文档后的响应
print("追加文档后的响应:")
for chunk in completion_2:
    print(chunk.model_dump())

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
        {"role": "system","content": "You are a helpful assistant."},
        {"role": "system","content": "fileid://file-fe-xxx1"},
        {"role": "user","content": "这篇文章讲了什么?"},
        {"role": "system","content": "fileid://file-fe-xxx2"},
        {"role": "user","content": "这两篇文章讨论的方法有什么异同点?"}
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

通过纯文本传入信息

除了通过file-id传入文档信息的方法外,您还可以直接通过字符串传入文档信息。

受限于API调用请求体大小,如果您的文本内容长度超过1M Tokens,请参考通过file-id传入文档信息,通过file-id传入。

简单示例

您可以直接将文档内容输入System Message中。

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务endpoint
)

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': '文章讲了什么?'}
    ],
    stream=True,
    stream_options={"include_usage": True}
)

for chunk in completion:
    print(chunk.model_dump())
    

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
        {"role": "system","content": "You are a helpful assistant."},
        {"role": "system","content": "百炼X1 —— 畅享极致视界:搭载6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率,..."},
        {"role": "user","content": "这篇文章讲了什么?"}
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

传入多文档

当您在本轮对话需要传入多个文档时,可以将文档内容放在不同的System Message中。

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

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像素超清屏幕,搭配120Hz刷新率...'},
        {'role': 'system', 'content': '星尘S9 Pro —— 创新视觉盛宴:突破性6.9英寸1440 x 3088像素屏下摄像头设计...'},
        {'role': 'user', 'content': '这两篇文章讨论的产品有什么异同点?'}
    ],
    stream=True,
    stream_options={"include_usage": True}
)

for chunk in completion:
    print(chunk.model_dump())

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
        {"role": "system","content": "You are a helpful assistant."},
        {"role": "system","content": "百炼X1 —— 畅享极致视界:搭载6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率..."},
        {"role": "system","content": "星尘S9 Pro —— 创新视觉盛宴:突破性6.9英寸1440 x 3088像素屏下摄像头设计..."},
        {"role": "user","content": "这两篇文章讨论的产品有什么异同点?"}
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

追加文档

在您与模型的交互过程中,可能需要补充新的文档信息。您可以在Messages 数组中添加新的文档内容到System Message中来实现这一效果。

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务base_url
)
# 初始化messages列表
messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'system', 'content': '百炼X1 —— 畅享极致视界:搭载6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率...'},
    {'role': 'user', 'content': '这篇文章讲了什么?'}
]

# 第一轮响应
completion_1 = client.chat.completions.create(
    model="qwen-long",
    messages=messages,
    stream=False
)

# 打印出第一轮响应
# 如果需要流式输出第一轮的响应,需要将stream设置为True,并拼接每一段输出内容,在构造assistant_message的content时传入拼接后的字符
print(f"第一轮响应:{completion_1.choices[0].message.model_dump()}")

# 构造assistant_message
assistant_message = {
    "role": "assistant",
    "content": completion_1.choices[0].message.content}

# 将assistant_message添加到messages中
messages.append(assistant_message)
# 将追加文档内容添加到messages中
system_message = {
    'role': 'system',
    'content': '星尘S9 Pro —— 创新视觉盛宴:突破性6.9英寸1440 x 3088像素屏下摄像头设计,带来无界视觉享受...'
}
messages.append(system_message)

# 添加用户问题
messages.append({
    'role': 'user',
    'content': '这两篇文章讨论的产品有什么异同点?'
})

# 追加文档后的响应
completion_2 = client.chat.completions.create(
    model="qwen-long",
    messages=messages,
    stream=True,
        stream_options={
        "include_usage": True
    }
)

# 流式打印出追加文档后的响应
print("追加文档后的响应:")
for chunk in completion_2:
    print(chunk.model_dump())

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
            {"role": "system","content": "You are a helpful assistant."},
            {"role": "system","content": "百炼X1 —— 畅享极致视界:搭载6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率..."},
            {"role": "user","content": "这篇文章讲了什么?"},
            {"role": "system","content": "星尘S9 Pro —— 创新视觉盛宴:突破性6.9英寸1440 x 3088像素屏下摄像头设计,带来无界视觉享受..."},
            {"role": "user","content": "这两篇文章讨论的产品有什么异同点"}
        ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

通过JSON字符串传入文档信息

您可以通过JSON字符串传入文档的内容、类型、名称与标题,使模型在本轮对话中可以参考这些信息。

JSON格式的文档信息需要按照文档内容(content)、文档类型(file_type)、文档名称(filename)、文档标题(title)的格式进行组织。请先将结构化的文档信息转换为JSON 字符串,再输入System Message中。

简单示例

Python

import os
import json
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 替换成真实DashScope的API_KEY,如已配置API-KEY到环境变量请使用变量名(推荐)
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务endpoint
)

file_info = {
    # 全文内容省略,只做格式示意
    'content': '百炼X1 —— 畅享极致视界:搭载6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率...',
    'file_type': 'docx',
    'filename': '百炼系列手机产品介绍',
    'title': '百炼手机产品介绍'
}

completion = client.chat.completions.create(
    model="qwen-long",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        # 通过json.dumps方法将JSON object转化为字符串
        {'role': 'system', 'content': json.dumps(file_info, ensure_ascii=False)},
        {'role': 'user', 'content': '文章讲了什么?'}
    ],
    stream=True
)

for chunk in completion:
    print(chunk.model_dump())

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {
                "role": "system",
                "content": "{\"content\": \"百炼X1 搭载6.7英寸1440 x 3200像素超清屏幕...\n\", \"file_type\": \"docx\", \"filename\": \"百炼系列手机产品介绍\", \"title\": \"百炼手机产品介绍\"}"
            },
            {"role": "user", "content": "文章讲了什么?"}
        ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

传入多文档

Python

import os
import json
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
file_info_1 = {
    'content': '百炼X1————畅享极致视界:搭载6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率...',
    'file_type': 'pdf',
    'filename': 'test_case_1',
    'title': 'test_case_1'
}

file_info_2 = {
    'content': '星尘S9 Pro —— 创新视觉盛宴:突破性6.9英寸1440 x 3088像素屏下摄像头设计:...',
    'file_type': 'pdf',
    'filename': 'test_case_2',
    'title': 'test_case_2'
}

# 首次对话会等待文档解析完成,首轮响应时间可能较长
completion = client.chat.completions.create(
    model="qwen-long",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'system', 'content': json.dumps(file_info_1, ensure_ascii=False)},
        {'role': 'system', 'content': json.dumps(file_info_2, ensure_ascii=False)},
        {'role': 'user', 'content': '这两篇文章讨论的产品有什么异同点?'},
    ],
    stream=True,
    stream_options={"include_usage": True}
)

for chunk in completion:
    print(chunk.model_dump())
    

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {
                "role": "system",
                "content": "{\"content\": \"百炼X1 搭载6.7英寸1440 x 3200像素超清屏幕...\n\", \"file_type\": \"pdf\", \"filename\": \"test_case_1\", \"title\": \"test_case_1\"}"
            },
            {
                "role": "system",
                "content": "{\"content\": \"星尘S9 Pro —— 创新视觉盛宴:突破性6.9英寸1440 x 3088像素...\n\", \"file_type\": \"pdf\", \"filename\": \"test_case_2\", \"title\": \"test_case_2\"}"
            },
            {"role": "user", "content": "这两篇文章讨论的产品有什么异同点?"}
        ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

追加文档

在您与模型的交互过程中,可能需要补充新的文档信息。您可以在Messages 数组中添加新的JSON格式化后的文档内容到System Message中,来实现这一效果。

Python

import os
import json
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务base_url
)
# 初始化messages列表
file_info_1 = {
    'content': '星尘S9 Pro —— 创新视觉盛宴:突破性6.9英寸1440 x 3088像素屏下摄像头设计,带来无界视觉享受。',
    'file_type': 'pdf',
    'filename': 'test_case_1',
    'title': 'test_case_1'
}

file_info_2 = {
    'content': '百炼X1 —— 畅享极致视界:搭载6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率,流畅视觉体验跃然眼前。',
    'file_type': 'pdf',
    'filename': 'test_case_2',
    'title': 'test_case_2'
}
messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'system', 'content': json.dumps(file_info_1, ensure_ascii=False)},
    {'role': 'user', 'content': '这篇文章讲了什么?'},
]

# 第一轮响应
completion_1 = client.chat.completions.create(
    model="qwen-long",
    messages=messages,
    stream=False
)

# 打印出第一轮响应
# 如果需要流式输出第一轮的响应,需要将stream设置为True,并拼接每一段输出内容,在构造assistant_message的content时传入拼接后的字符
print(f"第一轮响应:{completion_1.choices[0].message.model_dump()}")

# 构造assistant_message
assistant_message = {
    "role": "assistant",
    "content": completion_1.choices[0].message.content}

# 将assistant_message添加到messages中
messages.append(assistant_message)
# 将追加文档的信息添加到messages中
system_message = {
    'role': 'system',
    'content': json.dumps(file_info_2, ensure_ascii=False)
}
messages.append(system_message)

# 添加用户问题
messages.append({
    'role': 'user',
    'content': '这两篇文章讨论的产品有什么异同点?'
})

# 追加文档后的响应
completion_2 = client.chat.completions.create(
    model="qwen-long",
    messages=messages,
    stream=True,
        stream_options={
        "include_usage": True
    }
)

# 流式打印出追加文档后的响应
print("追加文档后的响应:")
for chunk in completion_2:
    print(chunk.model_dump())
    

curl

curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-long",
    "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {
                "role": "system",
                "content": "{\"content\": \"百炼X1 搭载6.7英寸1440 x 3200像素超清屏幕...\n\", \"file_type\": \"pdf\", \"filename\": \"test_case_1\", \"title\": \"test_case_1\"}"
            },
            {"role": "user", "content": "这篇文章讲了什么?"},
            {
                "role": "system",
                "content": "{\"content\": \"星尘S9 Pro —— 创新视觉盛宴:突破性6.9英寸1440 x 3088像素...\n\", \"file_type\": \"pdf\", \"filename\": \"test_case_2\", \"title\": \"test_case_2\"}"
            },
            {"role": "user", "content": "这两篇文章讨论的产品有什么异同点?"}
        ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

限制

  • 文件上传限制:文件格式支持常见的文本文件(txt、doc、docx、pdf、epub、mobi、md),单文件大小限制为150M,总量限制为1万个文件,总文件大小限制为100G。更多文件上传相关内容请参见上传文件

  • 输入限制:

    • 当直接输入纯文本时,content 的最大输入限制为 9,000 Token。

    • 通过file-id传入文档信息并在 system 消息中使用返回的 file-id,此时 content 的最大输入限制可扩展至 10,000,000 Token。

  • 输出限制:最大输出为 6,000 Token。

  • 免费额度: 100Token的免费额度仅在百炼开通后的180天内有效。使用超出免费额度的部分将按照相应的输入输出成本收费。

  • 调用限制:关于模型的限流条件,请参见限流

常见问题

  1. 如何解决API调用过程中遇到的错误?

    请根据详细报错状态码,参考状态码说明

  2. Dashscope SDK的调用方式是否兼容?

    是的,Dashscope SDK对模型调用仍然兼容,但文件上传与file-id获取目前只支持通过OpenAI SDK进行调用,且通过此方式获得的file-idDashscope对模型进行调用所需要的file-id通用。

  3. Qwen-Long是否支持通System Message来指定模型行为?

    是的,Qwen-Long仍支持通过System Message标准化指定模型行为的功能,详情请参照上方“通过API使用”部分。

  4. 如何在JSON格式中组织文档信息?

    请参照上方通过JSON字符串传入文档信息部分,构造messages时,为避免格式问题,JSON格式的文档信息应按照文档内容(content)、文档类型(file_type)、文档名称(filename)、文档标题(title)的格式组织。

  5. Qwen-Long支持以流式回复吗?

    通过对stream参数及stream_options配置选项字典中include_usage选项的配置,Qwen-Long模型会以流式的形式进行回复,并在最后返回的对象中通过usage字段展示token使用情况。

API参考

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