Temperature là một tham số cấu hình (hyperparameter) dùng để điều chỉnh độ ngẫu nhiên của phản hồi từ mô hình ngôn ngữ lớn (LLM).
Nói cách khác, nó kiểm soát mức độ "mạo hiểm" của mô hình khi chọn từ tiếp theo trong một chuỗi văn bản.
Cơ chế đơn giản hơn nhiều so với cái tên nghe có vẻ khoa học của nó: temperature thấp (tiệm cận 0) giúp mô hình chạy ổn định, nhất quán và bám sát dữ liệu, còn temperature cao (thường từ 0.7 đến 1.0 hoặc hơn) khiến mô hình "bay bổng" và đa dạng hơn, nhưng kèm theo rủi ro lớn về sai lệch thông tin hoặc những đoạn nội dung vô nghĩa.
Tất cả dựa trên tính chất tự hồi quy (auto-regressive) của LLM: mô hình dự đoán token tiếp theo dựa trên xác suất có điều kiện từ ngữ cảnh đã có. LLM không thực sự "hiểu" ngôn ngữ; nó tính toán bản đồ xác suất cho toàn bộ tập từ vựng rồi chọn ra token dựa trên đúng cấu hình mà bạn thiết lập.

Temperature là gì?
Chỗ này hay bị hiểu nhầm nhất: temperature không nằm trong kiến trúc mô hình ở giai đoạn huấn luyện (training). Nó là tham số được áp dụng trong quá trình giải mã (decoding) tại thời điểm suy luận (inference), tức là bạn vặn nó sau khi mô hình đã học xong chứ không phải trong lúc mô hình đang học.
Khi nhận được một câu lệnh, LLM không trả về một từ duy nhất ngay lập tức. Thay vào đó, nó dựng ra một bản đồ xác suất cho toàn bộ tập từ vựng (vocabulary): với một ngữ cảnh nhất định, mô hình có thể tính xác suất cho các từ tiếp theo là "horses" (0.7), "zebras" (0.2) và "unicorns" (0.1).
Temperature là núm điều tiết nằm trong hàm Softmax, tức là hàm số cuối cùng dùng để chuyển các con số thô (logits) từ mô hình thành xác suất cụ thể. Bằng cách thay đổi temperature, bạn can thiệp thẳng vào chuyện mô hình sẽ ưu tiên lựa chọn có xác suất cao nhất hay sẽ mở đường cho các lựa chọn ít phổ biến hơn.
Temperature làm gì với phân phối xác suất?
Hàm Softmax khi kết hợp với temperature (T) được tính theo công thức: P_i = exp(z_i/T) / Σ exp(z_j/T), trong đó z_i là các logit đầu ra từ mô hình. Việc thay đổi T sẽ làm phẳng hoặc làm dốc đường cong xác suất bằng cách tỷ lệ hóa các logit trước khi lấy số mũ.

- Trạng thái "nóng" (temperature cao): Khi
T > 1, sự chênh lệch giữa các logit bị thu hẹp lại. Điều này làm phẳng phân phối xác suất, khiến các lựa chọn vốn có xác suất thấp (như "unicorns" 0.1) được tăng cơ hội xuất hiện. Nó tạo ra sự đa dạng nhưng làm tăng entropy (độ hỗn loạn của phân phối xác suất), nên mô hình dễ mất logic. - Trạng thái "lạnh" (temperature thấp): Khi
T < 1, temperature làm tăng khoảng cách giữa các logit. Đường cong xác suất trở nên dốc hơn, khiến mô hình tập trung tối đa vào lựa chọn có xác suất cao nhất ("horses"). Kết quả trả về nhất quán đến mức nhàm chán, mà nhàm chán lại đúng là thứ bạn cần khi làm việc với dữ liệu.
Dưới đây là ví dụ về lệnh gọi API (theo định dạng cURL của Azure OpenAI) cho một mô hình không suy luận như gpt-4o:
curl -X POST "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "Trích xuất các thực thể từ đoạn văn bản sau."}
],
"temperature": 0.1
}'Ở ví dụ trên, tôi đặt temperature ở mức 0.1 để mô hình bám sát dữ liệu gốc và không tự ý thêm thắt thông tin.
Temperature bằng 0 có nghĩa là gì?
Khi bạn đặt temperature bằng 0, mô hình chuyển sang chế độ "greedy search" (tìm kiếm tham lam). Về mặt kỹ thuật, mô hình không còn lấy mẫu (sampling) nữa mà chỉ thực hiện hàm argmax để chọn token có xác suất cao nhất tại mỗi bước dự đoán. Đây là một quy ước của tầng API hơn là một phép tính, vì công thức Softmax không cho phép chia cho 0, nên hệ thống bỏ qua hẳn bước lấy mẫu.

