Chuyển đến nội dung chính

Qwen3-Next: Hướng dẫn kèm dự án demo

Tìm hiểu cách xây dựng ứng dụng Streamlit để so sánh song song Qwen3-Next-80B-A3B và các mẫu Qwen khác, tập trung vào các chỉ số hiệu năng trong thực tế.
· 12 phút đọc

Khám phá cùng AI

Nhóm Qwen gần đây đã ra mắt mẫu Qwen3-Next-80B-A3B, kết hợp suy luận nâng cao, xử lý ngữ cảnh siêu dài và tốc độ suy luận vượt trội nhờ kiến trúc Mixture-of-Experts (MoE) lai.

Trong hướng dẫn này, tôi sẽ tập trung vào cách Qwen3-Next-80B-A3B thể hiện ở các tác vụ thực tế so với các mẫu Qwen trước đó như Qwen3-30B-A3B. Thay vì các điểm chuẩn trừu tượng, chúng ta sẽ chạy các bài kiểm thử thực hành song song, bao gồm suy luận, mã, và lời nhắc tài liệu siêu dài, để bạn có thể thấy các đánh đổi giữa tốc độ, chất lượng đầu ra và mức sử dụng bộ nhớ GPU.

Từng bước, tôi sẽ chỉ bạn cách:

  • Truy cập và tương tác với cả Qwen3-Next-80B-A3B và Qwen3-30B-A3B qua OpenRouter API, không cần thiết lập gì thêm
  • Xây dựng ứng dụng Streamlit để so sánh tức thì, song song phản hồi của mô hình, độ trễ và mức sử dụng tài nguyên
  • Chạy các thử nghiệm truy hồi ngữ cảnh siêu dài (trên 100K token) để kiểm tra giới hạn thực của mô hình
  • Phân tích các chỉ số hiệu năng thực tế như độ trễ, token/giây và mức dùng VRAM.

Cuối cùng, ứng dụng của bạn sẽ trông như sau:

Demo

Qwen3-Next là gì?

Qwen3-Next là một mô hình Mixture-of-Experts (MoE) 80 tỷ tham số. Trên thực tế, nó chỉ kích hoạt 3B tham số cho mỗi token, giúp chi phí huấn luyện rẻ hơn đến mười lần và tốc độ chạy nhanh hơn đến mười lần so với các mô hình dày đặc cũ (như Qwen3-32B) trong khi vẫn ngang bằng hoặc vượt trội về chất lượng.

Một số cải tiến chính của mô hình này gồm:

  • Kiến trúc lai: Qwen3-Next sử dụng tỉ lệ 75:25 giữa Gated DeltaNet (cho attention tuyến tính nhanh) và Gated Attention (cho khả năng gợi nhớ sâu), kết hợp điểm mạnh của cả hai phương pháp.
  • MoE siêu thưa: Dùng 512 chuyên gia nhưng chỉ kích hoạt 10+1 cho mỗi lần suy luận, giảm hơn 90% tính toán so với LLM dày đặc
  • Dự đoán đa token: Mô hình hỗ trợ giải mã suy đoán (speculative decoding) để tăng tốc độ lớn, đặc biệt trong chế độ streaming hoặc chat.
  • Ngữ cảnh siêu dài: Xử lý tới 256K token nguyên bản (trên 1M với mở rộng YaRN) với suy giảm hiệu năng tối thiểu, lý tưởng cho sách dài, codebase, v.v.

Kiến trúc Qwen3-Next

Nguồn: Qwen

Qwen 3 Next có hai biến thể:

  • Qwen3-Next-80B-A3B-Instruct: Mẫu này được thiết kế cho chat đa dụng, lập trình và hỏi đáp mở.
  • Qwen3-Next-80B-A3B-Thinking: Phù hợp cho suy luận nâng cao, chuỗi suy nghĩ và quy trình nghiên cứu.

Demo: Hỏi đáp và suy luận với Qwen3-Next qua OpenRouter API

Trong phần này, tôi sẽ minh họa cách sử dụng mẫu Qwen3-Next qua API OpenRouter để xây dựng một trợ lý hỏi đáp và suy luận tương tác.

