Models trong dãy Qwen3.5 sử dụng định dạng ChatML để xử lý cuộc trò chuyện và điều khiển quá trình tạo nội dung thông qua các token kiểm soát đặc biệt. Khi tích hợp Qwen3.5 vào Ollama, bạn cần tạo một tệp cấu hình gọi là Modelfile, trong đó trường TEMPLATE đóng vai trò quan trọng trong việc áp dụng định dạng ChatML.
Phân tích cốt lõi của định dạng ChatML
Định dạng ChatML dựa trên hai token kiểm soát là <|im_start|> và <|im_end|> để xác định rõ vai trò và nội dung của từng vòng hội thoại:
<|im_start|>: Đánh dấu sự bắt đầu của một vòng hội thoại, theo sau là tên vai trò.<|im_end|>: Đánh dấu sự kết thúc của một vòng hội thoại.<|endoftext|>: Thường dùng để đánh dấu kết thúc toàn bộ chuỗi hội thoại.
Bên cạnh đó, Qwen3.5 còn thêm vào các thẻ đặc biệt cho việc gọi công cụ và suy nghĩ sâu hơn:
- ``: Dùng để bọc thông tin JSON khi gọi công cụ.
- ``: Dùng để bọc quá trình suy luận nội bộ của mô hình, hỗ trợ chế độ suy nghĩ.
Mẫu Modelfile tiêu chuẩn cho Ollama
Dưới đây là mẫu Modelfile được thiết kế riêng cho Ollama với đầy đủ tính năng của Qwen3.5, bao gồm cả khả năng xử lý hội thoại, gọi công cụ và chế độ suy nghĩ.
Bạn có thể lưu đoạn mã sau thành một tệp tên là Modelfile (không có phần mở rộng), rồi dùng lệnh ollama create <tên_mô_hình> -f ./Modelfile để xây dựng mô hình Qwen3.5 tùy chỉnh của mình.
FROM ./your_qwen3.5_model.gguf
# Thiết lập kích thước ngữ cảnh, điều chỉnh theo dung lượng RAM
# Ví dụ: với 16GB RAM, nên đặt là 8192 hoặc 16384
PARAMETER num_ctx 16384
# Cấu hình tham số sinh nội dung
PARAMETER temperature 0.7
PARAMETER top_p 0.95
PARAMETER repeat_penalty 1.1
# Định nghĩa prompt hệ thống
SYSTEM """Bạn là một trợ lý AI tên là Qwen3.5, được phát triển bởi Alibaba. Bạn có khả năng suy luận logic, lập trình và giao tiếp đa vòng."""
# Mẫu ChatML dành riêng cho Qwen3.5
TEMPLATE """
{{- $lastUserIdx := -1 }}
{{- range $idx, $msg := .Messages }}
{{- if eq $msg.Role "user" }}{{ $lastUserIdx = $idx }}{{ end }}
{{- end }}
{{- if or .System .Tools }}<|im_start|>system
{{ if .System }}{{ .System }}{{ end }}
{{ if .Tools }}
# Công cụ
Bạn có thể gọi một hoặc nhiều hàm để hỗ trợ câu hỏi của người dùng.
Bạn sẽ nhận được các định nghĩa hàm trong thẻ XML:
Đối với mỗi lời gọi hàm, hãy trả về một đối tượng JSON chứa tên hàm và đối số trong thẻ XML:
{{- end }}
<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 }}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}
{{- if and $.IsThinkSet (eq $i $lastUserIdx) }}
{{- if $.Think }}
{{ " " }}/think
{{- else }}
{{ " " }}/no_think
{{- end }}
{{- end }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if (and $.IsThinkSet (and .Thinking (or $last (gt $i $lastUserIdx)))) }}
<think>{{ .Thinking }}</think>
{{ end }}
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
{{ .Content }}
<|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ if and $.IsThinkSet (not $.Think) }}
<think>
</think>
{{ end }}
{{ end }}
{{- end }}
"""
Giải thích các trường chính trong mẫu
FROM: Chỉ định đường dẫn tuyệt đối đến tệp mô hình Qwen3.5 ở định dạng GGUF trên máy.PARAMETER: Cài đặt các thông số suy luận nhưtemperature(tính sáng tạo),top_p(lấy mẫu nhân), vàrepeat_penalty(phạt lặp lại).SYSTEM: Định nghĩa hành vi và vai trò tổng thể của mô hình.TEMPLATE: Phần cốt lõi nhất, sử dụng cú pháp mẫu Go để chuyển đổi cấu trúc tin nhắn của Ollama thành định dạng mà Qwen3.5 hiểu được.
- Xử lý vai trò: Tự động nhận diện các vai trò
user,assistant,system, vàtool, đồng thời bọc chúng bằng các thẻ<|im_start|>và<|im_end|>. - Gọi công cụ: Nếu có danh sách công cụ, sẽ tự động chèn định nghĩa và hướng dẫn sử dụng vào tin nhắn hệ thống. Khi mô hình trả về lời gọi công cụ, nó sẽ được bọc trong thẻ ``.
- Chế độ suy nghĩ: Mẫu cũng kiểm tra biến
$.Thinkvà$.Thinkingđể xử lý đúng thẻ<think>, giúp tách nội dung suy nghĩ khỏi câu trả lời cuối cùng.
Cách sử dụng
- Chuẩn bị mô hình: Tải tệp mô hình Qwen3.5 ở định dạng GGUF từ các nền tảng như ModelScope.
- Tạo tệp: Lưu nội dung mẫu trên vào một tệp có tên
Modelfile, và sửa đổi đường dẫn trong trườngFROMthành đường dẫn thực tế đến tệp mô hình của bạn. - Tạo mô hình: Trong terminal, di chuyển đến thư mục chứa
Modelfilevà chạy lệnh: ``` ollama create qwen3.5-custom -f ./Modelfile
4. **Chạy mô hình**: Sau khi tạo thành công, bạn có thể chạy mô hình tùy chỉnh: ```
ollama run qwen3.5-custom