Menu

System prompt là gì? Ví dụ system prompt mẫu

System prompt là một bộ chỉ dẫn cố định áp dụng cho cả cuộc trò chuyện với mô hình AI. Tìm hiểu nó nằm ở đâu, nên viết gì trong đó, và nó khác tin nhắn người dùng ra sao.

Mọi prompt bên dưới đều có thể chỉnh sửa: thay đổi nó, rồi mở trong ChatGPT, Claude hoặc ứng dụng AI khác.

System prompt là một bộ chỉ dẫn mà mô hình AI nhận được trước khi cuộc trò chuyện bắt đầu, và nó áp dụng cho mọi tin nhắn sau đó. Nó đặt vai trò của mô hình, đối tượng người đọc, các quy tắc và định dạng trả lời mặc định, để bạn không phải lặp lại chúng trong từng tin nhắn. Người dùng viết các prompt; system prompt định hình cách mô hình trả lời tất cả các prompt đó.

Ứng dụng chat nào cũng đã dùng system prompt. Khi bạn mở ChatGPT, Claude hay Gemini, mô hình đã có sẵn chỉ dẫn từ công ty đứng sau nó, những chỉ dẫn mà cửa sổ chat không hiển thị cho bạn. Khi lập trình viên xây ứng dụng trên nền một mô hình, system prompt là nơi họ biến một mô hình đa năng thành gia sư lập trình, trợ lý hỗ trợ khách hàng hay công cụ viết commit message.

System prompt làm gì

Đầu vào của mô hình trong một cuộc chat có cấu trúc: system prompt đứng đầu, sau đó là cuộc trò chuyện với các tin nhắn xen kẽ của người dùng và trợ lý. System prompt nằm phía trên toàn bộ cuộc trao đổi, nên nó luôn ở trước mặt mô hình mỗi khi trả lời, dù cuộc chat dài đến đâu.

Vị trí đó khiến nó là nơi phù hợp cho mọi thứ cần luôn đúng: mô hình đang nói chuyện với ai, được làm gì và không được làm gì, một câu trả lời mặc định trông như thế nào. Mô hình cũng được huấn luyện để coi trọng nó hơn tin nhắn người dùng khi hai bên mâu thuẫn. Đó là một xu hướng, không phải ổ khóa. Một người dùng quyết tâm đôi khi có thể thuyết phục mô hình bỏ qua system prompt, vì vậy nó không bao giờ nên là lớp bảo vệ duy nhất của bạn.

System prompt và tin nhắn người dùng

System promptTin nhắn người dùng
Ai viếtLập trình viên, hoặc bạn trong phần cài đặt của ứng dụngBạn, trong ô chat
Phạm viCả cuộc trò chuyệnMột yêu cầu
Nội dung thường gặpVai trò, đối tượng, quy tắc, thông tin, định dạng mặc địnhNhiệm vụ và tài liệu cho nhiệm vụ đó
Khi nào thay đổiHiếm khiMỗi lượt
Mức ưu tiên khi mâu thuẫnThường cao hơnThường thấp hơn

Một phép thử hữu ích: nếu một câu đúng với mọi tin nhắn trong cuộc chat, nó thuộc về system prompt. Nếu nó chỉ liên quan đến yêu cầu cụ thể này, nó thuộc về tin nhắn người dùng. "Trả lời dưới 100 từ" có thể đặt ở cả hai; "tóm tắt email bên dưới" thì luôn là tin nhắn người dùng.

Đặt system prompt ở đâu

Trong API, system prompt là một đầu vào riêng. Với thư viện Python của OpenAI, nó là tin nhắn đầu tiên trong danh sách, với vai trò system. Tài liệu của OpenAI cũng gọi cùng loại chỉ dẫn này là developer message trên các mô hình mới hơn.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": "You are a patient Python tutor. Give hints, not full solutions."},
        {"role": "user", "content": "Why does my loop stop at 9?"},
    ],
)
print(response.choices[0].message.content)

Với thư viện Python của Anthropic, nó là tham số system ở cấp cao nhất, còn danh sách messages chỉ chứa cuộc trò chuyện:

import anthropic

client = anthropic.Anthropic()
MODEL = "your-model-id"  # e.g. from your provider's model list

message = client.messages.create(
    model=MODEL,
    max_tokens=500,
    system="You are a patient Python tutor. Give hints, not full solutions.",
    messages=[{"role": "user", "content": "Why does my loop stop at 9?"}],
)
print(message.content[0].text)

Gemini API của Google gọi nó là system instruction. Tên gọi khác nhau, nhưng ý tưởng là một.