Cách hoạt động:

  • Nhập câu hỏi vào ô văn bản, hoặc kéo thả một tài liệu PDF dài.
  • Chọn Max token và tên mô hình từ danh sách xổ xuống
  • Truy vấn tức thì hai mô hình đặt cạnh nhau để so sánh trực tiếp đầu ra.
  • Xem chi tiết chỉ số cho mỗi lần chạy, gồm thời gian phản hồi (độ trễ), token mỗi giây và độ dài đầu ra để hiểu hiệu năng và hiệu suất trong tình huống thực.

Bước 1: Điều kiện tiên quyết

Trước khi chạy demo, hãy đảm bảo bạn đã có đủ các điều kiện cần.

Bước 1.1: Thư viện nhập 

Đầu tiên, đảm bảo bạn đã cài các gói sau:

pip install streamlit requests pypdf

Lệnh này cài đặt các phụ thuộc cốt lõi để xây dựng ứng dụng: Streamlit cho giao diện, requests để gọi API, và pypdf để trích xuất nội dung PDF.

Bước 1.2: Thiết lập khóa API OpenRouter 

Mẫu Qwen3-Next cũng có sẵn qua API chính thức của Qwen (AlibabaCloud), HuggingFace, và bản lượng tử hóa qua Ollama. Trong hướng dẫn này, tôi dùng OpenRouter, cho phép truy cập nhiều mô hình chỉ với một khóa API. Thiết lập khóa API cho mô hình Qwen3-next-80b-a3b-instruct như sau:

  • Tạo tài khoản tại https://openrouter.ai/
  • Chuyển đến tab Models và tìm các mô hình “Qwen3-next-80b-a3b-instruct” và “Qwen3-30B-A3B”. Bạn có thể chọn giữa biến thể Thinking và Instruct tùy ứng dụng. Trong hướng dẫn này, tôi so sánh hai biến thể Instruct.

Mô hình Qwen 3 Next trên OpenRouter

  • Cuộn xuống và nhấp Create API Key. Điền tên khóa và hạn mức tín dụng (tùy chọn), rồi nhấn Create. Lưu khóa API để dùng sau. 

Khóa API

  • Tiếp theo, chuyển tới tab Credits và thêm thông tin thẻ hoặc ngân hàng. Bạn cũng có thể thanh toán qua Amazon Pay hoặc tiền mã hóa. Với demo này, tôi nạp khoảng 8 đô, là đủ.

Nạp tín dụng

Bây giờ, đặt khóa API làm biến môi trường trước khi chạy ứng dụng:

export OPENROUTER_API_KEY=your_api_key

Bước 2: Thiết lập cấu hình mô hình

Chúng ta bắt đầu bằng cách cấu hình các mô hình muốn so sánh. Mỗi mô hình gồm một định danh (dùng cho gọi API), tổng số tham số và số tham số đang hoạt động.

import streamlit as st
import requests
import time
import PyPDF2
MODEL_CONFIG = {
    "Qwen3-Next-80B-A3B": {
        "id": "qwen/qwen3-next-80b-a3b-instruct",
        "params_billion": 80,
        "active_params_billion": 3
    },
    "Qwen3-30B-A3B": {
        "id": "qwen/qwen3-30b-a3b-instruct-2507",
        "params_billion": 30,
        "active_params_billion": 3
    },
    "Qwen3-30B-A3B": {
        "id": "qwen/qwen3-next-80b-a3b-thinking",
        "params_billion": 30,
        "active_params_billion": 3
    },
}

Chúng ta nhập các thư viện cần thiết để xây dựng ứng dụng web Streamlit, gồm streamlit cho UI, requests cho gọi API, time để đo thời gian, và PyPDF2 để trích xuất văn bản từ PDF.

Sau đó, định nghĩa từ điển MODEL_CONFIG bao quát các mô hình khả dụng để so sánh, gồm ID (cho gọi API) và số tham số, giúp bạn dễ mở rộng sang các mẫu Qwen3 khác trong toàn ứng dụng.

Bước 3: Hàm trợ giúp

