Quay lại blog

AI cho người mớiHướng dẫn

System prompt và temperature: chúng làm gì và cách đặt chúng

System message và temperature làm gì trong một request tương thích OpenAI, kèm ví dụ Python và curl bạn có thể gửi tới một mô hình CheapTokens.

Bởi CheapTokens TeamĐã xuất bản Đã cập nhật 7 phút đọc

Sơ đồ request chat: tin nhắn system với các quy tắc, tin nhắn user với nhiệm vụ, và một núm điều chỉnh temperature
Trên trang này
  1. System prompt là gì?
  2. Cách viết một system prompt hữu ích
  3. Temperature làm gì?
  4. Gửi một request với cả hai
  5. Xem temperature hoạt động
  6. Nên thử trên mô hình nào
  7. Nếu không hoạt động
  8. Bước tiếp theo

System prompt là một tin nhắn có role system cho mô hình biết cách hành xử trong mọi câu trả lời: nó là ai, dùng định dạng nào, cần tránh điều gì. Temperature là một con số, thường nằm trong khoảng 0 đến 2 (phạm vi tùy thuộc vào mô hình), quy định mức độ biến đổi của cách diễn đạt: giá trị thấp cho câu trả lời tập trung, lặp lại được; giá trị cao cho câu trả lời đa dạng hơn. Cả hai đều nằm trong cùng một request Chat Completions mà bạn gửi tới https://api.cheaptokens.dev/v1.

Dưới đây: mỗi thứ là gì, nên bắt đầu với giá trị nào, và một request bạn có thể chạy bằng Python hoặc curl. Nếu bạn chưa gửi request nào, hãy bắt đầu với request API đầu tiên của bạn với CheapTokens.

System prompt là gì?#

Một request chat là một danh sách các tin nhắn, và mỗi tin nhắn có một role. Tài liệu tham chiếu Chat Completions liệt kê bốn role: system, user, assistant và tool (tài liệu tham chiếu DeepSeek API, kiểm tra ngày 22 tháng 10 năm 2026). Với request đầu tiên bạn cần ba role:

  • system — chỉ dẫn thường trực từ bạn, nhà phát triển. Mô hình coi chúng là luật của cuộc hội thoại.
  • user — điều người dùng hỏi hoặc cung cấp trong lượt này.
  • assistant — các câu trả lời trước đó của mô hình. Bạn tự thêm chúng khi tiếp tục một cuộc hội thoại.

Một tin nhắn system cần role được đặt thành system và content là một chuỗi. Trường name là tùy chọn.

json
"messages": [
  {"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
  {"role": "user", "content": "Send me the report by tonight or I will be upset."}
]

Tin nhắn system đứng đầu. Tin nhắn user là nhiệm vụ thực tế.

Cách viết một system prompt hữu ích#

  • Nói mô hình đang làm gì trong một câu: "Bạn là biên tập viên", "Bạn phân loại ticket hỗ trợ".
  • Nêu rõ định dạng đầu ra: "Chỉ trả về văn bản đã viết lại", "Trả lời trong hai câu", "Trả lời bằng JSON hợp lệ".
  • Đưa ra quy tắc bằng những câu ngắn, trực tiếp. Vài dòng rõ ràng hiệu quả hơn một đoạn dài.
  • Giữ ngắn gọn. System prompt được gửi kèm mọi request và được tính là token đầu vào, nên một prompt dài sẽ bị tính phí mỗi lần. Cách tính phí đầu vào và đầu ra có trong token đầu vào so với token đầu ra.

Temperature làm gì?#

Mô hình chọn mỗi token tiếp theo từ một tập các ứng viên có khả năng. Temperature kiểm soát mức độ bám sát vào ứng viên có khả năng nhất. Theo tài liệu tham chiếu DeepSeek API (kiểm tra ngày 22 tháng 10 năm 2026), temperature nhận giá trị từ 0 đến 2 với mặc định là 1: giá trị cao hơn cho đầu ra ngẫu nhiên hơn, giá trị thấp hơn cho đầu ra tập trung, mang tính xác định hơn. Phạm vi khác nhau giữa các mô hình: DeepSeek ghi 0 đến 2, Z.ai ghi 0 đến 1 cho GLM-5.3 (cả hai đều kiểm tra ngày 22 tháng 10 năm 2026), nên giá trị từ 0 đến 1 là an toàn trên cả hai. Hãy kiểm tra phạm vi cho mô hình của bạn trong tài liệu.

Các điểm khởi đầu phù hợp với hầu hết nhiệm vụ. Đây là quy tắc kinh nghiệm, không phải bảo đảm:

Nhiệm vụ Bắt đầu với
Trích xuất, phân loại, code, định dạng nghiêm ngặt 0 đến 0.3
Hỏi đáp, tóm tắt, viết lại 0.3 đến 0.7
Động não, đặt tên, văn bản sáng tạo 0.8 đến 1

Ba điều cần biết:

  1. Temperature thấp thì lặp lại được nhiều hơn, không phải giống hệt. Đừng dựa vào câu trả lời giống nhau từng byte.
  2. Thay đổi temperature hoặc top_p, không thay đổi cả hai. Đây là khuyến nghị của DeepSeek; top_p là tham số lấy mẫu thứ hai với mặc định là 1. Hãy để yên nó trong khi bạn đang học.
  3. Một số chế độ bỏ qua temperature. Tài liệu tham chiếu DeepSeek nói temperature không có tác dụng trong chế độ thinking, và top_p được cố định ở 1.0 trong chế độ non-thinking. Nếu bạn thay đổi một giá trị mà không thấy khác biệt, hãy kiểm tra chế độ của mô hình trước.

Gửi một request với cả hai#

Đặt key làm biến môi trường để nó không bao giờ lọt vào code (xem API key là gì và cách lưu trữ an toàn). Lấy id mô hình chính xác từ tài liệu CheapTokens: các nhà cung cấp khác nhau đặt tên cùng một mô hình khác nhau. Ví dụ này dùng MiniMax-M2.7.

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[
        {"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
        {"role": "user", "content": "Send me the report by tonight or I will be upset."},
    ],
    temperature=0.3,
    max_tokens=1000,
)

print(response.choices[0].message.content)
print(response.choices[0].finish_reason)

Cùng request đó với curl:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMaxAI/MiniMax-M2.7",
    "messages": [
      {"role": "system", "content": "You are an editor. Rewrite the user'\''s text to be shorter and friendlier. Return only the rewritten text."},
      {"role": "user", "content": "Send me the report by tonight or I will be upset."}
    ],
    "temperature": 0.3,
    "max_tokens": 1000
  }'

