localaiforum
Đăng nhập
Hướng dẫn › Làm việc với mô hình

Prompt & chat template

Mọi tin nhắn bạn gửi được bọc trong markup trước khi mô hình kịp thấy. Chat template biến các tin nhắn gắn-vai của bạn thành một chuỗi token phẳng duy nhất, và mô hình được huấn luyện để đọc đúng chuỗi đó — không phải các đối tượng API gọn gàng của bạn. Phong bức đúng thì mô hình instruct 3B cư xử tử tế; sai thì mô hình 70B nhả súp chữ.

Phong bức: một cuộc chat, ba phương ngữ

API của bạn lộ các vai trò: system, user, assistant. Mô hình thấy các token đặc biệt. Cùng một cuộc hội thoại hai tin nhắn, dựng theo ba cách.

ChatML — các mô hình họ Qwen và bản finetune dòng dõi Hermes:

<|im_start|>system
You are a concise assistant.<|im_end|>
<|im_start|>user
Summarize this file.<|im_end|>
<|im_start|>assistant

Kiểu Llama 2 — dấu system lồng trong chỉ dẫn đầu tiên:

<s>[INST] <<SYS>>You are a concise assistant.<</SYS>>

Summarize this file. [/INST] The file implements a tokenizer... </s>

Kiểu Gemma — không có vai trò system; chỉ dẫn cưỡi trên lượt user đầu tiên, và trợ lý được gọi là model:

<bos><start_of_turn>user
You are a concise assistant.

Summarize this file.<end_of_turn>
<start_of_turn>model

Cùng một hội thoại, ba phong bức không tương thích. Mô hình huấn luyện trên ChatML không "tự ngẫm ra" markup Llama — nó coi markup lạc lối là văn bản thường và đáp lại theo kiểu đó.

Engine đọc template từ tệp mô hình

Metadata GGUF nhúng một chat_template (đoạn Jinja). llama.cpp, Ollama, LM Studio và Open WebUI đọc nó và dựng tin nhắn của bạn tự động, đó là lý do chat chạy ngay khi mở hộp với một GGUF tử tế. Hai bẫy kinh điển: endpoint completion thô (/completion) bỏ qua template và đưa mô hình văn bản trần — dùng endpoint chat; và một GGUF có thể xuất xưởng thiếu hoặc sai template — truyền tường minh một cái (--chat-template trong llama.cpp, Modelfile trong Ollama) hoặc lấy một bản lượng hóa khác của cùng mô hình từ nguồn làm đúng.

Triệu chứng của template sai

  • Trả lời rỗng tức thì — prompt đã dựng trông như hội thoại hoàn tất, nên mô hình nhả EOS ngay lập tức.
  • Rò vai trò — đầu ra đọc như user: sure thing! assistant: — mô hình bắt chước phong bức thay vì trả lời.
  • Rác — súp chữ kiểu mô-hình-base từ một mô hình vẫn chat ngon một giờ trước, vì bạn đổi tệp mà không đổi template.

Để chẩn đoán, đổ prompt đã dựng — server llama.cpp ghi nó chi tiết, OLLAMA_DEBUG=1 hiện nó trong Ollama. Rồi sửa template hoặc tệp: khắc phục sự cố.

System prompt và thứ tự ưu tiên

Vai trò system đặt hành vi bền: nhân cách, ngôn ngữ, định dạng đầu ra, tư thế an toàn. Nó là ngữ cảnh, không phải firmware — một hội thoại dài có thể cuốn trôi nó, và mô hình nhỏ trọng số nó ít hơn bạn mong. Hai quy tắc thực dụng: đặt mọi thứ chịu tải (ngôn ngữ, hợp đồng định dạng, ràng buộc cứng) vào system prompt và nhắc lại trong tin nhắn user cuối; chỉ dẫn ở gần điểm sinh văn bản nhất là thắng.

Zero-shot vs few-shot

Zero-shot hỏi; few-shot chỉ tay. Trích xuất các trường có cấu trúc từ báo cáo lỗi bằng mô hình 3B, zero-shot — "Extract the title, component, and severity as JSON" — cho JSON hợp lệ, khóa nhất quán khoảng hai phần ba thời gian, với tên khóa trôi dạt (severity lượt này, priority lượt kia).