Ưu điểm của chế độ này là tính tái lập (reproducibility) cao. Nếu bạn gửi cùng một prompt, kết quả thường sẽ giống hệt nhau, rất hợp với các tác vụ cần độ chính xác tuyệt đối như giải toán hoặc viết code. Chữ "thường" ở đây là có chủ ý, vì trên hạ tầng dùng chung, cùng một cấu hình vẫn có thể cho ra kết quả lệch nhau.
Tuy nhiên, cái giá phải trả là hiện tượng lặp lại (repetition). Việc chỉ chọn những từ an toàn nhất đôi khi khiến mô hình rơi vào vòng lặp: một chuỗi token có độ tự tin cao tự củng cố chính nó, và mô hình không còn đủ entropy để thoát ra. Cũng lưu ý rằng đặt temperature bằng 0 khác hẳn với 0.1: ở mức 0.1, mô hình vẫn lấy mẫu ngẫu nhiên từ phân phối đã được làm dốc, trong khi ở mức 0, khả năng ngẫu nhiên bị triệt tiêu hoàn toàn.
Temperature, Top-P và Top-K khác nhau ra sao?
Dù cùng mục tiêu điều chỉnh phản hồi, ba tham số này can thiệp vào các giai đoạn khác nhau của quá trình giải mã.

Top-K
Tham số này giới hạn số lượng ứng viên cố định cho mỗi bước chọn từ. Nếu K=50, mô hình chỉ xem xét 50 token có xác suất cao nhất và loại bỏ hoàn toàn phần còn lại.
Top-P (Nucleus Sampling)
Thay vì chọn một số lượng từ cố định, Top-P chọn một tập hợp các từ có tổng xác suất tích lũy đạt đến giá trị P (ví dụ P=0.9). Cách này linh hoạt hơn Top-K vì nó tự động thu hẹp hoặc mở rộng số lượng ứng viên dựa trên độ tự tin của mô hình trong từng ngữ cảnh cụ thể.
Mối quan hệ tổng thể
Thứ tự thực hiện chuẩn là: temperature tác động làm thay đổi giá trị xác suất gốc của toàn bộ tập từ vựng trước, sau đó Top-K rồi Top-P mới thực hiện bộ lọc để cắt tỉa các ứng viên không phù hợp, trước khi mô hình thực hiện lấy mẫu cuối cùng. Vì hai nhóm tham số này làm hai việc khác nhau (một bên tỷ lệ hóa lại toàn bộ phân phối, một bên cắt bỏ phần đuôi) nên trong phần lớn trường hợp bạn chỉ nên chỉnh một bên và để bên còn lại ở giá trị mặc định. Vặn cả hai cùng lúc thì khi kết quả đi lệch, bạn không còn biết phải đổ tại bên nào.
Temperature có phải là nút sáng tạo không?
Cần phân biệt giữa "độ ngẫu nhiên" và "sự sáng tạo". Sự sáng tạo yêu cầu sự cân bằng giữa tính mới (novelty) và tính điển hình (typicality), tức là vừa bất ngờ, vừa vẫn đúng với thể loại và ràng buộc của đề bài.

Tăng temperature chỉ đơn giản là làm giảm tính điển hình của phản hồi. Khi giá trị này quá cao, mô hình chọn bừa các token có xác suất thấp, dẫn đến hiện tượng "gibberish": văn bản vô nghĩa, mất liên kết logic. Đã có người đo thử tương quan giữa temperature và các tiêu chí sáng tạo (tài liệu ở cuối bài): quan hệ giữa temperature và tính mới chỉ ở mức yếu, trong khi tương quan với sự thiếu mạch lạc lại rõ hơn hẳn. Nói cách khác, cái bạn mua được khi vặn núm này lên phần lớn là rủi ro, không phải ý tưởng.
Để có được sự sáng tạo thực sự, kỹ thuật prompt engineering mới là thứ quyết định. Bạn cần cung cấp ngữ cảnh và ràng buộc cho tử tế, sau đó mới dùng temperature để tinh chỉnh "cảm giác" của văn bản.
Nên đặt temperature bao nhiêu cho từng loại công việc?
Tùy vào bản chất nhiệm vụ, bạn nên áp dụng các dải thông số khác nhau:
- Với lập trình và toán học, hãy đặt 0 hoặc gần 0, vì bất kỳ sự ngẫu nhiên nào cũng có thể làm sai lệch cú pháp hoặc thuật toán.
- Trích xuất dữ liệu và phân tích tài liệu cũng dùng mức 0. Khi bạn so sánh các hợp đồng hoặc bóc thông tin ra khỏi một tập tài liệu, sự chính xác là ưu tiên tối thượng.
- Viết sáng tạo và brainstorming là chỗ dải 0.7 – 1.0 phát huy, để mô hình tạo ra những kết hợp từ ngữ bất ngờ.
- Với chatbot hỗ trợ khách hàng, mức 0.5 là điểm cân bằng giữa sự tự nhiên và tính an toàn.

