Qwen3:思深,行速

來源:通義千問Qwen

今天,我們宣佈推出 Qwen3,這是 Qwen 系列大型語言模型的最新成員。我們的旗艦模型 Qwen3-235B-A22B 在代碼、數學、通用能力等基準測試中,與 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等頂級模型相比,表現出極具競爭力的結果。此外,小型 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 模型。此外,六個 Dense 模型也已開源,包括 Qwen3-32B、Qwen3-14B、Qwen3-8B、Qwen3-4B、Qwen3-1.7B 和 Qwen3-0.6B,均在 Apache 2.0 許可下開源。

經過後訓練的模型,例如 Qwen3-30B-A3B,以及它們的預訓練基座模型(如 Qwen3-30B-A3B-Base),現已在 Hugging Face、ModelScope 和 Kaggle 等平台上開放使用。對於部署,我們推薦使用 SGLang 和 vLLM 等框架;而對於本地使用,像 Ollama、LMStudio、MLX、llama.cpp 和 KTransformers 這樣的工具也非常值得推薦。這些選項確保用戶可以輕鬆將 Qwen3 集成到他們的工作流程中,無論是用於研究、開發還是生產環境。

我們相信,Qwen3 的發佈和開源將極大地推動大型基礎模型的研究與開發。我們的目標是為全球的研究人員、開發者和組織賦能,幫助他們利用這些前沿模型構建創新解決方案。

歡迎在 Qwen Chat 網頁版 (chat.qwen.ai) 和通義 APP 中試用 Qwen3!

核心亮點

多種思考模式

Qwen3 模型支持兩種思考模式:

思考模式:在這種模式下,模型會逐步推理,經過深思熟慮後給出最終答案。這種方法非常適合需要深入思考的複雜問題。

非思考模式:在此模式中,模型提供快速、近乎即時的響應,適用於那些對速度要求高於深度的簡單問題。

這種靈活性使用戶能夠根據具體任務控制模型進行「思考」的程度。例如,複雜的問題可以通過擴展推理步驟來解決,而簡單的問題則可以直接快速作答,無需延遲。至關重要的是,這兩種模式的結合大大增強了模型實現穩定且高效的「思考預算」控制能力。如上文所述,Qwen3 展現出可擴展且平滑的性能提升,這與分配的計算推理預算直接相關。這樣的設計讓用戶能夠更輕鬆地為不同任務配置特定的預算,在成本效益和推理質量之間實現更優的平衡。

多語言

Qwen3 模型支持 119 種語言和方言。這一廣泛的多語言能力為國際應用開闢了新的可能性,讓全球用戶都能受益於這些模型的強大功能。

預訓練

在預訓練方面,Qwen3 的數據集相比 Qwen2.5 有了顯著擴展。Qwen2.5是在 18 萬億個 token 上進行預訓練的,而 Qwen3 使用的數據量幾乎是其兩倍,達到了約 36 萬億個 token,涵蓋了 119 種語言和方言。為了構建這個龐大的數據集,我們不僅從網絡上收集數據,還從 PDF 文檔中提取信息。我們使用 Qwen2.5-VL 從這些文檔中提取文本,並用 Qwen2.5 改進提取內容的質量。為了增加數學和代碼數據的數量,我們利用 Qwen2.5-Math 和 Qwen2.5-Coder 這兩個數學和代碼領域的專家模型合成數據,合成了包括教科書、問答對以及代碼片段等多種形式的數據。

預訓練過程分為三個階段。在第一階段(S1),模型在超過 30 萬億個 token 上進行了預訓練,上下文長度為 4K token。這一階段為模型提供了基本的語言技能和通用知識。在第二階段(S2),我們通過增加知識密集型數據(如 STEM、編程和推理任務)的比例來改進數據集,隨後模型又在額外的 5 萬億個 token 上進行了預訓練。在最後階段,我們使用高質量的長上下文數據將上下文長度擴展到 32K token,確保模型能夠有效地處理更長的輸入。

由於模型架構的改進、訓練數據的增加以及更有效的訓練方法,Qwen3 Dense 基礎模型的整體性能與參數更多的Qwen2.5基礎模型相當。例如,Qwen3-1.7B/4B/8B/14B/32B-Base 分別與 Qwen2.5-3B/7B/14B/32B/72B-Base 表現相當。特別是在 STEM、編碼和推理等領域,Qwen3 Dense 基礎模型的表現甚至超過了更大規模的 Qwen2.5 模型。對於 Qwen3 MoE 基礎模型,它們在僅使用 10% 激活參數的情況下達到了與 Qwen2.5 Dense 基礎模型相似的性能。這帶來了訓練和推理成本的顯著節省。

後訓練

為了開發能夠同時具備思考推理和快速響應能力的混合模型,我們實施了一個四階段的訓練流程。該流程包括:(1)長思維鏈冷啟動,(2)長思維鏈強化學習,(3)思維模式融合,以及(4)通用強化學習。

在第一階段,我們使用多樣的的長思維鏈數據對模型進行了微調,涵蓋了數學、代碼、邏輯推理和 STEM 問題等多種任務和領域。這一過程旨在為模型配備基本的推理能力。第二階段的重點是大規模強化學習,利用基於規則的獎勵來增強模型的探索和鑽研能力。

在第三階段,我們在一份包括長思維鏈數據和常用的指令微調數據的組合數據上對模型進行微調,將非思考模式整合到思考模型中。確保了推理和快速響應能力的無縫結合。最後,在第四階段,我們在包括指令遵循、格式遵循和 Agent 能力等在內的 20 多個通用領域的任務上應用了強化學習,以進一步增強模型的通用能力並糾正不良行為。

開始使用Qwen3

以下是如何在不同框架中使用 Qwen3 的簡單指南。首先,我們提供了一個在 Hugging Face transformers 中使用 Qwen3-30B-A3B 的標準示例:

from modelscope import AutoModelForCausalLM, AutoTokenizer model_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 ()    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.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 等代碼庫進行本地開發。

高級用法

我們提供了一種軟切換機制,允許用戶在 enable_thinking=True 時動態控制模型的行為。具體來說,您可以在用戶提示或系統消息中添加 /think 和 /no_think 來逐輪切換模型的思考模式。在多輪對話中,模型會遵循最近的指令。

以下是一個多輪對話的示例:

from transformers import AutoModelForCausalLM, AutoTokenizer classQwenChatbot:    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}「)

Agent示例

Qwen3 在工具調用能力方面表現出色。我們推薦使用 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 `this is the thoughtthis 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)

Qwen的朋友們

感謝眾多朋友一直以來對 Qwen 的鼎力支持!我們歡迎更多新朋友加入我們的社區,幫助我們變得更好!

未來發展

Qwen3 代表了我們在通往通用人工智能(AGI)和超級人工智能(ASI)旅程中的一個重要里程碑。通過擴大預訓練和強化學習的規模,我們實現了更高層次的智能。我們無縫集成了思考模式與非思考模式,為用戶提供了靈活控制思考預算的能力。此外,我們還擴展了對多種語言的支持,幫助全球更多用戶。

展望未來,我們計劃從多個維度提升我們的模型。這包括優化模型架構和訓練方法,以實現幾個關鍵目標:擴展數據規模、增加模型大小、延長上下文長度、拓寬模態範圍,並利用環境反饋推進強化學習以進行長週期推理。我們認為,我們正從專注於訓練模型的時代過渡到以訓練 Agent 為中心的時代。我們的下一代迭代必將為大家的工作和生活帶來有意義的進步。