目录

2.2.1  ModelScope(魔搭社区)

2.2.2  Qwen3的本地调用

2.2.3  Qwen3的在线调用


本节将以ModelScope(魔搭社区)中的Qwen3大模型为例介绍LLM的调用与使用。

2.2.1  ModelScope(魔搭社区)

ModelScope(类似于Hugging Face)是由阿里巴巴集团牵头,联合多家中国顶尖科研机构和高校共同推出的一个下一代“模型即服务”(Model-as-a-Service,MaaS)共享平台。它的核心目标是降低人工智能模型的应用门槛,促进开源模型的共享、协作与创新。

1. 核心定位与愿景

ModelScope的愿景是成为AI模型领域的GitHub。就像GitHub托管代码一样,ModelScope致力于托管、分享和运行AI模型。它不仅仅是一个模型仓库,更是一个提供从模型探索、体验、微调到部署的一站式服务的生态系统。

其核心用户包括:

  • AI研究人员:发布和验证自己的模型。
  • 应用开发者:快速找到并集成现成的模型到自己的应用中,无须从零开始训练。
  • 学生和爱好者:学习最前沿的AI技术,动手实践。
  • 企业用户:寻找商业化的解决方案,降低AI研发成本。

2. 主要功能与核心组成部分

    ModelScope社区提供了从模型探索、体验、部署到再开发的全链路服务。

    1)庞大的模型库

    (1)ModelScope汇聚了来自阿里巴巴、清华大学、北京大学、浙江大学、商汤科技、澜舟科技等众多顶尖AI实验室和高校的开源模型。

    (2)覆盖领域广泛:包括自然语言处理(NLP)、计算机视觉(CV)、语音识别与合成、多模态、科学计算等。

    (3)模型类型多样:从基础的图像分类、文本Embedding,到大型语言模型(如Qwen、Baichuan)、文生图模型(如Taiyi、SD)、语音合成模型等。

    2)在线体验与Demo

    几乎每一个模型都提供了在线试玩(Playground)功能。用户无须安装任何环境,直接在网页上上传图片、输入文本或录音,即可立即看到模型的推理效果,这极大地降低了模型体验的门槛。

    3)Notebook开发环境

    平台提供了集成好的、云端免费的Jupyter Notebook开发环境(基于PAI-DSW),预装了ModelScope SDK和常用依赖。用户可以直接在浏览器中打开Notebook,编写几行代码即可加载和运行模型,进行原型开发和实验。

    4)ModelScope Library(Python SDK)

    这是ModelScope的核心组件,一个开源Python库。通过它,开发者可以用极其简洁的代码(通常只需2~3行)在自己的本地或云端环境中下载、加载和推理模型。

    示例代码如下:

    from modelscope.pipelines import pipeline
    
    from modelscope.utils.constant import Tasks
    
    # 创建文本摘要 pipeline
    
    pipe = pipeline(task=Tasks.text_summarization, model='damo/nlp_bert_document-segmentation_chinese-base')
    
    # 输入文本并获取结果
    
    result = pipe('这里是需要摘要的长篇文章内容...')
    
    print(result)

    5)ModelScope Studio

    类似于Hugging Face的Spaces,ModelScope Studio(创空间)是一个低代码/无代码的应用构建平台。用户可以利用Gradio、Streamlit等框架,快速为自己的模型构建一个功能丰富、界面友好的演示应用,并一键部署和分享给他人。

    6)数据集与学习资源

    (1)除了模型外,平台还提供了与模型配套使用的训练和评测数据集。

    (2)包含丰富的教程、文档、技术博客和视频,帮助用户从入门到精通。

    2.2.2  Qwen3的本地调用

    如果要使用大模型进行应用开发,我们可以通过ModelScope(魔塔)官网在模型库中查找,比如要使用Qwen3大模型,可以查找Qwen3关键字,结果如图2.6所示。

    从图2.6中可以看到,这里找到了多个不同种类的Qwen3模型。我们单击“通义千问3-32B”,进入模型介绍界面,如图2.7所示。

    2.6  查找Qwen3

    图2.7  “通义千问3-32B”标签界面

    这个页面对“通义千问3-32B”进行介绍,在页面下拉左侧介绍框,可以看到基于ModelScope本地模型的读取与处理示例。

    需要注意的是,Qwen3的代码已包含在最新的Hugging Face Transformers中,建议读者使用Transformers的最新版本。如果使用Transformers低于4.51.0的版本,可能会将遇到以下错误:KeyError: 'qwen3'。

    【示例2.1】基于ModelScope本地模型的读取与处理,本示例展示如何根据给定输入使用模型生成内容,代码如下:

    from modelscope import AutoModelForCausalLM, AutoTokenizer
    
    
    
    model_name = "Qwen/Qwen3-1.7B"
    
    
    
    # load the tokenizer and the model
    
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    
    model = AutoModelForCausalLM.from_pretrained(
    
        model_name,
    
        torch_dtype="auto",
    
        device_map="auto"
    
    )
    
    
    
    # prepare the model input
    
    prompt = "Give me a short introduction to large language model."
    
    messages = [
    
        {"role": "user", "content": prompt}
    
    ]
    
    text = tokenizer.apply_chat_template(
    
        messages,
    
        tokenize=False,
    
        add_generation_prompt=True,
    
        enable_thinking=True # Switches between thinking and non-thinking modes. Default is True.
    
    )
    
    model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
    
    
    
    # conduct text completion
    
    generated_ids = model.generate(
    
        **model_inputs,
    
        max_new_tokens=32768
    
    )
    
    output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
    
    
    
    # parsing thinking content
    
    try:
    
        # rindex finding 151668 (</think>)
    
        index = len(output_ids) - output_ids[::-1].index(151668)
    
    except ValueError:
    
        index = 0
    
    
    
    thinking_content = tokenizer.decode(output_ids[:index], skip_special_tokens= True).strip("\n")
    
    content = tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n")
    
    
    
    print("thinking content:", thinking_content)
    
    print("content:", content)
    
    response = tokenizer.decode(output_ids, skip_special_tokens=True)
    
    print(response)

    资源调用太耗费内存和算力,结果暂不展示。对于部署,可以使用sglang>=0.4.6.post1或vllm>=0.8.5来创建一个与OpenAI兼容的API端点。

    1. SGLang

    SGLANG_USE_MODELSCOPE=true python -m sglang.launch_server --model-path Qwen/
    
    Qwen3-1.7B --reasoning-parser qwen3

    2. vLLM

    VLLM_USE_MODELSCOPE=true vllm serve Qwen/Qwen3-1.7B --enable-reasoning --
    
    reasoning-parser deepseek_r1

    代码是用于加载Qwen3-1.7B模型并进行推理的完整流程,使用了ModelScope的AutoModel ForCausalLM和AutoTokenizer。如果使用的模型较大,比如Qwen3-32B,则实际运行需要更高性能的GPU,如A100、H100等。

    对于本地使用,Ollama、LMStudio、MLX-LM、llama.cpp和KTransformers等应用程序也支持Qwen3,读者可以根据自己的需要选择在本地运行大模型。

    2.2.3  Qwen3的在线调用

    首先我们需要登录Qwen3官方网站“阿里云百炼”,页面菜单如图2.8所示。

    图2.8  “阿里云百炼”菜单

    注册并登录后进入百炼控制台,在页面上单击“大模型服务平台百炼”,打开“阿里云百炼”主页面,再单击“模型服务”,页面左下角有个“密钥管理”,如图2.9所示。

    图2.9  获取API Key

    单击“密钥管理”后,进入“密钥管理”页面,在这里既可以创建新的API-Key,也可以查询以前所创建的API-Key,如图2.10所示。

    图2.10  已创建的API Key

    接下来,单击“模型广场”,在“模型广场”页面上选择想要开通的模型,如图2.11所示。

    图2.11  单击通义千问目录

    对于不同的任务需求,Qwen3给我们准备了不同的API调用示例。例如,在“模型广场”上单击“通义千问3-Max”进入模型页面,其中提供了“API代码示例”,如图2.12所示。

    图2.12  Qwen3在线API调用示例

    【示例2.2】“模型广场”提供的Qwen3在线API调用示例。

    import os
    
    from openai import OpenAI
    
    
    
    client = OpenAI(
    
        # 若没有配置环境变量,请用百炼API Key将下一行替换为:api_key="sk-xxx"
    
        api_key=("DASHSCOPE_API_KEY"),
    
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    
    )
    
    
    
    completion = client.chat.completions.create(
    
        # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    
        model="qwen-plus",
    
        messages=[
    
            {"role": "system", "content": "You are a helpful assistant."},
    
            {"role": "user", "content": "你是谁?"},
    
        ],
    
        # Qwen3模型通过enable_thinking参数控制思考过程(开源版默认为True,商业版默认为False)
    
        # 使用Qwen3开源版模型时,若未启用流式输出,请将下一行取消注释,否则会报错
    
        # extra_body={"enable_thinking": False},
    
    )
    
    print(completion.model_dump_json())

    运行代码,输出如下:

    {"id":"chatcmpl-efc22742-e6b8-99c1-bb83-4129b2a379d1","choices":[{"finish_reason":"stop","index":0,"logprobs":null,"message":{"content":"我是通义千问,阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我可以帮助你回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等,还能表达观点、玩游戏等。如果你有任何问题或需要帮助,欢迎随时告诉我!","refusal":null,"role":"assistant", "annotations":null,"audio":null,"function_call":null,"tool_calls":null}}],"created":1756625977,"model":"qwen-plus","object":"chat.completion","service_tier":null,"system_fingerprint":null,"usage":{"completion_tokens":66,"prompt_tokens":26,"total_tokens":92,"completion_tokens_details":null,"prompt_tokens_details":{"audio_tokens":null,"cached_tokens":0}}}

    读者可以将上面代码中的API Key替换成自己的。由于Qwen3模型包含思考过程,读者同时还可以自定义思考过程的输出方式。下面是作者重写的参数说明:

    (1)model:字符串,必选,指定模型名称。支持通义千问大语言模型(商业版、开源版、Qwen-Long)、通义千问VL、通义千问Omni、数学模型、代码模型。需要注意的是,通义千问Audio暂不支持OpenAI兼容模式,仅支持DashScope方式。具体模型名称及计费规则详见模型列表文档。

    (2)messages:数组,必选,对话组成的消息列表。其包含以下消息类型。

    • SystemMessage:对象,可选,定义模型目标或角色。若设置,则需置于messages列表首位。但QwQ模型不建议设置,QVQ模型设置后不生效。
    • UserMessage:对象,必选,表示用户发送给模型的消息内容。
    • AssistantMessage:对象,可选,记录模型对用户消息的回复。
    • ToolMessage:对象,可选,承载工具的输出信息。

    (3)stream:布尔值,可选,默认为false,控制是否流式输出回复。

    • false:模型生成完整内容后一次性返回。
    • true:逐片段输出(chunk),需实时读取以获取完整结果。仅Qwen3商业版(思考模式)、Qwen3开源版、QwQ、QVQ支持流式输出。

    (4)stream_options:当stream=true时,可通过设置{"include_usage": true}在输出末行显示token使用量,设为false则隐藏该信息。

    (5)modalities:仅Qwen-Omni模型支持指定输出模态。

    • ["text","audio"]:同时输出文本与音频。
    • ["text"]:仅输出文本。

    (6)temperature:浮点数,可选,控制生成文本多样性。值越高,结果越随机(范围为[0,2))。建议与top_p二选一设置,QVQ模型默认值不建议修改。

    (7)top_p:浮点数,可选,采样阈值。值越高,结果越随机(范围为(0,1.0])。建议与temperature二选一设置,QVQ模型默认值不建议修改。

    (8)top_k:整数,可选,采样候选集大小(≥0)。值越大,随机性越高。设为None或大于100时仅top_p生效。QVQ模型默认值不建议修改,Python SDK需通过extra_body配置。

    (9)presence_penalty:控制内容重复度(范围为[−2.0,2.0])。

    • 正值减少重复(适合创意场景)。
    • 负值增加重复(适合专业文档)。

    示例:qwen-vl-plus系列模型文字提取建议设置为1.5,QVQ模型默认值不建议修改。

    (10)response_format:指定返回格式。

    • {"type":"text"}:纯文本。
    • {"type":"json_object"}:结构化JSON(需在消息中提示模型输出JSON格式)。

    (11)max_tokens:限制返回最大Token数,超限内容将被截断。默认值及上限参考模型列表,qwen-vl-ocr系列默认为2048,最大为8192。QwQ/QVQ模型仅限制回复长度,不限制思考内容。

    (12)n:integer(可选)默认值为1,生成响应的数量,取值范围是1~4,适用于多结果场景(如创意写作)。仅qwen-plus及非思考模式Qwen3支持,且传入tools时固定为1。

    (13)enable_thinking:控制Qwen3模型思考模式。需通过extra_body配置。商业版默认为false,开源版默认为true。

    (14)thinking_budget:设置思考过程最大长度。仅enable_thinking=true时生效,适用于Qwen3商业版及开源版。

    (15)seed:设置随机种子(0~2³¹−1)以获得确定性结果,相同seed和其他参数将生成相同内容。

    (16)stop:指定终止生成字符串或token_id,可用于敏感词过滤。数组类型不支持混合token_id与字符串。

    (17)tools:定义可调用工具列表,当前不支持通义千问VL/Audio及数学/代码模型。每个工具对象包含:

    • tool_choice:字符串/对象,可选,默认为"auto"。控制工具调用策略,可选"auto" "none"或指定工具名称。
    • parallel_tool_calls:boolean(可选),默认值为false,表示是否开启并行工具调用。相关文档:并行工具调用可选值:true:开启;false:不开启。

    (18)translation_options:翻译模型专用配置参数,需通过extra_body传递。

    (19)enable_search:控制是否启用互联网搜索。

    • true:允许模型参考搜索结果(可能增加Token消耗)。
    • false:禁用搜索,支持强制搜索配置。

    (20)search_options:对象,可选,联网搜索策略配置,仅enable_search=true时生效。

    不同参数定义了用户在使用Qwen3在线API时能够进行的操作。除了基本的文本输入输出外,对于更多的使用示例和样式,读者可以自行验证。

    Logo

    有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

    更多推荐