Qwen3 开源发布

阿里研究院    2025-05-02 16:13:10

性能卓越

灵活适配多场景需求

作为Qwen系列全新一代的 混合推理模型 Q wen3 在 GPQA、AIME24/25、LiveCodeBench 等多个权威评测中 表现出极具竞争力的结果。

在相同计算资源下,Qwen3 模型以更小的规模实现了对更大体量上一代模型的超越,真正做到了 “小而强大” 。通过引入创新的 MOE (混合专 家)架构,Qwen3 在效果上媲美上一代超大规模 Dens e 模型的同时, 效率显著提升, 使复杂任务处理 更加轻松高效。

此外,Qwe n3 融合了推理与非推理能力,在逻辑分析和创意生成等任务中表现卓越。预训练数据量达到月 36万亿 tokens, 并通 过多轮大规模强化学习与精细优化,在 工具调用 指令遵循 多语言能力 等方面显著提升。

其中,Qwen3-235B-A22B 表现尤为突出,刷新了 开源模型的智能水平新高, 显存占用仅为性能相近模型的三分之一。无论是数学推理、代码生成还是综合逻辑分析, Qwen3 均展现出卓越能力,稳居全球开源模型前列。在工具调用方面表现优异,大幅降低了复杂任务的实现门槛,同时还支持 119 种语言,覆盖全球主要语种,满足多样化需求。

思考与非思考模式

灵活应对不同场景

Qwen3 引入了 “思考模式” “非思考模式” ,使模型能够在不同场景下表现出最佳性能。在思考模式模式下,模型会进行多步推理和深度分析,类似于人类在解决复杂问题时的“深思熟虑”。 (eg:在回答数学题或编写复杂代码时,模型会反复验证逻辑并优化输出结果。)

在非思考模式模式下,模型优先追求响应速度和效率,适用于简单任务或实时交互。 (eg:在日常对话或快速问答中,模型会跳过复杂的推理步骤,直接给出答案。)

你可以通过简单的指令或配置文件在两种模式之间切换。

启用思考模式: 默认情况下,Qwen3 启用了思考能力 enable_thinking=True 在此模式下,模型会在生成响应前进行深度分析,并输出包裹在 < think>...</think> 块中的思考过程。

关闭思考模式 如果需要禁用思考行为,可以设置 enable_thinking=False ,使模型功能与 Qwen2.5-Instruct 保持一致。此模式适合对响应速度要求较高的场景。

软开关机制 Qwen3 支持动态切换思考模式,你可通过 /think 启用深度推理 /no_think 快速关闭。模型会根据最新指令调整行为,灵活适应不同需求。 以下是一个多轮对话示例:

from transformers import AutoModelForCausalLM, AutoTokenizerclassQwenChatbot:    def __init__(self, model_name="Qwen3-30B-A3B/Qwen3-30B-A3B"):        self.tokenizer = AutoTokenizer.from_pretrained(model_name)        self.model = AutoModelForCausalLM.from_pretrained(model_name)        self.history = []    def generate_response(self, user_input):        messages = self.history + [{"role""user""content": user_input}]        text = self.tokenizer.apply_chat_template(            messages,            tokenize=False,            add_generation_prompt=True        )        inputs = self.tokenizer(text, return_tensors="pt")        response_ids = self.model.generate(**inputs, max_new_tokens=32768)[0][len(inputs.input_ids[0]):].tolist()        response = self.tokenizer.decode(response_ids, skip_special_tokens=True)        # Update history        self.history.append({"role""user""content": user_input})        self.history.append({"role""assistant""content": response})        return response# Example Usageif __name__ == "__main__":    chatbot = QwenChatbot()    # First input (without /think or /no_think tags, thinking mode is enabled by default)    user_input_1 = "How many r's in strawberries?"    print(f"User: {user_input_1}")    response_1 = chatbot.generate_response(user_input_1)    print(f"Bot: {response_1}")    print("----------------------")    # Second input with /no_think    user_input_2 = "Then, how many r's in blueberries? /no_think"    print(f"User: {user_input_2}")    response_2 = chatbot.generate_response(user_input_2)    print(f"Bot: {response_2}"    print("----------------------")    # Third input with /think    user_input_3 = "Really? /think"    print(f"User: {user_input_3}")    response_3 = chatbot.generate_response(user_input_3)    print(f"Bot: {response_3}")