Tiếp theo, chúng ta định nghĩa một số hàm backend trợ giúp. Bao gồm ước tính yêu cầu bộ nhớ, gọi API OpenRouter theo thời gian thực và trích văn bản từ PDF tải lên.

def estimate_vram(params_billion, fp16=True, active_params_billion=None):
    if active_params_billion and active_params_billion != params_billion:
        total_params = params_billion * 1e9
        active_params = active_params_billion * 1e9
        size_bytes = 2 if fp16 else 4
        storage_vram = total_params * size_bytes / 1e9
        moe_overhead = active_params * 0.5 / 1e9  
        system_overhead = storage_vram * 0.2  
        total_vram = storage_vram + moe_overhead + system_overhead
    else:
        size_bytes = 2 if fp16 else 4
        num_params = params_billion * 1e9
        base_vram = num_params * size_bytes / 1e9
        total_vram = base_vram * 1.3 
    return round(total_vram, 1)
def query_openrouter(model_id, prompt, max_tokens=2048):
    api_key = "sk-or-v1-xxxxxxxxxxxxxxxxxxxxx" # Add your API Key here
    url = "https://openrouter.ai/api/v1/chat/completions"
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    data = {
        "model": model_id,
        "messages": [{"role": "user", "content": prompt}],
        "max_tokens": max_tokens
    }
    try:
        start = time.time()
        response = requests.post(url, headers=headers, json=data, timeout=180)
        elapsed = time.time() - start
        response.raise_for_status()
        j = response.json()
        output = j["choices"][0]["message"]["content"].strip()
        usage = j.get("usage", {})
        prompt_tokens = usage.get("prompt_tokens", 0)
        completion_tokens = usage.get("completion_tokens", 0)
        tokens_per_sec = (completion_tokens or 0) / elapsed if elapsed > 0 else 0
        return {
            "output": output,
            "latency": elapsed,
            "output_tokens": completion_tokens,
            "tokens_per_sec": tokens_per_sec,
            "prompt_tokens": prompt_tokens
        }
    except Exception as e:
        return {"error": str(e)}
def extract_pdf_text(uploaded_pdf):
    text = ""
    try:
        reader = PyPDF2.PdfReader(uploaded_pdf)
        for page in reader.pages:
            text += page.extract_text() or ""
        return text[:120000]  
    except Exception as e:
        return f"[PDF extract error: {str(e)}]"

Cùng xem vai trò của từng hàm trong quy trình:

  • estimate_vram(): Ước tính VRAM GPU cần để chạy mô hình, xét đến việc mô hình là dày đặc hay MoE. Với MoE, hàm tính cả tham số tổng và tham số hoạt động, cộng thêm overhead cho định tuyến và hệ thống.
  • query_openrouter(): Gửi prompt đến mô hình LLM trên OpenRouter và nhận phản hồi. Đo tổng độ trễ (thời gian gọi API đầu-cuối), trích các chỉ số hữu ích như số token xử lý và tính tốc độ sinh token/giây. 

Lưu ý độ trễ ở đây bao gồm mọi trễ mạng, hàng đợi và phía máy chủ, không chỉ tốc độ suy luận mô hình thuần túy. Do đó, nó phản ánh độ phản hồi đầu-cuối trong thực tế, có thể dao động theo tải API và điều kiện internet.

  • extract_pdf_text(): Cho phép người dùng tải và phân tích PDF làm ngữ cảnh đầu vào cho mô hình. Hàm phân tích PDF bằng PyPDF2, trích văn bản thô tới một ngưỡng an toàn về token cho tài liệu rất dài. Nếu lỗi, hàm trả về thông báo lỗi.

Các hàm trợ giúp này đảm bảo sử dụng bộ nhớ hiệu quả, suy luận đáng tin cậy qua API và trích ngữ cảnh mượt mà, mang lại trải nghiệm liền mạch.

Bước 4: Ứng dụng Streamlit

Với các thành phần lõi đã sẵn sàng, giờ chúng ta xây dựng ứng dụng Streamlit.

Bước 4.1: CSS tùy chỉnh

