Introduction
今天,我们非常高兴地宣布 Qwen3 的发布,这是 Qwen 大型语言模型家族的最新成员。与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等其他顶级模型相比,我们的旗舰模型 Qwen3-235B-A22B 在编码、数学、综合能力等基准评估中取得了极具竞争力的结果。此外,小型 MoE 模型 Qwen3-30B-A3B 的激活参数是 QwQ-32B 的 10 倍,甚至像 Qwen3-4B 这样的小型模型也能与 Qwen2.5-72B-Instruct 的性能相媲美。
我们正在对两个 MoE 模型进行开放式加权:Qwen3-235B-A22B(一个总参数为 2350 亿、激活参数为 220 亿的大型模型)和 Qwen3-30B-A3B(一个总参数为 300 亿、激活参数为 30 亿的小型 MoE 模型)。此外,6 个密集模型也是开放加权的,包括 Qwen3-32B、Qwen3-14B、Qwen3-8B、Qwen3-4B、Qwen3-1.7B 和 Qwen3-0.6B,采用 Apache 2.0 许可。
Models | Layers | Heads (Q / KV) | Tie Embedding | Context Length |
---|---|---|---|---|
Qwen3-0.6B | 28 | 16 / 8 | Yes | 32K |
Qwen3-1.7B | 28 | 16 / 8 | Yes | 32K |
Qwen3-4B | 36 | 32 / 8 | Yes | 32K |
Qwen3-8B | 36 | 32 / 8 | No | 128K |
Qwen3-14B | 40 | 40 / 8 | No | 128K |
Qwen3-32B | 64 | 64 / 8 | No | 128K |
Models | Layers | Heads (Q / KV) | # Experts (Total / Activated) | Context Length |
---|---|---|---|---|
Qwen3-30B-A3B | 48 | 32 / 4 | 128 / 8 | 128K |
Qwen3-235B-A22B | 94 | 64 / 4 | 128 / 8 | 128K |
Qwen3-30B-A3B等后训练模型及其预训练模型(如Qwen3-30B-A3B-Base)现在可以在Hugging Face、ModelScope和Kaggle等平台上使用。对于部署,我们建议使用 SGLang 和 vLLM 等框架。对于本地使用,我们强烈推荐使用 Ollama、LMStudio、MLX、llama.cpp 和 KTransformers 等工具。这些选项可确保用户轻松地将 Qwen3 集成到其工作流程中,无论是在研究、开发还是生产环境中。
我们相信,Qwen3 的发布和开源将极大地推动大型基础模型的研究和开发。我们的目标是让全世界的研究人员、开发人员和组织机构都能利用这些前沿模型构建创新解决方案。
欢迎在 Qwen Chat Web (chat.qwen.ai) 和手机 APP 中试用 Qwen3!
主要功能
- 混合思维模式
Qwen3 模型引入了一种混合的解决问题的方法。它们支持两种模式:
- 思考模式:在这种模式下,模型在给出最终答案之前会花时间逐步推理。这非常适合需要深入思考的复杂问题。
- 非思考模式:在这种情况下,该模式可提供快速、近乎即时的回答,适用于速度比深度更重要的简单问题。
这种灵活性允许用户根据手头的任务控制模型的 "思考 "程度。例如,较难的问题可以通过扩展推理来解决,而较简单的问题则可以直接回答,无需延迟。最重要的是,这两种模式的整合大大增强了模型执行稳定高效的思维预算控制的能力。正如上文所展示的,Qwen3 表现出了可扩展的平滑性能提升,这与分配的计算推理预算直接相关。这种设计能让用户更轻松地配置特定任务的预算,在成本效率和推理质量之间实现更理想的平衡。
- 多语言支持
Qwen3 模型支持 119 种语言和方言。这种广泛的多语言能力为国际应用开辟了新的可能性,使世界各地的用户都能从这些模型的强大功能中受益。
语言家族 | 语言 & 方言 |
---|---|
印欧语 | 英语、法语、葡萄牙语、德语、罗马尼亚语、瑞典语、丹麦语、保加利亚语、俄语、捷克语、希腊语、乌克兰语、西班牙语、荷兰语、斯洛伐克语、克罗地亚语、波兰语、立陶宛语、挪威语、波斯语、斯洛文尼亚语、古吉拉特语、拉脱维亚语、意大利语、奥克语、尼泊尔语、马拉地语、白俄罗斯语、塞尔维亚语、卢森堡语、威尼斯语、阿萨姆语、威尔士语、西里西亚语、阿斯图里亚斯语、恰蒂斯加尔语、阿瓦迪语、迈蒂利语、博杰普里语、信德语、爱尔兰语、法罗语、印地语、旁遮普语、孟加拉语、奥里雅语、塔吉克语、东意第绪语、伦巴第语、利古里亚语、西西里语、利古里亚语、西西里语、弗留利语、撒丁语、加利西亚语、加泰罗尼亚语、冰岛语、托斯克阿尔巴尼亚语、林堡语、达里语、南非荷兰语、马其顿语、僧伽罗语、乌尔都语、马加希语、波斯尼亚语、亚美尼亚语 |
汉藏语系 | 中文(简体中文、繁体中文、粤语)、缅甸语 |
亚非拉 | 阿拉伯语(标准、纳杰迪、黎凡特、埃及、摩洛哥、美索不达米亚、塔伊兹-阿德尼、突尼斯)、希伯来语、马耳他语 |
南岛民族 | 印度尼西亚语、马来语、他加禄语、宿务语、爪哇语、巽他语、米南卡保语、巴厘语、班加尔语、邦加西南语、伊洛科语、瓦雷语(菲律宾) |
达罗毗荼 | 泰米尔语、泰卢固语、卡纳达语、马拉雅拉姆语 |
突厥语 | 土耳其语、北阿塞拜疆语、北乌兹别克语、哈萨克语、巴什基尔语、鞑靼语 |
大卡台 | 泰语、老挝语 |
乌拉尔语 | 芬兰语、爱沙尼亚语、匈牙利语 |
奥斯特罗西亚语 | 越南语、高棉语 |
其他 | 日语、韩语、格鲁吉亚语、巴斯克语、海地语、帕皮阿门托语、卡布维迪亚努语、托克皮辛语、斯瓦希里语 |
- 改进代理能力
我们优化了 Qwen3 模型的编码和代理功能,同时也加强了对 MCP 的支持。下面我们将举例说明 Qwen3 如何思考和与环境交互。
预训练
在预训练方面,Qwen3 的数据集比 Qwen2.5 大幅扩展。Qwen2.5 是在 18 万亿个词库的基础上进行预训练的,而 Qwen3 则使用了近两倍于这一数量的数据,大约有 36 万亿个词库,涵盖 119 种语言和方言。为了建立这个大型数据集,我们不仅从网络上收集数据,还从 PDF 类文档中收集数据。我们使用 Qwen2.5-VL 从这些文档中提取文本,并使用 Qwen2.5 提高提取内容的质量。为了增加数学和代码数据量,我们使用 Qwen2.5-Math 和 Qwen2.5-Coder 生成合成数据。其中包括教科书、问答对和代码片段。
预训练过程包括三个阶段。在第一阶段(S1),对模型进行了超过 30 万亿个词块的预训练,上下文长度为 4K 个词块。这一阶段为模型提供了基本的语言技能和常识。在第二阶段(S2),我们改进了数据集,增加了知识密集型数据的比例,如 STEM、编码和推理任务。然后在额外的 5 万亿个标记上对模型进行预训练。在最后阶段,我们使用高质量的长语境数据,将语境长度扩展到 32K 字节。这确保了模型能够有效处理更长的输入。
由于模型架构的进步、训练数据的增加以及更有效的训练方法,Qwen3 密集基本模型的整体性能与参数更多的 Qwen2.5 基本模型不相上下。例如,Qwen3-1.7B/4B/8B/14B/32B-Base 的性能分别与 Qwen2.5-3B/7B/14B/32B/72B-Base 相当。值得注意的是,在 STEM、编码和推理等领域,Qwen3 密集基础模型的表现甚至优于较大的 Qwen2.5 模型。就 Qwen3-MoE 基础模型而言,它们的性能与 Qwen2.5 密集基础模型相似,但只使用了 10% 的活动参数。这大大节省了训练和推理成本。
训练后
为了开发既能逐步推理又能快速反应的混合模型,我们实施了一个四阶段训练流水线。该流程包括(1) 长思维链 (CoT) 冷启动,(2) 基于推理的强化学习 (RL),(3) 思维模式融合,以及 (4) 一般 RL。
在第一阶段,我们利用不同的长 CoT 数据对模型进行了微调,这些数据涵盖了数学、编码、逻辑推理和 STEM 问题等各种任务和领域。这一过程旨在使模型具备基本的推理能力。第二阶段的重点是扩大 RL 的计算资源,利用基于规则的奖励来增强模型的探索和利用能力。
在第三阶段,我们将非思维能力纳入思维模型,在长 CoT 数据和常用指令调整数据的基础上对其进行微调。这些数据由第二阶段的增强思维模型生成,确保了推理能力和快速反应能力的完美融合。最后,在第四阶段,我们在 20 多个通用领域任务中应用了 RL,以进一步加强模型的通用能力并纠正不良行为。这些任务包括指令遵循、格式遵循和代理能力等。
使用 Qwen3 进行开发
以下是在不同框架上使用 Qwen3 的简单指南。首先,我们提供了一个在拥抱脸转换器中使用 Qwen3-30B-A3B 的标准示例:
from modelscope import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-30B-A3B"
# 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 # Switch 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)
要禁用思考功能,您只需修改参数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.4.6.8.4
创建与 OpenAI 兼容的 API 端点:
- 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
如果将其用于本地开发,可以使用 ollama,通过运行简单的命令 ollama run qwen3:30b-a3b
来玩转模型,也可以使用 LMStudio 或 llama.cpp 和 ktransformers 进行本地构建。
高级用法
我们提供了一种软开关机制,当 enable_thinking=True 时,用户可以动态控制模型的行为。具体来说,您可以在用户提示或系统消息中添加/think 和 /no_think,以切换模型的思考模式。在多轮对话中,模型将遵循最新的指令。
下面是一个多回合对话的例子:
from transformers import AutoModelForCausalLM, AutoTokenizer
class QwenChatbot:
def __init__(self, model_name="Qwen/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 Usage
if __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在工具调用功能方面表现出色。我们建议使用 Qwen-Agent,以充分利用 Qwen3 的代理能力。Qwen-Agent 在内部封装了工具调用模板和工具调用解析器,大大降低了编码的复杂性。
要定义可用工具,可以使用 MCP 配置文件、Qwen-Agent 的集成工具或自行集成其他工具。
from qwen_agent.agents import Assistant
# Define LLM
llm_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 Tools
tools = [
{'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 Agent
bot = Assistant(llm=llm_cfg, function_list=tools)
# Streaming generation
messages = [{'role': 'user', 'content': 'https://qwenlm.github.io/blog/ Introduce the latest developments of Qwen'}]
for responses in bot.run(messages=messages):
pass
print(responses)
Qwen 之友
感谢这么多朋友的支持。没有朋友,Qwen 将一事无成!我们欢迎更多的人或组织加入我们的社区,帮助我们变得更好!
未来工作
Qwen3是我们迈向人工通用智能(AGI)和人工超级智能(ASI)的一个重要里程碑。通过扩大预训练和强化学习(RL)的规模,我们实现了更高水平的智能。我们无缝整合了思考模式和非思考模式,为用户提供了控制思考预算的灵活性。此外,我们还扩大了对多种语言的支持,提高了全球的可访问性。
展望未来,我们的目标是在多个维度上增强我们的模型。这包括完善模型架构和训练方法,以实现几个关键目标:扩展数据、扩大模型规模、延长上下文长度、拓宽模式,以及推进具有环境反馈的 RL,以实现长视距推理。我们相信,我们正在从一个专注于训练模型的时代过渡到一个以训练代理为中心的时代。我们的下一次迭代有望为每个人的工作和生活带来有意义的进步。