
來源 | Datawhale
作者 | 張龍斐
昨天凌晨,阿里開源了全新的推理模型:QwQ-32B。
據官方釋出訊息,該模型效能比肩滿血版 DeepSeek-R1(671B)!

可以看到在官方放出的評測圖中, QwQ-32B 與滿血版 DeepSeek R1(671B)在五項基準測試的得分不相上下,更是遠超同尺寸 R1 蒸餾模型。
看到了這些訊息後,我就開始上手深度測試。
QwQ-32B開源連結:
魔搭開源連結:https://modelscope.cn/models/Qwen/QwQ-32B
huggingface開源連結:https://huggingface.co/Qwen/QwQ-32B
線上體驗地址:
https://chat.qwen.ai/?models=Qwen2.5-Plus
本地部署:保姆級實戰教程
我在 AutoDL 上租用一張 4090,本地部署了一個 QwQ-32B-AWQ 量化版本。
寫了個保姆級部署教程,因篇幅原因,大家可以按需檢視~
教程地址:https://datawhaler.feishu.cn/docx/Wz2NdqSx1oEZsuxB9zHcEQ20nNe

根據命令列列印的資訊可以看到模型在一張 4090 GPU 上完美執行。我給他測試了最近很火的問題:
9.11 和 9.9 哪個更大?
推理一共花了 21.39 秒,結果如下所示:

實測下來,QwQ-32B-AWQ 量化版本視訊記憶體佔用不到 18GB ,一張 4090 綽綽有餘。而 32B 的 QwQ,也是完美適配消費級硬體。

效能實測
在 QwQ-32B 的效能方面,我分了程式碼能力、數學能力和邏輯能力三個維度進行測評。
首先是程式碼能力,我讓它“編寫一個 python 指令碼,顯示一個球在旋轉的六邊形內部彈跳。球應該受到重力和摩擦的影響,並且必須真實地彈跳 off 轉動的牆壁。”

可以看到,整個球體的彈跳和撞擊特別真實,就連小球帶動大框的效果都做出來了,很好的還原了真實的物理場景。
而 Grok-3 在這個問題上直接就炸了,小球直接自由落體。

然後我試了試它的數學能力。最近正好考研成績出了,我就拿了兩道數一的考研題進行了測試:

題目一:回答完全正確。

題目二:回答完全正確。

數學和程式碼作為 QwQ-32B 的主攻方向,確實是效果極佳。
最後的邏輯推理能力實測來自 unlock-deepseek 專案群。
有一道很有意思的題目:
下面我會給你一道數學單選題,請選出正確答案。題目資訊如下:
下面說法正確的是( ).
A:跳遠測距離,根據的是兩點之間線段最短.
B:跳高杆不會掉落,是因為兩點確定一條直線.
C:多條跑道找捷徑,根據的是垂線段最短.
D:同一路口白色斑馬線互相平行,是因為過直線外一點有且只有一條直線與已知直線平行.
這道題有多難呢,大家可以試試看,模型的思考過程真的特別精彩,上演了足足 7 分多鐘的左右腦互搏。。
但是 QwQ 還是回答出了正確答案。