如何在不同框架中使用 Qwen3 ? 我们提供了一个在 Hugging Face transformers 中使用 Qwen3-30B-A3B 的标准示例:

from modelscope import AutoModelForCausalLM, AutoTokenizermodel_name = "Qwen/Qwen3-30B-A3B"# load the tokenizer and the modeltokenizer = AutoTokenizer.from_pretrained(model_name)model = AutoModelForCausalLM.from_pretrained(    model_name,    torch_dtype="auto",    device_map="auto")# prepare the model inputprompt = "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 # Switch between thinking and non-thinking modes. Default is True.)model_inputs = tokenizer([text], return_tensors="pt").to(model.device)# conduct text completiongenerated_ids = model.generate(    **model_inputs,    max_new_tokens=32768)output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist() # parsing thinking contenttry:    # rindex finding 151668 (</think>)    index = len(output_ids) - output_ids[::-1].index(151668)except ValueError:    index = 0thinking_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)

要禁用思考模式,只需对参数 enable_thinking 进行如下修改:

text = tokenizer.apply_chat_template(    messages,    tokenize=False,    add_generation_prompt=True,    enable_thinking=False  # True is the default value for enable_thinking.)

对于部署,您可以使用 sglang>=0.4.6.post1 或 vllm>=0.8.4来创建一个与 OpenAI API 兼容的 API endpoint:

SGLang:

    python -m sglang.launch_server --model-path Qwen/Qwen3-30B-A3B --reasoning-parser qwen3

vLLM:

    vllm serve Qwen/Qwen3-30B-A3B --enable-reasoning --reasoning-parser deepseek_r1

要禁用思考模式,您可以移除参数 --reasoning-parser(以及 --enable-reasoning)。

如果用于本地开发,您可以通过运行简单的命令 ollama run qwen3:30b-a3b 来使用 ollama 与模型进行交互。您也可以使用 LMStudio 或者 llama.cpp 以及 ktransformers 等代码库进行本地开发。

Agent示例

你还可以使用 Qwen-Agent 来充分发挥 Qwen3 的 Agent 能力。 Qwen-Agent 内部封装了工具调用模板和工具调用解析器,大大降低了代码复杂性。

要定义可用的工具,您可以使用 MCP 配置文件,使用 Qwen-Agent 内置的工具,或者自行集成其他工具。

from qwen_agent.agents import Assistant# Define LLMllm_cfg = {    'model''Qwen3-30B-A3B',    # Use the endpoint provided by Alibaba Model Studio:    # 'model_type': 'qwen_dashscope',    # 'api_key': os.getenv('DASHSCOPE_API_KEY'),    # Use a custom endpoint compatible with OpenAI API:    'model_server''http://localhost:8000/v1',  # api_base    'api_key''EMPTY',    # Other parameters:    # 'generate_cfg': {    #         # Add: When the response content is `<think>this is the thought</think>this is the answer;    #         # Do not add: When the response has been separated by reasoning_content and content.    #         'thought_in_content': True,    #     },}# Define Toolstools = [    {'mcpServers': {  # You can specify the MCP configuration file            'time': {                'command''uvx',                'args': ['mcp-server-time''--local-timezone=Asia/Shanghai']            },            "fetch": {                "command""uvx",                "args": ["mcp-server-fetch"]            }        }    },  'code_interpreter',  # Built-in tools]# Define Agentbot = Assistant(llm=llm_cfg, function_list=tools)# Streaming generationmessages = [{'role''user''content''https://qwenlm.github.io/blog/ Introduce the latest developments of Qwen'}]for responses in bot.run(messages=messages):    passprint(responses)

huggingface

https://huggingface.co/Qwen/Qwen3-235B-A22B

魔搭社区

https://modelscope.cn/models/Qwen/Qwen3-235B-A22B
Qwen Chat
https://chat.qwen.ai
阿里云百炼(即将上线,并提供 100万tokens免费体验)
https://www.aliyun.com/product/tongyi
(选自4月30日《阿里研究院》微信公众号)

责任编辑:i泺源 汤代禄