Dùng AI để viết prompt cho AI: metaprompt và vòng lặp tự cải tiến
Metaprompt là kỹ thuật để mô hình tự viết prompt cho chính nó. Bài này dựng lại quy trình bốn bước — mô tả bài toán, sinh biến thể, chấm bằng ca thất bại, rồi lặp cho tới khi ổn định.

Lời khuyên “hãy viết prompt cho tốt” có một lỗ hổng: viết prompt tốt lại chính là kỹ năng mà người mới chưa có. Nó giống như bảo ai đó hãy đặt câu hỏi đúng về một lĩnh vực họ chưa hiểu.
Metaprompt xoay chuyển vấn đề đó: thay vì tự viết chỉ dẫn, bạn mô tả bài toán bằng ngôn ngữ đời thường và để mô hình viết prompt cho chính nó. Bạn chuyển từ vai người soạn chỉ dẫn sang vai người mô tả yêu cầu và chấm điểm kết quả — hai việc dễ hơn hẳn.
Metaprompt là gì — và không phải là gì
Metaprompt là một prompt có nhiệm vụ sinh ra prompt khác. Đầu vào là mô tả công việc, đầu ra là một bộ chỉ dẫn có cấu trúc, đủ chi tiết để dùng lại nhiều lần.
Cần nói rõ mấy điều nó không phải:
- Không phải câu thần chú. Không có chuỗi ký tự nào khiến mọi câu trả lời tốt lên. Cái nó làm là bù vào phần ngữ cảnh và cấu trúc mà prompt của bạn đang thiếu.
- Không thay bạn hiểu bài toán. Mô hình chỉ viết được prompt tốt cho một bài toán được mô tả rõ. Mô tả mơ hồ thì nhận về một prompt dài, nghe hay, nhưng nhắm sai đích.
- Không phải làm một lần là xong. Giá trị thật nằm ở vòng lặp: sinh, thử, tìm ca hỏng, sửa. Bản nháp đầu tiên chỉ là điểm xuất phát.
Vì sao để mô hình tự viết prompt lại hiệu quả
- Nó biết định dạng nào hợp với nó. Mô hình đã đọc rất nhiều chỉ dẫn dạng vai trò – ngữ cảnh – nhiệm vụ – ràng buộc – định dạng đầu ra, nên nó dựng đúng bộ khung đó mà không cần bạn nhớ.
- Nó không mắc “lời nguyền tri thức”. Bạn hiểu công việc của mình quá rõ nên hay bỏ sót những điều tưởng là hiển nhiên. Mô hình thì viết ra hết, kể cả phần bạn thấy thừa.
- Nó chịu viết dài. Con người ngại gõ một prompt 400 chữ. Mô hình thì không — và với nhiều tác vụ, prompt dài mà cụ thể cho kết quả tốt hơn hẳn prompt ngắn mà chung chung.
Bộ khung metaprompt dùng được ngay
Dán khối này vào một cuộc hội thoại mới, thay phần trong ngoặc vuông, rồi lấy prompt nó trả về đem đi dùng ở hội thoại khác.
Bạn là chuyên gia thiết kế prompt. Nhiệm vụ của bạn không phải là thực hiện công việc dưới đây, mà là viết ra bộ chỉ dẫn để một trợ lý AI khác thực hiện nó tốt.
Công việc cần làm: [mô tả bằng lời thường, càng cụ thể càng tốt]
Người dùng bộ chỉ dẫn này: [ai sẽ dùng, họ có chuyên môn gì]
Đầu ra mong muốn: [định dạng và độ dài]
Điều kiện coi là đạt: [nêu 2-3 tiêu chí kiểm chứng được]
Những gì đã từng thất bại: [nếu có]
Bộ chỉ dẫn bạn viết phải gồm:
1. Vai trò cụ thể, kèm mức kinh nghiệm
2. Ngữ cảnh mà trợ lý cần biết trước khi bắt tay
3. Các bước thực hiện theo thứ tự
4. Ràng buộc rõ ràng — cả điều phải làm lẫn điều không được làm
5. Định dạng đầu ra, mô tả đủ chi tiết để không phải đoán
6. Cách xử lý khi thiếu thông tin: đánh dấu [CẦN BỔ SUNG] thay vì bịa
Trước khi viết, hãy nêu 3 chỗ mơ hồ trong mô tả của tôi mà bạn phải tự phỏng đoán. Sau đó viết bộ chỉ dẫn dựa trên phỏng đoán của bạn, và ghi rõ phỏng đoán đó là gì.Yêu cầu ở đoạn cuối là phần đáng giá nhất. Ba chỗ mơ hồ nó nêu ra thường chính là ba chỗ prompt tự viết của bạn hay hỏng.
Quy trình bốn bước
Bước 1 — Mô tả bài toán, đừng viết prompt
Sai lầm phổ biến là vẫn cố viết prompt rồi nhờ mô hình “làm cho hay hơn”. Kết quả là một prompt bóng bẩy nhưng vẫn giữ nguyên khuyết điểm gốc. Hãy lùi một bước và mô tả công việc.
Tôi cần một prompt cho công việc sau. Đừng viết prompt vội — hãy phỏng vấn tôi trước.
Công việc: [mô tả 3-5 câu]
Hãy hỏi tôi tối đa 5 câu hỏi, mỗi câu nhắm vào một thông tin mà nếu thiếu sẽ khiến prompt ra sai hướng. Hỏi từng câu một, đợi tôi trả lời rồi mới hỏi tiếp. Sau câu cuối, tóm tắt lại yêu cầu theo cách bạn hiểu để tôi xác nhận, rồi mới viết prompt.Bước 2 — Sinh ba biến thể khác hướng, không phải ba bản sửa chữ
Xin một prompt thì bạn nhận về hướng tiếp cận mặc định của mô hình. Xin ba biến thể khác hướng thì bạn có cái để so sánh — và thường biến thể tốt nhất không phải cái đầu tiên.
Dựa trên yêu cầu vừa chốt, hãy viết 3 prompt theo 3 hướng khác nhau về bản chất, không phải 3 cách diễn đạt của cùng một hướng:
- Biến thể A: ngắn gọn, chỉ nêu vai trò và kết quả mong muốn, để mô hình tự quyết cách làm
- Biến thể B: chi tiết, quy định từng bước và từng ràng buộc
- Biến thể C: dựa trên ví dụ — cho trước 1-2 mẫu đầu vào/đầu ra rồi yêu cầu làm tương tự
Sau 3 biến thể, viết thêm:
- Mỗi biến thể mạnh nhất ở loại đầu vào nào
- Mỗi biến thể dễ hỏng ở đâu
- Nếu chỉ được chọn một để chạy production thì chọn cái nào, vì saoBước 3 — Chấm bằng ca thất bại, không chấm bằng cảm giác
Đây là bước hay bị bỏ qua nhất, và cũng là bước quyết định. “Prompt này nghe ổn hơn” không phải một phép đo. Cần một bộ ca kiểm thử — nhất là những ca khó, ca biên, ca dễ khiến mô hình bịa.
Đây là prompt tôi định dùng:
"""
[dán prompt]
"""
Trước khi tôi đem nó đi chạy thật, hãy giúp tôi tìm chỗ vỡ:
1. Liệt kê 8 đầu vào có khả năng làm prompt này cho ra kết quả sai, kém, hoặc lệch hướng. Ưu tiên ca biên và ca thiếu thông tin, không phải ca thuận lợi.
2. Với mỗi ca, nói rõ prompt hiện tại sẽ hỏng theo kiểu nào.
3. Chỉ ra câu chữ cụ thể trong prompt là nguyên nhân của từng chỗ hỏng.
Chưa cần sửa gì ở bước này. Tôi muốn thấy danh sách chỗ vỡ trước.Bước 4 — Vòng lặp cải tiến
Khi đã có ca hỏng thật, việc sửa trở nên có mục tiêu. Điểm mấu chốt là đưa lại cả prompt hiện tại lẫn bằng chứng hỏng, và yêu cầu sửa có kiểm soát thay vì viết lại từ đầu.
Prompt hiện tại:
"""
[dán prompt]
"""
Các ca nó xử lý chưa đạt:
- Đầu vào: [...] → Kết quả nhận được: [...] → Kết quả mong muốn: [...]
- Đầu vào: [...] → Kết quả nhận được: [...] → Kết quả mong muốn: [...]
Hãy viết lại prompt để xử lý được những ca trên, với các ràng buộc:
- Giữ nguyên phần đang chạy tốt; chỉ sửa phần liên quan tới lỗi
- Nêu rõ bạn đã đổi gì và vì sao, trước khi đưa bản mới
- Không thêm ràng buộc mới không liên quan tới các lỗi ở trên
- Nếu hai lỗi cần hai hướng sửa mâu thuẫn nhau, nói ra thay vì tự chọn giùm tôiSinh system prompt cho một sản phẩm
Prompt dùng một lần và system prompt của sản phẩm là hai bài toán khác nhau. System prompt phải chịu được đầu vào ngoài dự kiến, phải nói rõ ranh giới, và phải ổn định qua hàng nghìn lượt gọi.
Viết system prompt cho một trợ lý sẽ chạy trong sản phẩm thật.
Tên và vai trò: [tên trợ lý, nó phục vụ việc gì]
Người dùng: [chân dung, trình độ, thứ họ thường hỏi]
Giọng: [trang trọng / thân thiện / ngắn gọn kỹ thuật]
Được phép làm: [liệt kê]
Không được làm: [liệt kê — càng cụ thể càng tốt]
Dữ liệu nó truy cập được: [nêu rõ, kèm giới hạn]
System prompt cần bao gồm:
- Cách xử lý câu hỏi ngoài phạm vi: từ chối thế nào cho không cụt lủn
- Cách xử lý khi thiếu dữ liệu để trả lời: hỏi lại hay nói không biết
- Cách phản ứng khi người dùng yêu cầu bỏ qua chỉ dẫn hệ thống
- Định dạng câu trả lời mặc định
- 2 ví dụ ngắn: một câu hỏi trong phạm vi, một câu ngoài phạm vi
Viết ở ngôi thứ hai, giọng chỉ dẫn trực tiếp. Không dùng ngôn ngữ tuyệt đối kiểu "TUYỆT ĐỐI KHÔNG BAO GIỜ" — mô hình đời mới bám chỉ dẫn khá sát, cách viết gay gắt dễ làm nó từ chối cả những yêu cầu hợp lệ.Tự động hoá vòng lặp bằng code
Làm tay được vài vòng thì ổn. Khi cần chạy hàng chục biến thể trên một bộ ca kiểm thử, nên đưa vòng lặp vào code. Đoạn dưới dùng Anthropic SDK cho TypeScript: nhận prompt hiện tại cùng danh sách ca hỏng, trả về bản đã sửa.
import Anthropic from "@anthropic-ai/sdk"
const client = new Anthropic() // đọc ANTHROPIC_API_KEY từ môi trường
const META_SYSTEM = `Bạn là chuyên gia thiết kế prompt. Bạn nhận một prompt và
danh sách ca mà nó xử lý sai, rồi trả về bản đã sửa. Chỉ sửa phần liên quan tới
lỗi, giữ nguyên phần đang hoạt động tốt.`
type FailureCase = { input: string; got: string; want: string }
export async function refinePrompt(current: string, failures: FailureCase[]) {
const report = failures
.map((f, i) => `Ca ${i + 1}:\n- Đầu vào: ${f.input}\n- Nhận được: ${f.got}\n- Mong muốn: ${f.want}`)
.join("\n\n")
const response = await client.messages.create({
model: "claude-opus-5",
max_tokens: 16000,
thinking: { type: "adaptive" },
output_config: { effort: "high" },
system: META_SYSTEM,
messages: [
{
role: "user",
content: [
`Prompt hiện tại:\n"""\n${current}\n"""`,
`Các ca chưa đạt:\n${report}`,
'Trả về: phần "Đã đổi gì" tối đa 5 gạch đầu dòng, rồi tới prompt mới.',
].join("\n\n"),
},
],
})
// content là union type — phải thu hẹp theo .type trước khi đọc .text
const text = response.content.find(
(block): block is Anthropic.TextBlock => block.type === "text",
)
return text?.text ?? ""
}Vài điểm đáng lưu ý trong đoạn trên. thinking: { type: "adaptive" } để mô hình tự quyết định suy nghĩ sâu tới đâu — tham số budget_tokens kiểu cũ đã bị loại bỏ và sẽ trả về lỗi 400 trên các model đời mới. Độ sâu giờ điều khiển qua output_config.effort. Các tham số lấy mẫu như temperature cũng không còn được chấp nhận — muốn đổi giọng văn thì nói thẳng trong prompt.
Có vòng lặp bằng code rồi thì bước tiếp theo tự nhiên là chấm điểm tự động: cho mô hình chạy prompt trên toàn bộ ca kiểm thử, so kết quả với đáp án mong muốn, và chỉ giữ lại biến thể nào cải thiện thật.
Bốn cái bẫy của metaprompt
- Tin bản nháp đầu tiên. Prompt do mô hình sinh ra đọc rất thuyết phục vì nó đầy đủ và có cấu trúc. Đầy đủ không có nghĩa là đúng — vẫn phải thử.
- Prompt phình to qua mỗi vòng. Mỗi lần sửa lại thêm một ràng buộc, sau mười vòng thành một bức tường chữ tự mâu thuẫn. Cứ vài vòng nên yêu cầu rút gọn mà giữ nguyên hành vi.
- Tối ưu cho ca dễ. Nếu bộ ca kiểm thử toàn đầu vào sạch đẹp, bạn đang đánh bóng một prompt sẽ vỡ ngay khi gặp dữ liệu thật.
- Quên rằng prompt gắn với model. Prompt tinh chỉnh cho một model không tự động tối ưu cho model khác. Đổi model thì chạy lại bộ ca kiểm thử trước khi kết luận.
Metaprompt không biến bạn thành người không cần hiểu bài toán. Nó chỉ chuyển công sức từ chỗ diễn đạt sang chỗ mô tả và kiểm chứng — và đó là chỗ công sức nên nằm ngay từ đầu.
Nguồn tham khảo
Bài viết được biên soạn lại theo hướng thực hành, tham khảo ý tưởng metaprompt từ bài gốc trên claude.vn. Toàn bộ prompt và mã nguồn trong bài là bản viết mới, đã đối chiếu với tài liệu API hiện hành.

Đức Đinh
Xây dựng sản phẩm web và viết về cách đưa AI vào quy trình làm việc hằng ngày mà không biến nó thành đồ chơi.