結合數學、程式碼、邏輯推理三個維度的實測,QwQ 的實力還是挺強悍的,一點也不輸幾個主流的超大杯引數的推理模型。
Agent 相關能力:Function Call
QwQ-32B 中還集成了與 Agent(智慧體)相關的能力,支援函式呼叫。於是我也測試使用了一下,搭建了一個股票資料分析 Agent:
import os
from openai import OpenAI
import efinance as ef
import json
# 設定模型的 API 地址
openai_api_base = "http://localhost:8000/v1"
api_key = "dummy_key"# 本地部署不需要真實 key
# 例項化 OpenAI 客戶端
client = OpenAI(
api_key=api_key,
base_url=openai_api_base,
)
# 定義可用的函式
defquery_stock_code(stock_name):
"""查詢股票程式碼"""
try:
stock_data = ef.stock.get_realtime_quotes(stock_name)
return stock_data.to_dict('records')
except Exception as e:
return {"error": str(e)}
defget_stock_history(stock_code, start_date=None, end_date=None):
"""獲取股票歷史資料"""
try:
history_data = ef.stock.get_quote_history(stock_code, start_date, end_date)
return history_data.to_dict('records')
except Exception as e:
return {"error": str(e)}
defget_stock_financial(stock_code):
"""獲取股票財務資料"""
try:
financial_data = ef.stock.get_financial_report(stock_code)
return financial_data.to_dict('records')
except Exception as e:
return {"error": str(e)}
# 定義函式對映
function_map = {
"query_stock_code": query_stock_code,
"get_stock_history": get_stock_history,
"get_stock_financial": get_stock_financial
}
# 定義函式描述,用於告訴模型可用的函式
functions = [
{
"name": "query_stock_code",
"description": "查詢股票的即時行情資料",
"parameters": {
"type": "object",
"properties": {
"stock_name": {
"type": "string",
"description": "股票名稱或程式碼"
}
},
"required": ["stock_name"]
}
},
{
"name": "get_stock_history",
"description": "獲取股票的歷史行情資料",
"parameters": {
"type": "object",
"properties": {
"stock_code": {
"type": "string",
"description": "股票程式碼"
},
"start_date": {
"type": "string",
"description": "開始日期,格式為YYYY-MM-DD"
},
"end_date": {
"type": "string",
"description": "結束日期,格式為YYYY-MM-DD"
}
},
"required": ["stock_code"]
}
},
{
"name": "get_stock_financial",
"description": "獲取股票的財務報表資料",
"parameters": {
"type": "object",
"properties": {
"stock_code": {
"type": "string",
"description": "股票程式碼"
}
},
"required": ["stock_code"]
}
}
]
definteractive_stock_query():
"""互動式股票查詢功能"""
print("歡迎使用股票查詢助手!您可以詢問任何有關股票的問題。輸入'退出'結束對話。")
# 儲存對話歷史
conversation_history = []
whileTrue:
user_input = input("\n請輸入您的問題: ")
if user_input.lower() in ['退出', 'exit', 'quit']:
print("感謝使用,再見!")
break
# 新增使用者輸入到對話歷史
conversation_history.append({"role": "user", "content": user_input})
try:
# 呼叫模型,允許函式呼叫
response = client.chat.completions.create(
model="QwQ-32B",
messages=conversation_history,
functions=functions,
function_call="auto"
)
assistant_message = response.choices[0].message
# 新增助手回覆到對話歷史
conversation_history.append(assistant_message)
# 檢查是否有函式呼叫
if assistant_message.function_call:
function_call = assistant_message.function_call
function_name = function_call.name
# 解析函式引數
try:
function_args = json.loads(function_call.arguments)
except json.JSONDecodeError:
print("函式引數解析錯誤")
continue
print(f"正在呼叫函式: {function_name}")
# 執行函式
if function_name in function_map:
function_to_call = function_map[function_name]
function_response = function_to_call(**function_args)
# 將函式執行結果新增到對話歷史
conversation_history.append({
"role": "function",
"name": function_name,
"content": json.dumps(function_response, ensure_ascii=False)
})
# 再次呼叫模型,讓它解釋函式執行結果
second_response = client.chat.completions.create(
model="QwQ-32B",
messages=conversation_history
)
# 輸出模型解釋
print("\n助手:", second_response.choices[0].message.content)
# 新增到對話歷史
conversation_history.append(second_response.choices[0].message)
else:
print(f"未知函式: {function_name}")
else:
# 直接輸出模型回覆
print("\n助手:", assistant_message.content)
except Exception as e:
print(f"發生錯誤: {str(e)}")
if __name__ == "__main__":
interactive_stock_query()
成果展示:

支援 Function Call 不僅增強了模型的實際應用能力,還能使它能夠在使用工具的同時進行批判性思考,並根據環境反饋調整推理過程。
寫在最後
總體來說,這次通義開源的 QwQ-32B 推理模型還是很不錯的:
-
第一是 32B 小引數模型效能與超大引數的推理模型效能不相上下,做到了在保證效能的同時降低對計算資源的依賴,從而實現更加環保、可持續的AI技術發展;
-
第二是響應速度也是相當不錯的,不會遇到伺服器繁忙的情況;
-
第三是它支援
function call
功能,這一點對於模型開發來說有多重要就不必多說了。
如今,距離 o1 模型釋出不過五個月,推理模型領域已經迎來了百花齊放的新局面。
猶記得前段時間大家還在全網尋找 "滿血版"DeepSeek-R1 的使用渠道,轉眼間就出現了小尺寸且效能強悍的 QwQ-32B 模型。這個量級在本地部署沒太大壓力,也可以在阿里雲百鍊平臺呼叫 QwQ 的 API 進行開發。對於創業者、小型團隊,或者想要做專業 AI 應用的公司而言,成本大大降低。
自 2023 年 8 月以來,通義千問累計開源了 200 多款模型。很低調,但在做實事,真正在推動大模型技術的普惠和應用的落地,促進國內大模型生態的繁榮。
向通義千問團隊致敬。
技術交流群邀請函
△長按新增小助手
掃描二維碼新增小助手微信
請備註:姓名-學校/公司-研究方向
(如:小張-哈工大-對話系統)
即可申請加入自然語言處理/Pytorch等技術交流群
關於我們
MLNLP 社群是由國內外機器學習與自然語言處理學者聯合構建的民間學術社群,目前已經發展為國內外知名的機器學習與自然語言處理社群,旨在促進機器學習,自然語言處理學術界、產業界和廣大愛好者之間的進步。
社群可以為相關從業者的深造、就業及研究等方面提供開放交流平臺。歡迎大家關注和加入我們。

掃描二維碼新增小助手微信
關於我們
