Menu

Prompt engineering là gì? Cách học từ cơ bản

Prompt engineering là việc viết và thử nghiệm các chỉ dẫn bạn đưa cho mô hình AI để nó tạo ra đúng kết quả bạn cần. Bài này giải thích vì sao cách làm này hiệu quả và tổng hợp mọi kỹ thuật cốt lõi.

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.

Prompt engineering là việc viết, thử nghiệm và tinh chỉnh các chỉ dẫn bạn đưa cho mô hình AI để nó tạo ra đúng kết quả bạn cần, một cách ổn định. Nó bao gồm những gì bạn đưa vào prompt (nhiệm vụ, ngữ cảnh, ví dụ, đầu vào) và cách bạn sắp xếp chúng (thứ tự, định dạng, dấu phân cách). Cái tên nghe có vẻ kỹ thuật, nhưng phần lớn công việc là viết cẩn thận và kiểm tra kết quả.

Trang này là mục lục của bộ hướng dẫn prompt engineering của Coddy. Nó giải thích vì sao cách làm này hiệu quả, liệt kê các kỹ thuật cốt lõi cùng trang hướng dẫn từng kỹ thuật, và cho thấy khác biệt giữa một prompt viết qua loa và một prompt được thiết kế kỹ.

Vì sao prompt engineering hiệu quả

Mô hình ngôn ngữ tạo văn bản bằng cách dự đoán phần tiếp theo, từng mẩu nhỏ một, dựa trên mọi thứ có trước mặt nó. Nó không biết ý định của bạn, dự án của bạn hay các cuộc chat trước, trừ khi những điều đó nằm trong đầu vào. Vì vậy prompt không phải lời nhờ vả gửi tới một bộ óc đã hiểu bạn; nó là toàn bộ tình huống mà mô hình đang phản hồi.

Điều này dẫn tới một hệ quả trực tiếp. Mỗi câu hỏi mà prompt bỏ ngỏ, mô hình có xu hướng tự trả lời bằng lựa chọn phổ biến nhất: ngôn ngữ phổ biến nhất, độ dài phổ biến nhất, đối tượng người đọc phổ biến nhất. Đôi khi lựa chọn phổ biến đó đúng là thứ bạn muốn. Khi không phải, cách sửa là trả lời luôn câu hỏi đó ngay trong prompt. Một prompt tốt thu hẹp phạm vi các câu trả lời có thể có cho đến khi phần lớn những gì còn lại đều hữu ích.

Còn hai điều nữa định hình kỹ năng này. Câu trả lời được lấy mẫu ngẫu nhiên, nên cùng một prompt có thể cho kết quả khác nhau ở các lần chạy khác nhau; một prompt chỉ tốt khi nó hiệu quả trong phần lớn các lần, chứ không phải một lần. Và mô hình coi mọi đoạn văn bản trong prompt đều có thể mang ý nghĩa, nên một email được dán vào hay một câu lạc chỗ có thể bị hiểu thành chỉ dẫn nếu bạn không đánh dấu rõ đó là tài liệu.

Prompt viết qua loa và prompt được thiết kế kỹ

Cả hai tab đều yêu cầu cùng một việc: phân loại các đánh giá của khách hàng thành tích cực và tiêu cực. Hãy so sánh kết quả mỗi bên nhận được.

Các đánh giá này tích cực hay tiêu cực? 1. Ứng dụng chạy nhanh nhưng hôm nay mình bị đăng xuất hai lần. 2. Đúng thứ mình cần để theo dõi các buổi chạy bộ. 3. Bộ phận hỗ trợ không bao giờ trả lời email của mình.
Try it
Example replyReplies vary between models and runs.

Đây là phân tích chi tiết:

  1. Trái chiều. Người dùng thích tốc độ nhưng khó chịu vì bị đăng xuất.
  2. Tích cực. Ứng dụng đáp ứng nhu cầu theo dõi chạy bộ của họ.
  3. Tiêu cực. Người dùng không hài lòng vì bộ phận hỗ trợ không phản hồi.

Nhìn chung, phản hồi khá trái chiều: một đánh giá tích cực, một tiêu cực và một trái chiều.

Câu trả lời cho prompt qua loa hợp lý với người đọc, nhưng một chương trình không dùng được: nhãn bị lẫn trong phần giải thích, xuất hiện thêm một loại thứ ba mà câu hỏi không đưa ra, và có thêm một đoạn tóm tắt ở cuối. Prompt được thiết kế kỹ định nghĩa từng nhãn, cố định dạng đầu ra bằng một ví dụ, và bọc các đánh giá trong thẻ để chúng ít bị nhầm thành chỉ dẫn. Chạy trên một nghìn đánh giá, nó cho đầu ra mà chương trình phân tích được ổn định hơn nhiều, và khi bạn cần sự bảo đảm, các tính năng đầu ra có cấu trúc của API cùng một bước kiểm tra trong code sẽ lấp nốt phần còn thiếu.

Các kỹ thuật cốt lõi