Few-shot: cùng mô hình, hai ví dụ làm sẵn, báo cáo thứ ba bỏ trống:

Report: "Login button does nothing on Safari 17."
{"title": "Login button unresponsive", "component": "auth", "severity": "medium"}

Report: "App crashes when uploading 4K video."
{"title": "Crash on 4K upload", "component": "upload", "severity": "high"}

Report: "Dark mode makes settings text unreadable."

Các ví dụ mang hợp đồng định dạng, nên bộ lấy mẫu chọn nội dung thay vì phát minh schema. Trên hạng tác vụ này, tỉ lệ hỏng định dạng thường rơi từ ~30% xuống vài phần trăm. Hai ba ví dụ là khủy của đường cong; qua đó bạn trả token ngữ cảnh. Với schema nghiêm ngặt, bỏ hẳn trò đoán: đầu ra có cấu trúc.

Những khuôn mẫu sống sót trên mô hình nhỏ

Khuôn mẫu Vì sao nó hiệu quả
Một tác vụ mỗi prompt Các tác vụ giành attention; kẻ thua bị bỏ rơi
Định dạng đầu ra tường minh ("JSON với các khóa a, b, c") Biến định dạng thành lựa chọn gần-tất-định
Các bước đánh số ("1) định vị 2) giải thích 3) vá") Chuỗi ở trên ray thay vì lang thang
Ví dụ hơn mô tả Mô hình bắt chước giỏi hơn vâng lời văn xuôi
Chỉ dẫn meta ngắn Mỗi quy tắc thêm pha loãng mọi quy tắc khác

Giữa ngữ cảnh là nơi chỉ dẫn chết

Attention mạnh nhất ở đầu và cuối prompt — hiệu ứng "lost in the middle", ổn định across các họ mô hình. Bố trí thực dụng: mục tiêu và hợp đồng định dạng trên cùng, tài liệu cần xử lý dưới cùng, và với tài liệu dài nhắc lại chỉ dẫn một dòng sau phần tải. Vị trí chịu tải ngang nội dung — và mỗi lượt ngữ cảnh thêm tốn bộ nhớ: KV cache.

Chuỗi dừng (stop sequence)

Việc sinh kết thúc khi mô hình nhả token EOS của nó — template định nghĩa đó là token nào. Chuỗi dừng thêm (tham số stop trên server llama.cpp và các API tương thích OpenAI) cắt tại một chuỗi thay vào đó: hữu dụng khi mô hình lắm lời bắt đầu viết lượt user kế tiếp của bạn. Chọn các chuỗi dừng chỉ có thể nghĩa "hết lượt" (\n<|im_start|> trên mô hình ChatML), không bao giờ chuỗi xuất hiện bên trong câu trả lời chính đáng — một xuống dòng trần sẽ cắt cụt code nhiều dòng giữa khối.

Ngắn gọn thắng dài dòng dưới ~7B

Mô hình instruct nhỏ làm theo một chỉ dẫn 40 từ tốt hơn một bản tiêu chuẩn 400 từ: attention hạn chế của chúng trải trên bất cứ gì bạn đưa. Cấu trúc và ví dụ thay thế quy tắc văn xuôi. Để prompt kiểu tiểu luận cho mô hình to; chỉ chúng đọc từng dòng.

Mẫu đoạn dùng lại được

Trích xuất:

Extract from the text below: person names, dates, money amounts.
Return a JSON array, one object per item, keys: name, date, amount.
No prose before or after the JSON.
Text: {text}

Tóm tắt:

Summarize in exactly 3 bullet points, each under 15 words,
for someone who skipped the meeting. Most important decision first.
Text: {text}

Xem xét mã:

Review the diff below. List at most 5 findings, ordered by severity.
Format each as: [severity] file:line — problem — suggested fix.
Skip praise and summary. Diff: {diff}

Liên quan: token · đầu ra có cấu trúc · tham số engine · khắc phục sự cố