Một lưu ý về dải giá trị: mỗi nhà cung cấp định nghĩa khoảng hợp lệ hơi khác nhau, và mặc định phổ biến là 1.0. Vì vậy con số 0.7 trên hệ này không nhất thiết cho ra cùng một mức ngẫu nhiên như 0.7 trên hệ khác, nên hãy dò lại khi bạn đổi mô hình, thay vì bê nguyên cấu hình cũ sang.
Thêm nữa, với các dòng mô hình suy luận mới, thứ bạn chỉnh không còn là temperature mà là reasoning_effort. Các tác vụ như phân loại dữ liệu hoặc lấy thông tin nhanh (latency-critical) nên đặt mức none, trong khi các bài toán phức tạp sẽ cần mức nỗ lực cao hơn.
Vì sao các mô hình suy luận khóa temperature?
Các dòng mô hình suy luận (reasoning models) như o1 và GPT-5 series thường khóa luôn việc chỉnh temperature. Trên Azure OpenAI, danh sách tham số không được hỗ trợ với nhóm mô hình này bao gồm cả temperature, top_p, presence_penalty, frequency_penalty và logprobs. Lý do nằm ở cơ chế "reasoning tokens" (token suy luận).

Khác với các mô hình chat thông thường, mô hình suy luận cần dành thời gian để thực hiện chuỗi tư duy (chain of thought) nội tại trước khi đưa ra kết quả. Những token suy luận đó không xuất hiện trong nội dung trả về nhưng vẫn chiếm chỗ trong cửa sổ ngữ cảnh và vẫn bị tính phí như token đầu ra. Quá trình tư duy này đòi tính ổn định: nếu temperature bị đẩy cao, sai sót có thể phát sinh ngay trong các bước suy luận trung gian, và một bước lệch ở đầu chuỗi sẽ kéo theo cả kết luận.
Thay vì chỉnh temperature, các hệ thống này cung cấp tham số reasoning_effort, với các giá trị được hỗ trợ tùy theo mô hình gồm none, minimal, low, medium, high, xhigh và max. Bạn kiểm soát được mức độ "nghĩ" của mô hình mà không làm hỏng tính nhất quán của logic, đổi lại là độ trễ và chi phí tăng theo.
Khi nào việc chỉnh temperature thật sự đáng công?
Hãy ưu tiên prompt engineering trước. Một cấu trúc prompt tốt, định nghĩa rõ ràng mục tiêu và định dạng đầu ra, sẽ ăn đứt việc ngồi xoay sở với các tham số suy luận. Nếu mô hình đang không làm đúng yêu cầu, hạ temperature chỉ che bớt triệu chứng chứ không chữa được một prompt mơ hồ.
Việc chỉnh temperature chỉ thực sự đáng công khi prompt của bạn đã chuẩn và bạn muốn tinh chỉnh sắc thái của phản hồi cho phù hợp với người dùng cuối, ví dụ làm chatbot bớt "máy móc" hơn, hoặc làm các đoạn tóm tắt súc tích hơn. Còn lại, phần lớn thời gian, thứ đáng sửa là cái prompt chứ không phải con số.
Tài liệu tham khảo
- How do temperature, top-k, and top-p sampling differ? — Sebastian Raschka
- How to generate text: using different decoding methods for language generation with Transformers — Hugging Face
- LLM Temperature — Hopsworks MLOps Dictionary
- Influence response generation with inference parameters — Amazon Bedrock
- The Effect of Sampling Temperature on Problem Solving in Large Language Models
- Is Temperature the Creativity Parameter of Large Language Models?
- Temperature — Vellum LLM Parameter Guide
- Why You Can't Set Temperature on GPT-5/o3 — Hippocampus's Garden
- Azure OpenAI reasoning models — Microsoft Learn