Trong các ứng dụng chat, bạn không có trường system gốc, vì ứng dụng đã có system prompt riêng. Thứ bạn có là một chỗ để thêm các chỉ dẫn cố định mà ứng dụng sẽ đưa vào giúp bạn. Trong ChatGPT, đó là custom instructions, chỉ dẫn dự án và chỉ dẫn của một GPT tùy chỉnh. Trong Claude, đó là chỉ dẫn dự án và các tùy chọn trong hồ sơ. Trong Gemini, đó là chỉ dẫn của một Gem. Cách mỗi ứng dụng gộp văn bản của bạn với chỉ dẫn riêng của nó không được công bố đầy đủ, nhưng trên thực tế chúng hoạt động như một system prompt bạn dùng chung với ứng dụng.

Nên viết gì trong system prompt

  • Vai trò và đối tượng. "Bạn là gia sư cho học viên trong tháng đầu học lập trình" đặt cách dùng từ và mức độ của mọi câu trả lời. Role prompting giải thích một vai thay đổi được gì và không thay đổi được gì.
  • Quy tắc áp dụng cho mọi lượt. Những điều mô hình luôn phải làm hoặc không bao giờ được làm: đưa gợi ý thay vì lời giải đầy đủ, chỉ trả lời câu hỏi về sản phẩm, trả lời bằng ngôn ngữ của người dùng.
  • Phải làm gì khi không chắc. "Nếu câu trả lời không có trong các thông tin bên dưới, hãy nói bạn không biết" giúp chống câu trả lời bịa đặt hiệu quả hơn một câu chung chung như "hãy chính xác".
  • Thông tin mô hình cần. Chi tiết sản phẩm, chính sách, ngày hiện tại, gói của người dùng. Mô hình không thể trả lời câu hỏi về ứng dụng của bạn chỉ bằng dữ liệu huấn luyện.
  • Định dạng mặc định. Độ dài, cấu trúc, có dùng khối code hay không. Nếu một chương trình đọc đầu ra, hãy đưa ra đúng dạng dữ liệu; xem đầu ra có cấu trúc.

Những gì không nên đưa vào

Thông tin bí mật. System prompt không phải là riêng tư. Người dùng có thể yêu cầu mô hình nhắc lại chỉ dẫn của nó hoặc lừa nó làm vậy, và mô hình không từ chối một cách đáng tin cậy. API key, mật khẩu và bất cứ thứ gì bạn không muốn bị công khai đều không nên nằm ở đó. Hãy coi system prompt là văn bản mà một ngày nào đó người dùng có thể đọc được, và xem prompt injection để biết chỉ dẫn bị ghi đè như thế nào.

Nhiệm vụ của một tin nhắn. Nếu system prompt ghi "tóm tắt bài viết này", tin nhắn thứ hai trong cuộc chat sẽ chẳng biết đi đâu.

Một đống quy tắc chồng chéo. Hai mươi quy tắc viết vào những thời điểm khác nhau thường mâu thuẫn với nhau, và mô hình phải đoán quy tắc nào thắng. Hãy gom nhóm các quy tắc, bỏ phần trùng lặp và nêu rõ thứ tự ưu tiên khi hai quy tắc có thể xung đột.

Phần độn chữ. System prompt được gửi lại kèm mọi request và tính vào context window của mô hình, nên mỗi đoạn thừa đều bị trả giá ở mọi lượt.

Ví dụ về system prompt

Ví dụ đầu tiên là một trợ lý cho sản phẩm. System prompt đặt phạm vi, độ dài, quy tắc cho những câu hỏi nó không trả lời được, và chứa những thông tin mô hình cần. Chuyển qua các tab để gửi cho nó những tin nhắn khác nhau: cùng một system prompt định hình cả ba câu trả lời.

System prompt
Bạn là trợ lý hỗ trợ bên trong một ứng dụng quản lý chi tiêu. Chỉ trả lời các câu hỏi về cách dùng ứng dụng. Giữ mọi câu trả lời dưới 80 từ. Nếu câu hỏi là về chuyện khác, hãy nói bạn chỉ có thể giúp về ứng dụng và đề xuất một việc liên quan mà bạn giúp được. Nếu các thông tin bên dưới không bao quát câu hỏi, hãy nói bạn không chắc và gợi ý liên hệ bộ phận hỗ trợ. Không bao giờ bịa ra tên menu hay tính năng. Thông tin: Giao dịch có thể được chia nhỏ: mở giao dịch, nhấn Chia, rồi chọn các danh mục và số tiền. Ngân sách được đặt lại vào ngày đầu tiên của mỗi tháng.
Fill in
Làm sao để chia một khoản mua giữa đi chợ và đồ gia dụng?
Try it
Chat apps receive the system prompt as the start of your message, so this tries its wording, not its priority. To test it as standing instructions, put it in the app's custom instructions or the API's system field.
Example replyReplies vary between models and runs.

Mở khoản mua đó trong danh sách giao dịch và nhấn Chia. Sau đó chọn hai danh mục, Đi chợ và Đồ gia dụng, rồi nhập số tiền thuộc về mỗi danh mục.