Mỗi kỹ thuật dưới đây lấp một loại khoảng trống khác nhau giữa điều bạn muốn nói và điều mô hình nhận được. Phần lớn prompt thực tế kết hợp nhiều kỹ thuật.

Kỹ thuậtTác dụngDùng khi
Zero-shot promptingĐưa chỉ dẫn mà không kèm ví dụNhiệm vụ phổ biến và được mô tả rõ
Few-shot promptingCho xem vài ví dụ đầu vào và đầu raĐịnh dạng hoặc cách đánh giá dễ cho xem hơn là mô tả
Chain-of-thought promptingYêu cầu trình bày lập luận trước câu trả lờiBài toán có nhiều bước, như toán hoặc logic
Role promptingĐặt giọng văn và tiêu chuẩn của một vai cụ thểĐối tượng người đọc và trình độ là quan trọng
Đầu ra có cấu trúcCố định câu trả lời thành JSON, bảng hoặc mẫuMột chương trình hoặc bảng tính đọc kết quả
Dấu phân cách và thẻ XMLTách chỉ dẫn khỏi tài liệu được dán vàoPrompt có chứa tài liệu, code hoặc văn bản của người dùng
Mẫu promptBiến một prompt tốt thành prompt có chỗ trốngBạn lặp lại cùng một kiểu yêu cầu
Prompt chainingChia công việc thành các bước nối tiếp nhauMột prompt đang cố làm quá nhiều việc
Self-consistencyLấy nhiều câu trả lời rồi chọn theo đa sốMột luồng lập luận duy nhất không đáng tin
Tree of thoughtKhám phá và chấm điểm nhiều hướng lập luậnBài toán cần lập kế hoạch hoặc tìm kiếm
ReActXen kẽ lập luận với việc gọi công cụMô hình phải tra cứu thông tin hoặc thực hiện hành động
Meta promptingĐể mô hình viết hoặc cải thiện một promptBạn bí cách diễn đạt prompt
Context engineeringThiết kế mọi thứ mô hình nhìn thấy, không chỉ chỉ dẫnBạn đang xây ứng dụng hoặc agent quanh một mô hình

Nếu bạn mới bắt đầu, hãy học các thành phần của một prompt trong cách viết prompt, sau đó là few-shot prompting và đầu ra có cấu trúc. Ba phần này giải quyết được phần lớn vấn đề hằng ngày.

Prompt viết cho một chương trình

Prompt được viết vào phần mềm sẽ chạy hàng nghìn lần trên những đầu vào chưa ai thấy trước, nên chúng nói rõ nhiều điều hơn một tin nhắn chat. Prompt bên dưới viết commit message từ một diff code. Tắt từng phần để xem mỗi phần ngăn được lỗi gì: thiếu ví dụ thì văn phong bị lệch, thiếu ràng buộc thì mô hình có thể dùng những loại mà nhóm bạn không dùng, như perf hay style.

