快速开始

qwen-long是通义千问模型家族中,提供具备强大长文本处理能力的模型,最大可支持千万tokens的对话窗口,并通过与OpenAI兼容的模式提供API服务(注:Dashscope SDK调用的方式仍然兼容)。本文提供简单的示例代码,帮助您快速上手并调用qwen-long模型服务。

前提条件

重要

安装方式:pip install --upgrade 'openai>=1.0'

检查版本:python -c 'import openai; print("version =",openai.__version__)'

使用方式

说明

qwen-long模型通过system role的接口提供文档信息。于此同时,标准的通过system role来指定模型行为的能力依然支持,当需要进行文档对话时,请参照示例同时提供标准的system message 与 用于提供文档信息的system message。

  1. 通过system role的内容来提供文档信息。当前支持两种方式来提供文档信息:

  • 在提前上传文件获取文件id(fileid)后,可以直接提供fileid。其中上传文件的接口和操作方法,可参照OpenAI文件接口兼容。支持在对话中,使用一个或多个fileid。

  • 直接输入需要处理的文本格式的文档内容(file content)。

  1. 其他对话内容格式的填写遵循标准的messages格式。

示例代码

方式一:以文档id(fileid)方式输入文档(推荐)

您可以在使用Dashscope的文件上传服务后,使用获取到的文档id来进行文档对话,当前示例为流式调用的方式。

from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key="$your-dashscope-api-key",  # 替换成真实DashScope的API_KEY
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务endpoint
)

# data.pdf 是一个示例文件
file = client.files.create(file=Path("data.pdf"), purpose="file-extract")

# 首次对话会等待文档解析完成,首次rt可能较长
completion = client.chat.completions.create(
    model="qwen-long",
    messages=[
        {
            'role': 'system',
            'content': 'You are a helpful assistant.'
        },
        {
            'role': 'system',
            'content': f'fileid://{file.id}'
        },
        {
            'role': 'user',
            'content': '这篇文章讲了什么?'
        }
    ],
    stream=True
)
for chunk in completion:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].dict())

方式二:以文本方式直接输入文档内容

您也可以直接将文档内容放在承载file的system字段中进行上传(注:当前仅支持TXT类型的文本,Markdown等富文本格式暂不支持),当前示例为流式调用的方式。

from openai import OpenAI

client = OpenAI(
    api_key="$your-dashscope-api-key",  # 替换成真实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': '大型语言模型(llm)已经彻底改变了人工智能领域,使以前被认为是人类独有的自然语言处理任务成为可能...'
        },
        {
            'role': 'user',
            'content': '文章讲了什么?'
        }
    ],
    stream=True
)
for chunk in completion:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].dict())

调用成功后将输出以下结果。

Python

{'delta': {'content': '文章', 'function_call': None, 'role': 'assistant', 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '主要', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '探讨', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '了一种名为LIMA', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '的语言模型的训练方法及其对齐', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '能力的评估。LIMA是一个拥有', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '650亿参数的大型语言', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '模型,它仅通过在10', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '00个精心挑选的提示和', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '响应上进行标准监督微调来', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '完成训练,过程中并未采用强化学习', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '或人类偏好建模。研究结果显示', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': ',尽管训练数据有限,LIMA', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '仍能展现出强大的性能,能够从', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '少数示例中学习到特定的', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '响应格式,并泛化到未见过', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '的任务上。\n\n对比实验表明,在控制', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '条件下,相对于GPT-4、', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': 'Bard和DaVinci00', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '3等其他模型,人们更倾向于', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': 'LIMA生成的回复,分别有', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '43%、58%和', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '65%的情况下认为LIMA的表现', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '更好或至少相当。这表明大型', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '语言模型在预训练阶段已经学', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '到了大量的知识,而只需少量的', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '指令微调数据即可让模型产生', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '高质量的输出,强调了“少', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '即是多”(Less is More)', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '的理念在模型对齐上的有效性。', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '\n\n此外,文章还提及了关于模型', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '输出质量的测试,以及使用不同', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '数量的示例进行微调时', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '模型稳定性的观察,进一步证明了', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '即使是小规模的、经过筛选的数据', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '也能显著提升模型性能。同时,', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '文中还包含了一些示例输出,', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '如有关如何帮助聪明的孩子交友的', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '建议、模仿乔治·卡林风格', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '的单口相声段子,以及', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '如何制作北非风味的shak', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': 'shuka菜谱等,展示了模型', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '根据特定要求生成多样化内容的能力。', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'null', 'index': 0, 'logprobs': None}
{'delta': {'content': '', 'function_call': None, 'role': None, 'tool_calls': None}, 'finish_reason': 'stop', 'index': 0, 'logprobs': None}

相关文档

更多qwen-long API的详细调用,请参见API详情。有关模型的限流条件以及超出基础限流的申请方式,请前往基础限流了解详情。