Bước đầu trong quy trình hướng đến người dùng là thiết kế giao diện và bố cục. Ở đây, chúng ta cấu hình trang Streamlit và chèn CSS tùy chỉnh để có bố cục rõ ràng.

st.set_page_config(page_title="Qwen3-Next QA & Reasoning", layout="wide", page_icon=" ")
st.markdown("""
<style>
    .main-header {
        text-align: center;
        
        
    }
    .metric-card {
        background-
        
        border-radius: 0.5rem;
        border-left: 4px solid #1f77b4;
        
    }
    .output-box {
        background-
        border: 2px solid #e1e5e9;
        border-radius: 0.5rem;
        
        
        box-shadow: 0 2px 4px rgba(0,0,0,0.1);
    }
    .model-header {
        background: linear-gradient(90deg, #1f77b4, #ff7f0e);
        color: white;
        
        border-radius: 0.5rem;
        
        text-align: center;
        font-weight: bold;
    }
</style>
""", unsafe_allow_html=True)
st.markdown('<h1 class="main-header"> QA and Reasoning With Qwen3-Next</h1>', unsafe_allow_html=True)
st.markdown("""
<div style="text-align: center; ">
    <p style="">
        Compare two Qwen3 models side-by-side with real-time performance metrics
    </p>
</div>
""", unsafe_allow_html=True)

Chúng ta dùng tùy chọn cấu hình của Streamlit và CSS tùy chỉnh. Lệnh st.set_page_config đặt tiêu đề trang và bố cục rộng để hiển thị song song. CSS tùy chỉnh được chèn qua st.markdown để định kiểu các thành phần UI chính.

Lớp .main-header căn giữa và tạo màu cho tiêu đề, .metric-card và .output-box làm nổi bật vùng chỉ số và đầu ra, còn .model-header phân tách phản hồi từng mô hình bằng hiệu ứng gradient. Khối st.markdown cuối hiển thị tiêu đề và mô tả ngắn về ứng dụng.

Bước 4.2: Phần nhập liệu

Chúng tôi thiết kế phần nhập liệu với hai lựa chọn trực quan: tải lên một PDF dài làm ngữ cảnh hoặc nhập trực tiếp câu hỏi tùy ý.

st.markdown("### Input")
with st.container():
    col_upload, col_text = st.columns([2, 3])
    with col_upload:
        uploaded_pdf = st.file_uploader(
            "Upload PDF for context", 
            type=["pdf"],
            help="Upload a PDF document to provide context for your question"
        )
    with col_text:
        user_question = st.text_area(
            "Ask a question:", 
            height=100, 
            max_chars=12000,
            placeholder="Enter your question here...",
            help="Ask any question or provide a topic to analyze"
        )

Phần này hiển thị hai cột song song: cột đầu cho phép tải PDF để thêm tài liệu ngữ cảnh, cột thứ hai là vùng nhập văn bản cho câu hỏi/chủ đề. Giao diện cho phép bạn tải PDF, gõ câu hỏi, hoặc kết hợp cả hai làm đầu vào cho bước so sánh mô hình.

Bước 4.3: Chọn mô hình

Phần chọn mô hình cho phép bạn kiểm soát hoàn toàn việc so sánh mô hình Qwen, cũng như độ dài phản hồi. Sau khi thiết lập ngữ cảnh tài liệu, bạn có thể dễ dàng chọn hai mô hình từ danh sách thả xuống cùng với độ dài phản hồi tối đa (tính theo token), thuận tiện để thử nghiệm cả đầu ra ngắn và dài.

context = ""
if uploaded_pdf:
    with st.spinner(" Extracting PDF text..."):
        context = extract_pdf_text(uploaded_pdf)
    st.success(f" PDF loaded: {len(context)//1000}K characters extracted.")
st.markdown("### Model Selection")
model_names = list(MODEL_CONFIG.keys())
col1, col2, col3 = st.columns([2, 2, 1])
with col1:
    model1 = st.selectbox(
        "Model A", 
        model_names, 
        index=0,
        help="Select the first model to compare"
    )
