یه خبر جدید تو دنیای مدلهای زبانی بزرگ اومده. تو سه ماه گذشته، تیم Qwen روی بهتر کردن قابلیت تفکر مدل Qwen3-4B کار کرده تا کیفیت و عمق استدلالش رو بالا ببره. نتیجه این تلاشها شده مدلی به اسم Qwen3-4B-Thinking-2507. این مدل یه سری بهبودهای کلیدی داشته که خوبه باهاشون آشنا بشیم.
اول از همه، عملکردش تو کارهایی که به استدلال نیاز دارن، مثل استدلال منطقی، ریاضی، علوم، کدنویسی و بنچمارکهای آکادمیک که معمولا تخصص انسانی میخوان، خیلی بهتر شده. در کنار این، قابلیتهای عمومی مدل هم پیشرفت چشمگیری داشته؛ مثلا در زمینه دنبال کردن دستورات، استفاده از ابزارها، تولید متن و هماهنگی با چیزهایی که آدما ترجیح میدن. یکی دیگه از ویژگیهای مهمش، توانایی درک بهتر متون طولانی تا سقف ۲۵۶ هزار توکن هست. یه نکته مهم در مورد این نسخه اینه که طول تفکرش افزایش پیدا کرده و برای همین، خیلی توصیه میشه که برای کارهای استدلالی خیلی پیچیده ازش استفاده بشه.
مشخصات فنی Qwen3-4B-Thinking-2507
اگه بخوایم یه نگاه فنیتر به این مدل بندازیم، مشخصاتش اینجوریه:
- نوع: مدل زبان علی (Causal Language Model)
- مرحله آموزش: پیشآموزش و پسآموزش (Pretraining & Post-training)
- تعداد پارامترها: ۴ میلیارد
- تعداد پارامترهای غیر امبدینگ: ۳.۶ میلیارد
- تعداد لایهها: ۳۶
- تعداد هدهای توجه (GQA): ۳۲ تا برای Q و ۸ تا برای KV
- طول زمینه (Context Length): به صورت پیشفرض ۲۶۲,۱۴۴ توکن
یه نکته خیلی مهم اینه که این مدل فقط از حالت تفکر (thinking mode) پشتیبانی میکنه. یعنی دیگه لازم نیست موقع استفاده، گزینهای مثل enable_thinking=True
رو مشخص کنین. برای اینکه مدل حتما وارد فاز تفکر بشه، الگوی چت پیشفرضش به صورت خودکار تگ <think>
رو اضافه میکنه. برای همین اگه دیدین خروجی مدل فقط با </think>
تموم میشه و تگ باز شدنش رو نداره، کاملا طبیعیه و جای نگرانی نیست.
برای اینکه جزئیات بیشتری مثل ارزیابی بنچمارکها، سختافزار مورد نیاز و عملکرد استنتاج (inference) رو ببینین، میتونین به بلاگ، گیتهاب و مستندات رسمی پروژه سر بزنین.
مقایسه عملکرد در بنچمارکها
برای اینکه بهتر بفهمیم عملکرد Qwen3-4B-Thinking-2507 در مقایسه با مدلهای دیگه چطوره، میشه به جدول زیر نگاه کرد. این جدول امتیازات مدلهای مختلف سری Qwen3 رو تو زمینههای دانش، استدلال، کدنویسی و موارد دیگه نشون میده.
دسته | بنچمارک | Qwen3-30B-A3B Thinking | Qwen3-4B Thinking | Qwen3-4B-Thinking-2507 |
---|---|---|---|---|
دانش (Knowledge) | ||||
MMLU-Pro | ۷۸.۵ | ۷۰.۴ | ۷۴.۰ | |
MMLU-Redux | ۸۹.۵ | ۸۳.۷ | ۸۶.۱ | |
GPQA | ۶۵.۸ | ۵۵.۹ | ۶۵.۸ | |
SuperGPQA | ۵۱.۸ | ۴۲.۷ | ۴۷.۸ | |
استدلال (Reasoning) | ||||
AIME25 | ۷۰.۹ | ۶۵.۶ | ۸۱.۳ | |
HMMT25 | ۴۹.۸ | ۴۲.۱ | ۵۵.۵ | |
LiveBench 20241125 | ۷۴.۳ | ۶۳.۶ | ۷۱.۸ | |
کدنویسی (Coding) | ||||
LiveCodeBench v6 (25.02-25.05) | ۵۷.۴ | ۴۸.۴ | ۵۵.۲ | |
CFEval | ۱۹۴۰ | ۱۶۷۱ | ۱۸۵۲ | |
OJBench | ۲۰.۷ | ۱۶.۱ | ۱۷.۹ | |
همسویی (Alignment) | ||||
IFEval | ۸۶.۵ | ۸۱.۹ | ۸۷.۴ | |
Arena-Hard v2$ | ۳۶.۳ | ۱۳.۷ | ۳۴.۹ | |
Creative Writing v3 | ۷۹.۱ | ۶۱.۱ | ۷۵.۶ | |
WritingBench | ۷۷.۰ | ۷۳.۵ | ۸۳.۳ | |
عامل (Agent) | ||||
BFCL-v3 | ۶۹.۱ | ۶۵.۹ | ۷۱.۲ | |
TAU1-Retail | ۶۱.۷ | ۳۳.۹ | ۶۶.۱ | |
TAU1-Airline | ۳۲.۰ | ۳۲.۰ | ۴۸.۰ | |
TAU2-Retail | ۳۴.۲ | ۳۸.۶ | ۵۳.۵ | |
TAU2-Airline | ۳۶.۰ | ۲۸.۰ | ۵۸.۰ | |
TAU2-Telecom | ۲۲.۸ | ۱۷.۵ | ۲۷.۲ | |
چندزبانگی (Multilingualism) | ||||
MultiIF | ۷۲.۲ | ۶۶.۳ | ۷۷.۳ | |
MMLU-ProX | ۷۳.۱ | ۶۱.۰ | ۶۴.۲ | |
INCLUDE | ۷۱.۹ | ۶۱.۸ | ۶۴.۴ | |
PolyMATH | ۴۶.۱ | ۴۰.۰ | ۴۶.۲ |
- نکته $: برای اینکه نتایج قابل بازتولید باشن، نرخ برد (win rate) با ارزیابی GPT-4.1 گزارش شده.
- نکته &: برای تسکهای خیلی چالشی (مثل PolyMATH و همه تسکهای استدلال و کدنویسی)، از طول خروجی ۸۱,۹۲۰ توکن استفاده شده. برای بقیه تسکها، طول خروجی روی ۳۲,۷۶۸ تنظیم شده.
خانواده بزرگ Qwen3
داستان فقط به مدل 4B ختم نمیشه. تیم Qwen در واقع روی کل خانواده مدلهای Qwen3 کار کرده و نسخههای آپدیت شده Qwen3-2507 رو در دو نوع و سه اندازه مختلف معرفی کرده:
- Qwen3-Instruct-2507: این مدل نسخه آپدیت شده حالت «بدون تفکر» (non-thinking) مدلهای قبلی Qwen3 هست. بهبودهای اصلیش شامل این موارد میشه:
- بهبود قابل توجه تو قابلیتهای عمومی مثل دنبال کردن دستور، استدلال منطقی، درک مطلب، ریاضی، علوم، کدنویسی و استفاده از ابزار.
- پوشش خیلی بهتر دانشهای تخصصی و کمتر شناخته شده (long-tail) در زبانهای مختلف.
- همسویی خیلی بهتر با ترجیحات کاربر تو تسکهای ذهنی و باز، که باعث میشه جوابهای مفیدتر و متنهای باکیفیتتری تولید کنه.
- قابلیت بهتر تو درک زمینه طولانی ۲۵۶ هزار توکنی.
- Qwen3-Thinking-2507: این مدل هم ادامه مسیر مدلهای تفکر Qwen3 هست که کیفیت و عمق استدلالش بهبود پیدا کرده. ویژگیهاش شامل این موارد میشه:
- عملکرد خیلی بهتر تو تسکهای استدلالی مثل منطق، ریاضی، علوم، کدنویسی و بنچمارکهای آکادمیک که معمولا به تخصص انسانی نیاز دارن. این مدل تونسته به نتایج پیشرفتهای بین مدلهای تفکر متن باز برسه.
- قابلیتهای عمومی خیلی بهتر مثل دنبال کردن دستور، استفاده از ابزار، تولید متن و همسویی با ترجیحات کاربر.
- توانایی بهتر در درک زمینه طولانی ۲۵۶ هزار توکنی.
این مدلها در اندازههای 235B-A22B، 30B-A3B و 4B عرضه شدن.
نگاهی به تاریخچه و نسخههای قبلی Qwen
سری Qwen3 جدیدترین عضو خانواده بزرگ مدلهای زبانی Qwen هست که بر اساس تجربههایی که از ساخت مدلهای QwQ و Qwen2.5 به دست اومده، ساخته شده. تیم توسعه دهنده، وزنهای مدلهای Qwen3 رو به صورت عمومی منتشر کرده که هم شامل مدلهای «چگال» (dense) و هم مدلهای «ترکیب متخصصان» (Mixture-of-Expert یا MoE) میشه.
ویژگیهای برجسته سری اولیه Qwen3 شامل این موارد بود:
- ارائه مدلهای چگال و MoE در اندازههای مختلف: ۰.6B، ۱.7B، 4B، 8B، 14B، 32B و مدلهای MoE مثل 30B-A3B و 235B-A22B.
- قابلیت جابجایی راحت بین حالت «تفکر» (برای استدلالهای پیچیده منطقی، ریاضی و کدنویسی) و حالت «بدون تفکر» (برای چتهای عمومی و بهینه).
- بهبود قابل توجه تو توانایی استدلال، طوری که از مدلهای قبلی QwQ (در حالت تفکر) و Qwen2.5 (در حالت بدون تفکر) تو زمینههای ریاضی، تولید کد و استدلال منطقی عمومی بهتر عمل میکنه.
- همسویی بهتر با ترجیحات انسانی، به خصوص تو نوشتن خلاقانه، نقش بازی کردن، دیالوگهای چند مرحلهای و دنبال کردن دستورات که باعث میشه تجربه مکالمه طبیعیتر و جذابتری ایجاد بشه.
- تخصص در قابلیتهای عامل (Agent) که اجازه میده با ابزارهای خارجی به صورت دقیق هم در حالت تفکر و هم بدون تفکر یکپارچه بشه.
- پشتیبانی از بیش از ۱۰۰ زبان و گویش مختلف با توانایی بالا در دنبال کردن دستورات چندزبانه و ترجمه.
خط زمانی انتشار مدلهای Qwen
اینجا یه نگاه سریع به تاریخچه انتشار مدلهای مختلف این سری میندازیم:
- ۲۰۲۵.۰۸.۰۶: انتشار نهایی و متن باز Qwen3-2507، یعنی مدلهای Qwen3-4B-Instruct-2507 و Qwen3-4B-Thinking-2507.
- ۲۰۲۵.۰۷.۳۱: انتشار Qwen3-30B-A3B-Thinking-2507.
- ۲۰۲۵.۰۷.۳۰: انتشار Qwen3-30B-A3B-Instruct-2507.
- ۲۰۲۵.۰۷.۲۵: انتشار نسخه آپدیت شده حالت تفکر Qwen3-235B-A22B با اسم Qwen3-235B-A22B-Thinking-2507.
- ۲۰۲۵.۰۷.۲۱: انتشار نسخه آپدیت شده حالت بدون تفکر Qwen3-235B-A22B با اسم Qwen3-235B-A22B-Instruct-2507 که بهبودهای زیادی داشته و از زمینه طولانی ۲۵۶ هزار توکنی پشتیبانی میکنه.
- ۲۰۲۵.۰۴.۲۹: انتشار سری Qwen3.
- ۲۰۲۴.۰۹.۱۹: انتشار سری Qwen2.5 با سه اندازه جدید 3B، 14B و 32B.
- ۲۰۲۴.۰۶.۰۶: انتشار سری Qwen2.
- ۲۰۲۴.۰۳.۲۸: انتشار اولین مدل MoE از Qwen به اسم Qwen1.5-MoE-A2.7B.
- ۲۰۲۴.۰۲.۰۵: انتشار سری Qwen1.5.
چطوری از مدلهای Qwen3 استفاده کنیم؟
حالا میرسیم به بخش عملی ماجرا. برای استفاده از این مدلها، راههای مختلفی وجود داره که اینجا به چندتا از مهمترینهاشون اشاره میکنیم.
استفاده با کتابخانه Transformers
کتابخانه transformers
از Hugging Face یکی از راههای اصلی برای کار با این مدلهاست. توصیه میشه که از آخرین نسخه این کتابخانه استفاده کنین و حداقل نسخه مورد نیاز transformers>=4.51.0
هست. اگه از نسخههای قدیمیتر استفاده کنین، با خطای KeyError: 'qwen3'
مواجه میشین.
نمونه کد برای Qwen3-4B-Thinking-2507:
اینجا یه نمونه کد ساده برای تولید محتوا با این مدل رو میبینین:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-4B-Thinking-2507"
# بارگذاری توکنایزر و مدل
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,
)
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:
# پیدا کردن توکن ۱۵۱۶۶۸ که معادل </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) # این بخش تگ باز <think> رو نداره
print("content:", content)
نمونه کد برای مدل Instruct (بدون تفکر):
مدل Qwen3-Instruct-2507 فقط از حالت بدون تفکر پشتیبانی میکنه و بلوک <think></think>
تولید نمیکنه. دیگه لازم نیست enable_thinking=False
رو مشخص کنین.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-30B-A3B-Instruct-2507"
# بارگذاری توکنایزر و مدل
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,
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# تولید متن
generated_ids = model.generate(
**model_inputs,
max_new_tokens=16384
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
content = tokenizer.decode(output_ids, skip_special_tokens=True)
print("content:", content)
اجرای مدلها به صورت محلی (Local)
برای اجرای این مدلها روی سیستم شخصی، چند تا فریمورک محبوب وجود داره.
- llama.cpp: این ابزار اجازه میده مدلهای زبانی رو با کمترین تنظیمات و بهترین عملکرد روی سختافزارهای مختلف اجرا کنین. برای پشتیبانی کامل از Qwen3، نسخه
llama.cpp>=b5401
توصیه میشه. میتونین از طریق خط فرمان یا با راهاندازی یه سرور API ازش استفاده کنین. - Ollama: بعد از نصب Ollama، میتونین سرویسش رو اجرا کنین و با دستور
ollama run qwen3:8b
مدل رو بکشین و اجرا کنین. نسخههای جدید Ollama (v0.9.0 و بالاتر) توصیه میشه. حواستون باشه که تنظیمات پیشفرض Ollama برایnum_ctx
وnum_predict
ممکنه برای Qwen3 مناسب نباشه و بهتره اونها رو به درستی تنظیم کنین. - LMStudio: این برنامه هم از Qwen3 پشتیبانی میکنه و میتونین مستقیما از فایلهای GGUF استفاده کنین.
- پلتفرمهای دیگر: ابزارهایی مثل
ExecuTorch
(برای iOS و اندروید)،MNN
(برای موبایل)،mlx-lm
(برای Apple Silicon) وOpenVINO
(برای پردازندههای اینتل) هم از Qwen3 پشتیبانی میکنن.
استقرار و سرویسدهی (Deployment)
برای استفادههای بزرگتر و تجاری، فریمورکهای استقرار به کار میان.
- SGLang: یه فریمورک سریع برای سرویسدهی مدلهای زبانیه. میتونین باهاش یه سرور با API سازگار با OpenAI راه بندازین. حداقل نسخه مورد نیاز
sglang>=0.4.6.post1
هست. - vLLM: یه موتور استنتاج و سرویسدهی با توان عملیاتی بالا و مصرف حافظه بهینه است. نسخه
vllm>=0.9.0
توصیه میشه. - TensorRT-LLM: یه موتور استنتاج متن باز از NVIDIA هست که بهینهسازیهای مختلفی روی پردازندههای گرافیکی NVIDIA ارائه میده.
برای هر کدوم از این ابزارها، دستورات خط فرمان مشخصی برای راهاندازی مدلهای Instruct و Thinking وجود داره. یه نکته مهم در مورد SGLang و vLLM اینه که به خاطر نحوه پردازش درخواستهای API، ممکنه کیفیت استفاده از ابزار چند مرحلهای با مدلهای Thinking کمی پایین بیاد. تیم توسعه دهنده در حال کار روی رفع این مشکل هست.
تنظیمات بهینه برای بهترین عملکرد
برای اینکه بهترین نتیجه رو از مدلهای Qwen3 بگیرین، یه سری تنظیمات پیشنهاد شده:
- پارامترهای نمونهبرداری (Sampling):
Temperature=0.6
,TopP=0.95
,TopK=20
,MinP=0
.- میتونین پارامتر
presence_penalty
رو بین ۰ تا ۲ تنظیم کنین تا از تکرارهای بینهایت جلوگیری بشه، ولی مقدار بالاترش ممکنه باعث تداخل زبانی و کاهش جزئی عملکرد بشه.
- طول خروجی کافی:
- برای بیشتر درخواستها، طول خروجی ۳۲,۷۶۸ توکن پیشنهاد میشه.
- برای بنچمارکهای خیلی پیچیده مثل مسائل ریاضی و مسابقات برنامهنویسی، بهتره طول خروجی رو روی ۸۱,۹۲۰ توکن تنظیم کنین تا مدل فضای کافی برای تولید جوابهای دقیق و کامل داشته باشه.
- استاندارد کردن فرمت خروجی:
- برای مسائل ریاضی، این جمله رو به پرامپت اضافه کنین: «Please reason step by step, and put your final answer within \boxed{}.».
- برای سوالات چند گزینهای، این ساختار JSON رو اضافه کنین: «Please show your choice in the `answer` field with only the choice letter, e.g.,”answer”: “C”».
- حذف محتوای تفکر در تاریخچه مکالمه:
- در مکالمات چند مرحلهای، خروجی مدل که به عنوان تاریخچه بهش داده میشه، باید فقط شامل بخش جواب نهایی باشه و محتوای تفکر رو نداشته باشه.
قابلیت استفاده از ابزار (Tool Use)
Qwen3 تو قابلیت فراخوانی ابزارها عالی عمل میکنه. برای بهترین استفاده از این توانایی، Qwen-Agent پیشنهاد میشه. این ابزار قالبهای فراخوانی ابزار و پارسرهای مربوط بهش رو در خودش داره و پیچیدگی کدنویسی رو خیلی کم میکنه. میتونین ابزارهای موجود رو با استفاده از فایل کانفیگ MCP، ابزارهای داخلی Qwen-Agent یا با یکپارچهسازی ابزارهای دیگه تعریف کنین.
اینجا یه نمونه کد برای تعریف عامل (Agent) رو میبینین:
from qwen_agent.agents import Assistant
# تعریف LLM
llm_cfg = {
'model': 'Qwen3-4B-Thinking-2507',
# استفاده از یک اندپوینت سفارشی سازگار با OpenAI API:
'model_server': 'http://localhost:8000/v1',
'api_key': 'EMPTY',
'generate_cfg': {
'thought_in_content': True,
},
}
# تعریف ابزارها
tools = [
{'mcpServers': { # میتونین فایل کانفیگ MCP رو مشخص کنین
'time': {
'command': 'uvx',
'args': ['mcp-server-time', '--local-timezone=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)
دیدگاهتان را بنویسید