D
Blog
⌘K
DashboardBlogDùng AI để viết prompt cho AI: metaprompt và vòng lặp tự cải tiến
AI & PromptpromptmetapromptAIClaude API

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.

Đức Đinh

Đức Đinh

29 July 202611 min read

Share
Ảnh bìa bài viết dùng AI để viết prompt cho AI với kỹ thuật metaprompt

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ả

  1. 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ớ.
  2. 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.
  3. 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.

Metaprompt — bộ sinh prompt
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.

Bước 1 — Mô tả bài toán
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.

Bước 2 — Ba biến thể
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ì sao

Bướ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.

Bước 3 — Bộ ca kiểm thử
Đâ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.

Bước 4 — Vòng lặp cải tiến
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ôi

Sinh 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.

Metaprompt — sinh system prompt
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.

refine-prompt.ts
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

Đứ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.

Website

Related articles

Ảnh bìa bài viết 15 mẫu prompt tiếng Việt cho công việc hàng ngày
AI & Prompt

15 mẫu prompt tiếng Việt dùng được ngay cho công việc hàng ngày

Bộ 15 prompt tiếng Việt cho bốn nhóm việc quen thuộc — viết lách, phân tích, sáng tạo, kỹ thuật — kèm công thức năm thành phần để bạn tự viết mẫu của riêng mình.

Đức ĐinhĐức Đinh13 min

On this page

  • Metaprompt là gì — và không phải là gì
  • Vì sao để mô hình tự viết prompt lại hiệu quả
  • Bộ khung metaprompt dùng được ngay
  • Quy trình bốn bước
  • Bước 1 — Mô tả bài toán, đừng 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ữ
  • Bước 3 — Chấm bằng ca thất bại, không chấm bằng cảm giác
  • Bước 4 — Vòng lặp cải tiến
  • Sinh system prompt cho một sản phẩm
  • Tự động hoá vòng lặp bằng code
  • Bốn cái bẫy của metaprompt
  • Nguồn tham khảo