with col2:
    model2 = st.selectbox(
        "Model B", 
        model_names, 
        index=1 if len(model_names) > 1 else 0,
        help="Select the second model to compare"
    )
with col3:
    max_tokens = st.selectbox(
        "Max Tokens",
        [512, 1024, 2048, 4096],
        index=2,  
        help="Maximum length of response (higher = longer responses). Use 2048+ for reasoning questions."
    )

Đoạn mã trên trước tiên trích văn bản từ PDF tải lên bằng hàm trợ giúp. Sau đó hiển thị ba danh sách thả xuống: hai danh sách để chọn các mô hình Qwen (hoặc mô hình khác tùy ứng dụng) để so sánh, và một danh sách để đặt giới hạn token tối đa cho phản hồi.

Lưu ý: Giới hạn token điều khiển độ dài đầu ra tối đa. Với các tác vụ phức tạp hay suy luận nhiều bước, đặt giới hạn cao hơn sẽ giúp mô hình tạo câu trả lời đầy đủ.

Bước 4.4: Gửi yêu cầu

Bước này hiện thực logic so sánh mô hình chính. Khi người dùng nhấp "Submit & Compare Models", ứng dụng xác thực đầu vào, xây dựng prompt có ngữ cảnh và chạy truy vấn song song tới các mô hình đã chọn

st.markdown("---")
col_btn1, col_btn2, col_btn3 = st.columns([1, 2, 1])
with col_btn2:
    if st.button("Submit & Compare Models", type="primary", use_container_width=True):
        if not user_question and not uploaded_pdf:
            st.warning(" Please enter a question or upload a PDF.")
        else:
            if context:
                base_prompt = f"DOCUMENT:\n{context}\n\nQUESTION: {user_question or 'Summarize the above document.'}"
            else:
                base_prompt = user_question
            prompt = f"""Please provide a detailed and thorough response. Think step by step and explain your reasoning clearly.
{base_prompt}
Please provide a comprehensive answer with clear reasoning and examples where appropriate."""           
            st.markdown("### Results")
            col_left, col_right = st.columns(2)
            models_to_process = [(model1, col_left, "Model A"), (model2, col_right, "Model B")]          
            for model_key, col, model_label in models_to_process:
                with col:
                    st.markdown(f'<div class="model-header">{model_label}: {model_key}</div>', unsafe_allow_html=True)                   
                    progress_bar = st.progress(0)
                    status_text = st.empty()                    
                    try:
                        progress_bar.progress(25)
                        status_text.text("Initializing model...")
                        model_info = MODEL_CONFIG[model_key]
                        vram_estimate = estimate_vram(
                            model_info["params_billion"], 
                            active_params_billion=model_info["active_params_billion"]
                        )
                        progress_bar.progress(50)
                        status_text.text("Querying model...")
                        result = query_openrouter(model_info["id"], prompt, max_tokens=max_tokens)                        
                        progress_bar.progress(100)
                        status_text.text("Complete!")
                        if "error" in result:
                            st.error(f"Error: {result['error']}")
                        else:
                            st.markdown(f'''
                            <div class="metric-card">
                                <strong>Performance Metrics</strong><br>
                                <strong>Latency:</strong> {result['latency']:.2f}s<br>
                                <strong>Speed:</strong> {result['tokens_per_sec']:.2f} tokens/sec<br>
                                <strong>Output tokens:</strong> {result['output_tokens']}<br>
                                <strong>Prompt tokens:</strong> {result['prompt_tokens']}<br>
                                <strong>Est. VRAM:</strong> {vram_estimate} GB
                            </div>
                            ''', unsafe_allow_html=True)
                            st.markdown("** Response:**")
                            st.markdown(f'''
                            <div class="output-box">
                                {result["output"] if result["output"] else "<em>No output received</em>"}
                            </div>
                            ''', unsafe_allow_html=True)                
                    except Exception as e:
                        st.error(f" Unexpected error: {str(e)}")                    
                    finally:
                        progress_bar.empty()
                        status_text.empty()            
            st.markdown("---")            