Commit message từ một diff
Fill in
Parts
Bạn viết commit message git cho một nhóm tuân theo định dạng Conventional Commits.
Viết commit message cho diff bên dưới.
feat(cart): thêm bộ chọn số lượng cho sản phẩm trong giỏ hàng fix(api): trả về 404 thay vì 500 khi id người dùng không tồn tại
Dòng đầu: type(scope): tóm tắt, tối đa 60 ký tự, ở dạng câu mệnh lệnh. Sau đó là một dòng trống và tối đa ba gạch đầu dòng giải thích lý do thay đổi.
Chỉ dùng các loại sau: feat, fix, refactor, docs, test, chore. Nếu diff trộn lẫn các thay đổi không liên quan, hãy nói rõ điều đó thay vì viết commit message.
function validatePassword(password) { - if (password.length > 8) { + if (password.length >= 8) { return null; } return 'Password must be at least 8 characters'; }
Try it
Example replyReplies vary between models and runs.
fix(auth): chấp nhận mật khẩu dài đúng 8 ký tự

- Điều kiện kiểm tra dùng > 8, nên mật khẩu 8 ký tự bị từ chối
- Quy tắc giờ đã khớp với thông báo lỗi, vốn ghi "at least 8"

Cách học prompt engineering

Bạn học nó bằng cách chạy prompt và xem thật kỹ kết quả trả về. Một lộ trình thực tế:

  1. Học các thành phần của một prompt. Nhiệm vụ, ngữ cảnh, đầu vào, định dạng và ràng buộc. Phần lớn lỗi đều do thiếu một trong số đó.
  2. Chọn một việc thật mà bạn hay lặp lại, như tóm tắt ticket, giải thích lỗi hay soạn email, rồi viết một prompt cho việc đó.
  3. Gom từ năm đến mười đầu vào thử nghiệm, kể cả những trường hợp khó: đầu vào rỗng, đầu vào rất dài, đầu vào bằng ngôn ngữ khác.
  4. Mỗi lần chỉ thay đổi một thứ rồi chạy lại toàn bộ đầu vào. Nếu bạn đổi ba thứ cùng lúc và kết quả tốt lên, bạn sẽ không biết thay đổi nào có tác dụng. Cải thiện prompt qua từng lần thử trình bày chi tiết vòng lặp này.
  5. Thêm kỹ thuật khi một lỗi cụ thể đòi hỏi. Thêm ví dụ khi định dạng bị lệch, lập luận từng bước khi câu trả lời nhiều bước bị sai, dấu phân cách khi văn bản dán vào bị lẫn vào chỉ dẫn.

Các nhà cung cấp mô hình lớn cũng công bố hướng dẫn viết prompt cho mô hình của riêng họ, và chúng rất đáng đọc, vì mỗi hướng dẫn mô tả điều mà dòng mô hình đó phản hồi tốt nhất.

Prompt engineering có phải là một nghề?

Một số công ty từng tuyển vị trí "prompt engineer", nhất là khi các mô hình chat mới phổ biến rộng rãi. Nhưng thường thì kỹ năng này là một phần của công việc khác. Lập trình viên viết prompt cho các tính năng AI họ xây dựng, đội hỗ trợ viết prompt cho trợ lý trả lời khách hàng, còn chuyên viên phân tích và người viết nội dung dùng prompt hằng ngày.

Ở các nhóm làm sản phẩm AI, công việc này đã mở rộng hơn. Việc chọn những gì đưa vào đầu vào của mô hình (tài liệu được truy xuất, kết quả từ công cụ, lịch sử hội thoại, bộ nhớ) quan trọng không kém cách diễn đạt chỉ dẫn, và công việc rộng hơn đó thường được gọi là context engineering. Đo lường xem một prompt có hiệu quả trên nhiều đầu vào hay không, thường gọi là đánh giá (evaluation), là nửa còn lại.

Điều gì thay đổi với các mô hình mới

Prompt engineering thời đầu dựa vào mẹo: những câu thần chú, các vai diễn cầu kỳ, lặp lại một chỉ dẫn nhiều lần. Các mô hình hiện nay làm theo chỉ dẫn đơn giản tốt hơn nhiều, và các mô hình suy luận vốn đã tự suy nghĩ về vấn đề trước khi trả lời, nên việc yêu cầu chúng suy nghĩ từng bước giúp ích ít hơn trước.

Điều không thay đổi là phần chưa bao giờ là mẹo. Mô hình vẫn không thể biết người đọc của bạn, dữ liệu của bạn, các ràng buộc của bạn hay một kết quả tốt trông như thế nào nếu bạn không nói ra. Mô tả yêu cầu rõ ràng là kỹ năng bền vững, và đó là kỹ năng mà bộ hướng dẫn này dành nhiều trang nhất.

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

Nói đơn giản, prompt engineering là gì?

Prompt engineering là viết chỉ dẫn cho mô hình AI đủ cẩn thận để nó cho bạn câu trả lời bạn cần, rồi thử nghiệm và điều chỉnh cho đến khi nó làm được điều đó một cách ổn định. Nó bao gồm việc bạn nói gì với mô hình (nhiệm vụ, ngữ cảnh, ví dụ) và cách bạn sắp xếp nội dung đó (thứ tự, định dạng, dấu phân cách).

Không biết lập trình có học prompt engineering được không?

Được. Các kỹ năng cốt lõi như nêu rõ nhiệm vụ, cung cấp ngữ cảnh, đưa ví dụ và chỉ định định dạng đầu ra đều dùng được ngay trong ứng dụng chat. Lập trình trở nên hữu ích khi bạn muốn chạy một prompt nhiều lần, thử nó trên một bộ đầu vào, hoặc đưa đầu ra vào một chương trình.

Học prompt engineering mất bao lâu?

Phần cơ bản chỉ mất một buổi chiều: các thành phần của một prompt tốt và vài kỹ thuật như few-shot và đầu ra có cấu trúc. Để có kết quả ổn định trên một việc thật thì lâu hơn, vì điều đó đến từ việc thử prompt trên nhiều đầu vào và sửa những trường hợp nó thất bại.

Prompt engineering có phải là một nghề thật không?

Một số công ty từng tuyển các vị trí như "prompt engineer", nhưng thường thì kỹ năng này là một phần của công việc khác: lập trình viên xây dựng tính năng AI, người viết nội dung, chuyên viên phân tích và đội hỗ trợ khách hàng. Ở các nhóm làm sản phẩm AI, nó giao thoa với việc đánh giá (evaluation) và với việc thiết kế mọi thứ mô hình nhìn thấy, ngày nay thường gọi là context engineering.

Prompt engineering còn hữu ích với các mô hình AI mới không?

Mô hình mới cần ít mẹo hơn. Chúng làm theo chỉ dẫn đơn giản tốt hơn, và các mô hình suy luận (reasoning model) tự giải quyết vấn đề mà không cần được bảo hãy suy nghĩ từng bước. Phần vẫn hữu ích là phần chưa bao giờ là mẹo: nêu rõ nhiệm vụ, đưa cho mô hình những thông tin nó không thể biết, và xác định câu trả lời tốt trông như thế nào.

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