Bạn nên thấy: một phiên bản ngắn gọn, thân thiện hơn của câu đó và stop là finish_reason. Nếu finish_reason là length, câu trả lời đã chạm giới hạn max_tokens; xem vì sao câu trả lời AI dừng giữa câu.

Xem temperature hoạt động#

Cách tốt nhất để hiểu temperature là hỏi cùng một câu nhiều lần. Vòng lặp này gửi một request ngắn ba lần ở 0 và ba lần ở 1, dùng client từ ví dụ trên:

python
for temp in (0, 1):
    print("temperature", temp)
    for _ in range(3):
        r = client.chat.completions.create(
            model="MiniMaxAI/MiniMax-M2.7",
            messages=[
                {"role": "system", "content": "Answer with one word."},
                {"role": "user", "content": "Name a fruit."},
            ],
            temperature=temp,
            max_tokens=500,
        )
        print(" ", r.choices[0].message.content)

Ở 0, ba dòng thường là cùng một từ; ở 1, bạn thường sẽ thấy nhiều từ khác nhau hơn. Các mô hình suy luận trước khi trả lời có thể dùng một phần max_tokens cho suy luận đó, nên hãy để giới hạn rộng rãi ngay cả với câu trả lời một từ. Sau đó chỉ thay đổi system prompt (ví dụ: "Trả lời bằng một từ, bằng tiếng Pháp") và chạy lại: các quy tắc trong tin nhắn system áp dụng ở mọi temperature.

Những thử nghiệm như vậy rất nhỏ. Để có ý niệm sơ bộ, đây là chi phí của 100 request với khoảng 120 token đầu vào và 80 token đầu ra mỗi request (một khối lượng công việc ví dụ; số token phụ thuộc vào prompt của bạn):

Mô hình Mỗi yêu cầu 100 yêu cầu OpenRouter, 100 yêu cầu
GLM-5.3-Flash $0.0000056 $0.00056 $0.0011
DeepSeek-V4-Flash $0.0000098 $0.00098 $0.0018
MiniMax-M2.7 $0.000018 $0.0018 $0.0132

120 token đầu vào và 80 token đầu ra mỗi yêu cầu. Giá trên 1 triệu token là giá hiện hành và thay đổi cùng với biểu phí của chúng tôi; cột OpenRouter hiển thị giá tham chiếu cho cùng khối lượng công việc.

Nên thử trên mô hình nào#

  • MiniMax-M2.7 là lựa chọn đầu tiên tốt cho nhiều request thử nghiệm ngắn, và bạn có thể dùng lại cùng system prompt trên đó để so sánh câu trả lời: ngữ cảnh 180K, tối đa 8.192 token đầu ra, rẻ hơn giá tham chiếu của OpenRouter ở cả hai phía. Giá hiện tại: đầu vào $0.05, đầu ra $0.15 trên 1M token.

Một số dư bao trùm tất cả, nên chuyển mô hình chỉ là thay đổi một dòng model. Tất cả giá hiện tại có trên trang giá.

Nếu không hoạt động#

  • 401 hoặc lỗi xác thực: key bị thiếu, gõ sai hoặc biến môi trường chưa được đặt trong terminal này. Kiểm tra echo $CHEAPTOKENS_API_KEY.
  • Không tìm thấy mô hình: sao chép id mô hình từ tài liệu chính xác, bao gồm cả tiền tố.
  • Lỗi về tham số không hợp lệ: giữ temperature trong phạm vi mô hình của bạn hỗ trợ (0 đến 1 là an toàn) và truyền số, không phải chuỗi.
  • Mô hình bỏ qua quy tắc của bạn: biến nó thành một câu ngắn, trực tiếp, chuyển lên đầu tin nhắn system, và lặp lại chính xác định dạng bạn muốn.
  • Thay đổi temperature không thay đổi gì: có thể bạn đang dùng chế độ bỏ qua nó (xem ở trên), hoặc câu trả lời bị ràng buộc quá chặt ("một từ", "JSON hợp lệ") đến mức ít có biến thể.
  • Câu trả lời bị cắt: tăng max_tokens; hướng dẫn max_tokens giải thích cách làm.

Bước tiếp theo#

Đặt một quy tắc rõ ràng trong tin nhắn system, chọn một temperature từ bảng, và chạy vòng lặp ở trên trên nhiệm vụ của riêng bạn. Khi kết quả đúng như bạn muốn, hãy giữ system prompt ngắn gọn và dùng lại. Lấy key và kiểm tra giá hiện tại trong tài liệu.