Bộ xử lý gửi yêu cầu tổ chức quy trình đo đạc như sau: 

  • Khi người dùng nhấp "Submit & Compare Models", ứng dụng kiểm tra đã có câu hỏi hoặc PDF hay chưa và cảnh báo nếu thiếu.
  • Sau đó, xây dựng prompt từ ngữ cảnh tài liệu và câu hỏi, kèm hướng dẫn trả lời chi tiết theo từng bước.
  • Khu vực kết quả chia thành hai cột để so sánh trực tiếp đầu ra của hai mô hình.
  • Với mỗi mô hình, ứng dụng hiển thị thanh tiến trình, ước tính VRAM, truy vấn API OpenRouter và cập nhật trạng thái khi xử lý yêu cầu.
  • Sau khi hoàn tất, ứng dụng hiển thị độ trễ, token/giây, số token và VRAM ước tính dưới dạng thẻ chỉ số.

Kiểm thử Qwen3-Next

Để kiểm tra hiệu năng thực tế của Qwen3-Next, tôi đã thử vài thí nghiệm.

Bài test 1: Hỏi đáp ngữ cảnh dài

Để đánh giá khả năng xử lý ngữ cảnh dài của Qwen3-Next, tôi chạy một số thử nghiệm thực hành với sách điện tử Dự án Gutenberg “War and Peace,” một trong những tiểu thuyết dài và phức tạp nhất từng được viết.

Dưới đây là ba trường hợp thử nghiệm cho thấy cách mô hình xử lý ngữ cảnh siêu dài, tránh ảo giác và tạo tóm tắt chất lượng cao.

Theo dõi nhân vật 

Đầu tiên, tôi yêu cầu cả hai mô hình xác định tất cả các nhân vật chính xuất hiện ở cả chương đầu và chương cuối của tiểu thuyết, và mô tả ngắn cách vai trò của họ thay đổi theo thời gian.

Prompt: “Liệt kê tất cả các nhân vật chính xuất hiện ở cả chương đầu và chương cuối của tiểu thuyết. Mô tả ngắn cách vai trò của họ thay đổi theo thời gian.”

Ví dụ 1.1

Câu hỏi này yêu cầu mô hình xử lý toàn bộ văn bản và theo dõi chính xác diễn biến nhân vật. Cả hai mô hình đều phản hồi nhanh, nhưng phản hồi của Qwen3 Next sạch sẽ hơn và bám sát từng chương trong sách hơn.

Kiểm tra ảo giác

Tiếp theo, tôi muốn xem mô hình có phân biệt được nội dung thật với thông tin sai lệch không. Tôi đưa cho cả hai mô hình một cụm từ không xuất hiện trong War and Peace, nhưng nổi tiếng là của một tiểu thuyết khác của Tolstoy.

Prompt: “Tiểu thuyết có chứa câu ‘Tất cả các gia đình hạnh phúc đều giống nhau; mỗi gia đình bất hạnh bất hạnh theo cách riêng của mình’ không? Nếu có, nó xuất hiện ở đâu trong văn bản?”

Ví dụ 1.2

Câu này thực ra đến từ Anna Karenina, không phải War and Peace. Câu trả lời lý tưởng là "Không", thể hiện độ chính xác thực tế cao và ít ảo giác. Ấn tượng là Qwen3-Next trả lời đúng trong khi Qwen3 30B đưa ra một cụm từ sai.

Tóm tắt

Cuối cùng, tôi kiểm tra khả năng tóm tắt bằng cách yêu cầu cả hai mô hình tóm tắt tiểu thuyết trong 300 từ.

Prompt: “Tóm tắt tiểu thuyết ‘War and Peace’ trong 300 từ, tập trung vào hành trình cá nhân của Pierre Bezukhov.”

Ví dụ 1.3

Dù đánh giá tóm tắt phần nào mang tính chủ quan, tôi thấy đầu ra của Qwen3-Next có cấu trúc hơn, mạch lạc và sâu sắc hơn. Bản tóm tắt vừa súc tích vừa nêu bật được tiến trình phát triển của nhân vật Pierre một cách rõ ràng.

Ví dụ 2: Suy luận nhiều bước và logic