Ví dụ thứ hai là kiểu văn bản bạn có thể đặt trong custom instructions hoặc chỉ dẫn dự án của một ứng dụng chat. Nó mô tả bạn và cách bạn muốn được trả lời, để mọi cuộc chat đều bắt đầu từ đó.

Prompt
System prompt
Về mình: mình là lập trình viên backend, làm việc với TypeScript trên Node.js. Cứ coi như mình đã biết phần cơ bản và bỏ qua các giải thích cho người mới. Cách mình muốn được trả lời: code trước, sau đó tối đa ba câu giải thích. Nói rõ khi câu trả lời phụ thuộc vào một phiên bản hoặc cài đặt cụ thể.
Fill in
Làm sao để đọc một tệp JSON?
Try it
Chat apps receive the system prompt as the start of your message, so this tries its wording, not its priority. To test it as standing instructions, put it in the app's custom instructions or the API's system field.
Example replyReplies vary between models and runs.
import { readFile } from "node:fs/promises";

const config = JSON.parse(await readFile("config.json", "utf8"));

Truyền encoding vào khiến readFile trả về một chuỗi, rồi JSON.parse chuyển chuỗi đó thành đối tượng. await ở cấp cao nhất chỉ hoạt động trong ES module ("type": "module" trong package.json hoặc một tệp .mts); nếu không, hãy bọc lời gọi trong một hàm async. Thêm try/catch nếu tệp có thể không tồn tại hoặc sai định dạng.

Nếu không có system prompt, một câu hỏi ngắn như "làm sao để đọc một tệp JSON?" buộc mô hình phải đoán ngôn ngữ, và câu trả lời thường là Python hoặc JavaScript thuần kèm một đoạn giải thích JSON là gì. Khi có system prompt, câu trả lời chọn đúng ngôn ngữ và môi trường chạy, bỏ qua phần cơ bản và theo đúng dạng được yêu cầu.

Cấu trúc này dùng được cho bất kỳ trợ lý nào bạn thiết lập: phục vụ ai, các quy tắc, làm gì khi không chắc, những thông tin cần có và định dạng câu trả lời. Viết một lần, thử với một câu hỏi bình thường, một câu lạc đề và một câu cố phá quy tắc, rồi điều chỉnh cho đến khi cả ba câu trả lời đều đúng như bạn muốn.

Câu hỏi thường gặp

System prompt là gì?

System prompt là một bộ chỉ dẫn được đưa cho mô hình AI trước khi cuộc trò chuyện bắt đầu, và nó áp dụng cho mọi tin nhắn sau đó. Nó thường đặt vai trò, đối tượng người đọc, các quy tắc và định dạng trả lời mặc định. Trong API, nó là một trường system hoặc một tin nhắn riêng; trong các ứng dụng chat, chỉ dẫn tùy chỉnh và chỉ dẫn dự án có cùng mục đích.

System prompt khác user prompt như thế nào?

System prompt chứa các chỉ dẫn cố định cho cả cuộc trò chuyện và thường do lập trình viên viết hoặc được đặt một lần trong phần cài đặt. User prompt là một tin nhắn đơn lẻ yêu cầu một việc. Khi hai bên mâu thuẫn, mô hình được huấn luyện để coi trọng system prompt hơn, dù đó chỉ là xu hướng chứ không phải điều chắc chắn.

Có đặt được system prompt trong ChatGPT, Claude hay Gemini không?

Không phải trường system gốc, nhưng gần như vậy. ChatGPT có custom instructions (chỉ dẫn tùy chỉnh), chỉ dẫn dự án và chỉ dẫn cho các GPT tùy chỉnh. Claude có chỉ dẫn dự án và tùy chọn trong hồ sơ. Gemini có chỉ dẫn cho Gem. Ứng dụng kết hợp những gì bạn viết ở đó với các chỉ dẫn hệ thống của riêng nó và áp dụng cho các cuộc chat của bạn.

Người dùng có xem hoặc lấy được system prompt không?

Thường là có. Người dùng có thể yêu cầu mô hình nhắc lại chỉ dẫn của nó hoặc lừa nó làm vậy, và mô hình không giữ bí mật các chỉ dẫn này một cách đáng tin cậy. Đừng bao giờ đặt mật khẩu, API key hay thông tin kinh doanh mật trong system prompt, và đừng dựa vào nó như một lớp bảo mật.

System prompt nên dài bao nhiêu?

Đủ dài để bao quát những gì áp dụng cho mọi tin nhắn, và không dài hơn. System prompt cá nhân có thể chỉ ba hoặc bốn câu. System prompt cho một sản phẩm thường dài khoảng một trang, gồm vai trò, quy tắc, thông tin và định dạng đầu ra. Mỗi chữ đều được gửi kèm mọi request, nên lần nào nó cũng tốn token.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu