
Qwen3震撼发布,问鼎开源宝座,教你快速上手
通义千问3(Qwen3),通义千问大语言模型家族的最新成员。作为阿里巴巴的旗舰模型,通义千问3-235B-A22B在编码、数学、通用能力等基准评估中,与DeepSeek-R1、o1、o3-mini、Grok-3、Gemini-2.5-Pro等其他顶级模型相比,取得了极具竞争力的成绩。此外,小型混合专家(MoE)模型通义千问3-30B-A3B,其激活参数仅为QwQ-32B的十分之一,却超越了后者的表现;甚至像通义千问3-4B这样的微型模型,也能与通义千问2.5-72B-Instruct相媲美。
通义千问 3 成绩斐然,其诸多特性为人工智能领域注入了新活力。下面,本文带你深入了解这款模型的具体情况。
1.简介
通义千问(Qwen)是阿里巴巴集团通义千问团队研发的大语言模型和大多模态模型系列。语言模型和多模态模型均在大规模多语言和多模态数据上进行预训练,并在高质量数据上进行微调以匹配人类偏好。通义千问具备自然语言理解、文本生成、视觉理解、音频理解、工具使用、角色扮演、充当人工智能智能体等能力。
最新版本的通义千问3具有以下特点:
- 密集型和混合专家模型:提供0.6B、1.7B、4B、8B、14B、32B,以及30B-A3B、235B-A22B等不同规模的模型。
- 思维模式无缝切换:单个模型可在思维模式(用于复杂逻辑推理、数学计算和编码任务)和非思维模式(用于高效通用聊天)之间无缝切换,确保在各种场景下都能实现最佳性能。
- 推理能力显著提升:推理能力大幅增强,在数学运算、代码生成和常识逻辑推理方面,超越了之前的QwQ模型(在思维模式下)和通义千问2.5指令模型(在非思维模式下)。
- 高度契合人类偏好:在创意写作、角色扮演、多轮对话和指令遵循方面表现卓越,提供更自然、引人入胜和沉浸式的对话体验。
- 强大的智能体能力:在思维和非思维模式下都能精准集成外部工具,在复杂的基于智能体的任务中,开源模型里性能领先。
- 多语言支持广泛:支持100多种语言和方言,具备强大的多语言指令遵循和翻译能力。
阿里巴巴开源了两款混合专家模型:通义千问3-235B-A22B,这款大型模型总参数达2350亿,激活参数为220亿;以及通义千问3-30B-A3B,小型混合专家模型,总参数300亿,激活参数30亿。此外,还开源了六款密集型模型,包括通义千问3-32B、通义千问3-14B、通义千问3-8B、通义千问3-4B、通义千问3-1.7B和通义千问3-0.6B,均遵循Apache 2.0许可协议。
像通义千问3-30B-A3B这样的微调模型,以及其预训练版本(如通义千问3-30B-A3B-Base),现已在Hugging Face、魔搭社区(ModelScope)和Kaggle等平台上线。部署时,建议使用SGLang和vLLM等框架。对于本地使用,强烈推荐Ollama、LMStudio、MLX、llama.cpp和KTransformers等工具。这些选择能确保用户在研究、开发或生产环境中,轻松将通义千问3集成到工作流程中。
通义千问3的发布和开源,将极大推动大型基础模型的研发进程。通义千问3旨在赋能全球研究人员、开发者和组织机构,助力他们利用这些前沿模型构建创新解决方案。
2.主要特性
2.1 混合思维模式
通义千问3系列模型引入了一种混合式问题解决方法,支持两种模式:
- 思维模式:在这种模式下,模型会逐步推理,经过深思熟虑后给出最终答案。这种模式非常适合处理需要深入思考的复杂问题。
- 非思维模式:模型会快速给出近乎即时的响应,适用于对速度要求高于深度的简单问题。
这种灵活性使用户能够根据手头任务,控制模型的“思考”程度。比如,对于较难的问题,可以让模型进行深入推理;而对于简单问题,则能快速直接作答。两种模式的融合,显著增强了模型实施稳定且高效的思维预算控制能力。如上文所示,通义千问3的性能提升具有可扩展性且平稳,与分配的计算推理预算直接相关。这种设计让用户能更轻松地为特定任务配置预算,在成本效益和推理质量之间实现更优平衡。
2.2 多语言支持
通义千问3系列模型支持119种语言和方言。这种广泛的多语言能力为国际应用开辟了新的可能性,让全球用户都能受益于这些模型的强大功能。
2.3 增强的智能体能力
阿里巴巴针对编码和智能体能力对通义千问3系列模型进行了优化,同时也加强了对模型上下文协议(MCP)的支持。以下示例展示了通义千问3如何思考以及与环境交互。
3.预训练
在预训练方面,通义千问3的数据集相比通义千问2.5有了显著扩展。通义千问2.5在18万亿个词元上进行预训练,而通义千问3使用了近两倍的数据量,约36万亿个词元,涵盖119种语言和方言。为构建这个大型数据集,数据来源不仅包括网页,还包括类似PDF的文档。阿里巴巴利用通义千问2.5-VL从这些文档中提取文本,并借助通义千问2.5提高提取内容的质量。为增加数学和代码数据量,使用通义千问2.5-Math和通义千问2.5-Coder生成合成数据,包括教科书内容、问答对和代码片段。
预训练过程分为三个阶段。在第一阶段(S1),模型在超过30万亿个词元上进行预训练,上下文长度为4000词元。这一阶段赋予模型基本的语言技能和通用知识。在第二阶段(S2),通过增加知识密集型数据(如STEM领域、编码和推理任务相关数据)的比例来优化数据集,然后模型在额外的5万亿个词元上进行预训练。在最后阶段,使用高质量的长上下文数据将上下文长度扩展到32000词元,确保模型能有效处理更长的输入。
由于模型架构的进步、训练数据量的增加以及更有效的训练方法,通义千问3(Qwen3)的密集型基础模型的整体性能与参数更多的通义千问2.5基础模型相当。例如,通义千问3-1.7B/4B/8B/14B/32B基础模型的表现分别与通义千问2.5-3B/7B/14B/32B/72B基础模型不相上下。值得注意的是,在STEM(科学、技术、工程和数学)领域、编码和推理等方面,通义千问3的密集型基础模型甚至超越了参数更多的通义千问2.5模型。对于通义千问3的混合专家(MoE)基础模型而言,它们仅使用了通义千问2.5密集型基础模型10%的激活参数,却实现了相近的性能,这大大节省了训练和推理成本。
4.微调训练
为了开发出既能进行逐步推理又能快速响应的混合模型,采用了四阶段训练流程。该流程包括:(1)长思维链(CoT)冷启动;(2)基于推理的强化学习(RL);(3)思维模式融合;(4)通用强化学习。
在第一阶段,使用多样化的长思维链数据对模型进行微调,这些数据涵盖数学、编码、逻辑推理和STEM问题等各种任务和领域,目的是赋予模型基本的推理能力。第二阶段聚焦于为强化学习扩展计算资源,利用基于规则的奖励机制来提升模型的探索和利用能力。
在第三阶段,通过在长思维链数据和常用的指令微调数据的组合上进行微调,将非思维能力集成到思维模型中。这些数据由第二阶段增强后的思维模型生成,确保了推理能力和快速响应能力的无缝融合。最后,在第四阶段,针对20多个通用领域的任务应用强化学习,进一步强化模型的通用能力并纠正不良行为。这些任务包括指令遵循、格式遵循和智能体能力等。
5.快速上手
在Hugging Face Hub的通义千问3集合以及魔搭社区(ModelScope)的通义千问3集合中,都能找到通义千问3系列模型。
5.1 Transformers
若要快速上手通义千问3,可以先尝试使用Transformers进行推理。确保已安装transformers>=4.51.0
,建议使用Python 3.10及以上版本,PyTorch 2.6及以上版本。
以下是运行通义千问3-8B的简单代码示例:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-8B"
# 加载分词器和模型
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 准备模型输入
prompt = "Give me a short introduction to large language models."
messages = [
{"role": "user", "content": prompt},
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=True, # 在思维模式和非思维模式间切换。默认值为True。
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 进行文本生成
generated_ids = model.generate(
**model_inputs,
max_new_tokens=32768
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist() # 解析思维内容
try:
# rindex查找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)
通义千问3和QwQ系列模型类似,在回复前会进行思考。这意味着模型会运用推理能力来提高生成回复的质量。模型会先生成包裹在<think>...</think>
标签中的思考内容,然后给出最终回复。
- 硬切换:若要严格禁用模型的思考行为,使其功能与之前的通义千问2.5指令模型一致,可以在格式化文本时将
enable_thinking
设置为False
。
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False # 设置enable_thinking=False可禁用思维模式
)
在某些对效率要求极高、禁用思考至关重要的场景中,这种设置尤为有用。
- 软切换:通义千问3还能理解用户对其思考行为的指令,特别是软切换指令
/think
和/no_think
。可以将它们添加到用户提示或系统消息中,在不同轮次的对话中切换模型的思维模式。在多轮对话中,模型会遵循最新的指令。
注意:在思维模式下,使用温度(Temperature)=0.6、核采样概率(TopP)=0.95、采样数量(TopK)=20、最小概率(MinP)=0(这是generation_config.json
中的默认设置)。不要使用贪婪解码,因为这可能会导致性能下降和内容重复。更多详细指导,请参考最佳实践部分。
在非思维模式下,建议使用温度(Temperature)=0.7、核采样概率(TopP)=0.8、采样数量(TopK)=20、最小概率(MinP)=0。
5.2 魔搭社区(ModelScope)
若要解决下载相关的问题,建议尝试使用魔搭社区(ModelScope)。在开始前,需要使用pip
安装modelscope
。
魔搭社区(ModelScope)采用了与Transformers类似(但不完全相同)的编程接口。在基本用法中,只需将上述代码的第一行修改如下:
from modelscope import AutoModelForCausalLM, AutoTokenizer
5.3 vLLM
若要部署通义千问3,建议使用vLLM。vLLM是一个快速且易于使用的大语言模型推理和服务框架。下面展示如何使用vLLM构建一个与OpenAI API兼容的API服务。
首先,确保已安装vllm>=0.8.5
。
以通义千问3-8B为例,运行以下代码来构建vLLM服务:
vllm serve Qwen/Qwen3-8B --enable-reasoning --reasoning-parser deepseek_r1
然后,可以使用创建聊天接口与通义千问进行交互:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "Qwen/Qwen3-8B",
"messages": [
{"role": "user", "content": "Give me a short introduction to large language models."}
],
"temperature": 0.6,
"top_p": 0.95,
"top_k": 20,
"max_tokens": 32768
}'
from openai import OpenAI
# 设置OpenAI的API密钥和API基础地址以使用vLLM的API服务器
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
chat_response = client.chat.completions.create(
model="Qwen/Qwen3-8B",
messages=[
{"role": "user", "content": "Give me a short introduction to large language models."},
],
temperature=0.6,
top_p=0.95,
top_k=20,
max_tokens=32768,
)
print("Chat response:", chat_response)
软切换始终可用,在vLLM中,也可以通过以下API调用配置实现硬切换。若要禁用思考,可以使用:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "Qwen/Qwen3-8B",
"messages": [
{"role": "user", "content": "Give me a short introduction to large language models."}
],
"temperature": 0.7,
"top_p": 0.8,
"top_k": 20,
"max_tokens": 8192,
"presence_penalty": 1.5,
"chat_template_kwargs": {"enable_thinking": false}
}'
from openai import OpenAI
# 设置OpenAI的API密钥和API基础地址以使用vLLM的API服务器
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
chat_response = client.chat.completions.create(
model="Qwen/Qwen3-8B",
messages=[
{"role": "user", "content": "Give me a short introduction to large language models."},
],
temperature=0.7,
top_p=0.8,
top_k=20,
presence_penalty=1.5,
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
print("Chat response:", chat_response)
6.使用通义千问3进行开发
下面是在不同框架中使用通义千问3的简单指南。首先,给出在Hugging Face的Transformers中使用通义千问3-30B-A3B的标准示例:
from modelscope import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-30B-A3B"
# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# 准备模型输入
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# 在思维模式和非思维模式间切换。默认值为True。
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 进行文本生成
generated_ids = model.generate(
**model_inputs,
max_new_tokens=32768
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist() # 解析思维内容
try:
# rindex查找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 # enable_thinking的默认值为True
)
在部署方面,可以使用sglang>=0.4.6.post1
或vllm>=0.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进行本地构建。
7.高级用法
当enable_thinking=True
时,通义千问3提供了一种软切换机制,允许用户动态控制模型的行为。具体来说,可以在用户提示或系统消息中添加/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)
# 更新对话历史
self.history.append({"role": "user", "content": user_input})
self.history.append({"role": "assistant", "content": response})
return response
# 示例用法
if __name__ == "__main__":
chatbot = QwenChatbot()
# 第一次输入(未包含/think或/no_think标签,默认启用思维模式)
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("----------------------")
# 第二次输入,包含/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("----------------------")
# 第三次输入,包含/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}")
8.智能体应用
通义千问3在工具调用能力方面表现卓越。建议使用通义千问智能体(Qwen-Agent),以便充分发挥通义千问3的智能体能力。通义千问智能体内部封装了工具调用模板和工具调用解析器,极大地降低了编码复杂度。
在定义可用工具时,你可以使用模型上下文协议(MCP)配置文件,也可以使用通义千问智能体的集成工具,或者自行集成其他工具。
from qwen_agent.agents import Assistant
# 定义大语言模型
llm_cfg = {
'model': 'Qwen3-30B-A3B',
# 使用阿里巴巴模型平台提供的端点:
#'model_type': 'qwen_dashscope',
# 'api_key': os.getenv('DASHSCOPE_API_KEY'),
# 使用与OpenAI API兼容的自定义端点:
'model_server': 'http://localhost:8000/v1', # api_base
'api_key': 'EMPTY',
# 其他参数:
# 'generate_cfg': {
# # 添加:当响应内容为`<think>这是思考内容</think>这是答案`时;
# # 不添加:当响应已按推理内容和答案分开时。
# 'thought_in_content': True,
# },
}
# 定义工具
tools = [
{'mcpServers': { # 可以指定MCP配置文件
'time': {
'command': 'uvx',
'args': ['mcp-server-time', '--local-timeznotallow=Asia/Shanghai']
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
},
'code_interpreter', # 内置工具
]
# 定义智能体
bot = Assistant(llm=llm_cfg, function_list=tools)
# 流式生成
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)
9.未来展望
通义千问3是迈向通用人工智能(AGI)和超级人工智能(ASI)征程中的一个重要里程碑。通过扩大预训练和强化学习(RL)的规模,通义千问3实现了更高水平的智能。它无缝集成了思维模式和非思维模式,使用户能够灵活控制思维预算。此外,通义千问3扩展了对多种语言的支持,提高了全球可访问性。
在人工智能技术持续演进的当下,阿里巴巴着眼未来,致力于多维度提升模型性能。其策略包括优化模型架构和训练方法,实现拓展数据规模、增加模型参数、延长上下文长度、拓宽模态、推进强化学习等目标。
行业正从以训练模型为核心,迈向以训练智能体为核心的时代。通义千问 3 的下一次迭代有望实现技术突破,为人们的工作和生活带来积极改变,助力各领域智能化升级。
本文转载自AI科技论谈,作者:AI科技论谈