Để kiểm tra khả năng suy luận nâng cao, tôi đặt ra các câu đố logic nhiều bước—những tác vụ không chỉ cần trí nhớ mà còn cần suy luận tuần tự và loại trừ cẩn trọng.

Câu đố sắp xếp chỗ ngồi

Đầu tiên tôi đưa cho mô hình một câu đố sắp xếp chỗ ngồi:

Prompt: “Tại tiệc cưới có năm khách Colin, Emily, Kate, Fred và Irene, chưa biết ngồi đâu. Họ hỏi mẹ cô dâu, bà nói: \"Theo tôi nhớ, Colin không ngồi cạnh Kate, Emily không ngồi cạnh Fred hoặc Kate. Cả Kate lẫn Emily đều không ngồi cạnh Irene. Và Fred nên ngồi bên trái Irene.\" Nhìn từ phía đối diện bàn, bạn có thể sắp xếp đúng vị trí của khách từ trái sang phải không?

Hãy giải thích lập luận của bạn theo từng bước.”

Ví dụ 2.1

Câu đố yêu cầu phân tích nhiều ràng buộc và suy ra thứ tự ngồi duy nhất có thể:

  • Đáp án chuẩn: Emily, Colin, Irene, Fred, Kate
  • Đầu ra Qwen3-Next: Kate, Fred, Irene, Colin, Emily (gần đúng, nhưng đảo ngược)
  • Đầu ra Qwen3-30B: Không tìm được câu trả lời hợp lệ

Dù không mô hình nào đưa ra chính xác chuỗi đúng, Qwen3-Next rất gần, chỉ bị đảo ngược thứ tự, trong khi mẫu 30B không giải được. Điều này cho thấy Qwen3-Next có khả năng suy luận nhiều bước, dù vẫn còn một số trường hợp biên thách thức.

Loại suy diễn 

Tiếp theo, tôi kiểm tra bằng một câu đố suy luận lấy cảm hứng từ “Zebra puzzle.”

Prompt: “Bốn người (Lisa, Mike, Nora và Omar) mỗi người mua một loại trái cây khác nhau (táo, chuối, anh đào, chà là) và lái một hãng xe khác nhau (Ford, Honda, Kia, Mazda).

  • Lisa không mua chuối.
  • Người lái Ford mua anh đào.
  • Mike lái Honda.
  • Nora mua táo và không lái Mazda.
  • Người lái Kia mua chà là.
  • Omar không lái Ford.

Ai mua loại trái cây nào và lái xe gì? Trình bày các bước lập luận.”

Ví dụ 2.2

Bài toán này cố ý không thể giải với các ràng buộc đã cho, nhưng đây là kết quả mô hình trả về:

  • Đầu ra Qwen3-Next: Nhận diện đúng rằng không tồn tại cách gán hợp lệ.
  • Đầu ra Qwen3-30B: Bị kẹt trong vòng lặp logic và không kết luận được trong số token đầu ra cho phép.

Ví dụ này cho thấy khả năng suy luận loại trừ và nhận biết khi không có lời giải của Qwen3-Next.

Kết luận

Hướng dẫn này cho thấy cách dùng Qwen3-Next-80B-A3B cho tác vụ hỏi đáp và suy luận, đồng thời so sánh với Qwen3-30B-A3B trong ứng dụng Streamlit đặt cạnh nhau. Kết quả làm nổi bật thế mạnh của Qwen3-Next trong xử lý tài liệu siêu dài, cho suy luận nhanh và duy trì chất lượng đầu ra ngay cả với các bài toán suy luận phức tạp.

Aashi Dutt

Tác giả

Aashi Dutt

Tôi là Chuyên gia Google Developers trong lĩnh vực ML (Gen AI), Chuyên gia Kaggle 3x và Đại sứ Women Techmakers với hơn 3 năm kinh nghiệm trong ngành công nghệ. Tôi đồng sáng lập một startup công nghệ y tế vào năm 2020 và hiện đang theo học thạc sĩ khoa học máy tính tại Georgia Tech, chuyên sâu về học máy.

Chủ đề

Liên quan