Bạn và bạn gái chuẩn bị có chuyến du lịch châu Âu. Để có thể ăn mặc "sành điệu" và có những bức ảnh "để đời", bạn ngay lập tức nghĩ tới AI để "vị chuyên gia" này gợi ý cách ăn mặc, kiểu tóc và chăm sóc da cho bạn gái. Nghĩ là làm, bạn ra lệnh: "Hãy lột xác người yêu tôi đi!". Một bài văn dài 1.500 chữ kể về một cuộc đại phẫu thuật thẩm mỹ được "chuyên gia AI" đưa ra khiến bạn không biết nên khóc hay nên cười!
Ở bài trước, chúng ta vừa gặp một nhân vật mới:AI Agent.
Nếu chatbot chủ yếu:
Bạn hỏi
↓
AI trả lờithì Agent có thể:
Bạn giao mục tiêu
↓
AI lập kế hoạch
↓
Dùng công cụ
↓
Thực hiện
↓
Kiểm tra
↓
Làm tiếpNhưng có một vấn đề rất đời thường:
Bạn nói gì để AI biết chính xác bạn muốn nó làm gì?
Đây là lúc xuất hiện một cụm từ nghe khá "sang xịn mịn":
Prompt Engineering
Nghe tên thì giống như kỹ sư của một ngành kỹ thuật "sang chảnh" gì đó.
Nhưng nói đơn giản:
Prompt Engineering là cách thiết kế yêu cầu gửi cho AI sao cho AI có đủ thông tin và hướng dẫn để tạo ra kết quả phù hợp với mục tiêu của bạn.
Nói theo kiểu DatVietLapTrinh:
Biết nói chuyện với AI sao cho nó bớt "đoán mò". 😂
Prompt là gì?
Prompt đơn giản là đầu vào/instruction bạn đưa cho AI.
Ví dụ:
Viết cho tôi một chương trình Python.Đó là prompt.
Hoặc:
Giải thích vòng lặp for trong Python cho người mới học.Cũng là prompt.
Hoặc:
Tôi có một chương trình Python bị lỗi.
Đây là code...
Đây là error...
Hãy giúp tôi tìm nguyên nhân.Cũng là prompt.
Nói cách khác:
Prompt là thứ bạn đưa cho AI để định hướng câu trả lời hoặc hành động.
Prompt ngắn có tốt không?
Có thể.
Prompt dài có tốt hơn không?
Không nhất thiết.
Đây là một hiểu lầm khá phổ biến.
Nhiều người mới nghe "Prompt Engineering" xong nghĩ:
"À! Muốn AI làm tốt thì phải viết prompt dài 3 trang."
Không.
Nếu bạn hỏi:
1 + 1 bằng mấy?thì không cần:
Bạn là một chuyên gia toán học nổi tiếng...
Trong bối cảnh...
Với vai trò...
Hãy suy luận...😂
1 + 1 vẫn là 2.
Prompt tốt không phải prompt dài nhất.
Prompt tốt là prompt:
đủ rõ cho nhiệm vụ đang làm.
Một prompt tệ có thể gây ra chuyện rất vui
Thử tưởng tượng bạn nói:
"Viết cho tôi một bài về Python."
AI:
"Được."
Và vài giây sau:
một bài dài 2.000 chữ.
Bạn đọc.
"Ủa?"
Bạn muốn bài đơn giản theo kiểu...DatVietLapTrinh cho người mới học.
AI lại viết:
"Python là một ngôn ngữ lập trình hướng đối tượng, đa mô hình..."
Bạn:
"Ủa lần hai?" 😭
Không phải AI "hơi bị ngu". Mà là:
Bạn chưa nói rõ mình muốn gì.
Hãy thêm context
Thay vì:
Viết cho tôi một bài về Python.hãy thử:
Tôi đang viết bài cho website dành cho người mới học lập trình.
Hãy viết một bài giải thích Python là gì.
Yêu cầu:
- tiếng Việt
- dễ hiểu
- ví dụ đời thường
- tránh thuật ngữ hàn lâm
- có ví dụ code ngắn
- giải thích từng bướcBạn vừa cho AI thêm:
- đối tượng người đọc
- mục tiêu
- ngôn ngữ
- phong cách
- yêu cầu
- giới hạn
Kết quả thường sẽ phù hợp hơn.
Một bí mật rất đơn giản
Muốn AI trả lời tốt hơn...
hãy cho nó biết bạn đang đứng ở đâu.
Ví dụ:
Tôi là người mới học Python.khác rất nhiều so với:
Tôi là developer đã làm Python 5 năm.Cùng một câu hỏi:
"Giải thích list comprehension."
AI nên giải thích hai người theo hai cách khác nhau.
Người mới:
numbers = [1, 2, 3]
result = [x * 2 for x in numbers]và giải thích từng phần.
Người đã có kinh nghiệm có thể muốn đi thẳng vào:
- readability
- performance
- iterator
- generator
- trade-off
Context hay "ngữ cảnh" quyết định cách AI nên trả lời.
"Bạn là chuyên gia..." có thần kỳ không?
Đây là một kiểu prompt rất phổ biến, tâng bốc "giáo sư AI", kiểu như:
Bạn là chuyên gia Python 20 năm kinh nghiệm.Sau đó:
Viết code cho tôi.Có thể hữu ích trong một số trường hợp.
Nhưng đừng nghĩ câu:
"Bạn là chuyên gia..."
là nút tăng IQ của AI. 😄
Nó không phải câu thần chú, đáng tiếc là rất nhiều người tin...đó là câu thần chú!
Điều quan trọng hơn thường là:
Bạn đang làm gì?
↓
Dữ liệu là gì?
↓
Mục tiêu là gì?
↓
Ràng buộc là gì?
↓
Kết quả mong muốn là gì?Nếu thiếu những thứ này thì bạn có thể gọi AI là:
"Giáo sư, tiến sĩ, thiên tài, huyền thoại của thế giới..."
mà vẫn nhận được câu trả lời không đúng ý.
😂
Một công thức prompt rất dễ nhớ
Bạn có thể nhớ:
CONTEXT
+
TASK
+
CONSTRAINTS
+
OUTPUTHoặc nói đời thường:
"Tôi đang làm gì + Tôi muốn gì + Có luật gì + Tôi muốn nhận kết quả ra sao."
1. Context - Tôi đang làm gì?
Ví dụ:
Tôi đang học Python và là người mới.Hoặc:
Tôi đang xây một website PHP + MySQL.Hoặc:
Tôi đang debug một chương trình C.AI biết hoàn cảnh.
2. Task - Tôi muốn gì?
Ví dụ:
Hãy giúp tôi tìm nguyên nhân lỗi.Hoặc:
Hãy viết một function.Hoặc:
Hãy giải thích đoạn code này.Đừng để AI phải đoán mục tiêu.
3. Constraints - Có luật gì?
Ví dụ:
Không dùng thư viện ngoài.Hoặc:
Dùng Python standard library.Hoặc:
Tôi muốn code dễ hiểu cho người mới.Hoặc:
Không thay đổi cấu trúc database hiện tại.Đây là phần rất quan trọng khi làm project thật.
4. Output - Tôi muốn kết quả như thế nào?
Ví dụ:
Hãy trả lời bằng tiếng Việt, tiếng Anh, tiếng Nhật...Hoặc:
Cho tôi code trước, sau đó giải thích.Hoặc:
Trả kết quả dưới dạng bảng.Hoặc:
Chỉ cho tôi phần code cần sửa, không viết lại toàn bộ file.AI không phải người đọc suy nghĩ của bạn.
Bạn càng nói rõ đầu ra mong muốn, nó càng có cơ hội đi đúng đường.
Ví dụ: "Viết login PHP"
Prompt này:
Viết login PHP.quá ngắn.
AI phải đoán:
- PHP phiên bản nào?
- MySQL hay database khác?
- mysqli hay PDO?
- password lưu thế nào?
- session hay JWT?
- giao diện có sẵn chưa?
- cần validation không?
- prepared statement không?
- muốn code cho người mới hay production?
Không lạ nếu câu trả lời không đúng ý, hoặc tệ hơn khiến bạn tức giận bỏ đi "không thèm" nói chuyện với "cái đồ ngu AI" nữa!
Thử prompt tốt hơn
Tôi đang học PHP và MySQL.
Tôi muốn tạo chức năng đăng nhập.
Database có bảng users:
- id
- email
- password_hash
Yêu cầu:
- dùng PDO
- dùng prepared statement
- dùng password_verify()
- dùng session sau khi đăng nhập thành công
- không lưu password dạng plain text
- giải thích code theo từng bước
- tôi là người mới học PHPBạn thấy không?
Không cần viết một "bài văn tế AI".
Nhưng AI có rất nhiều thông tin hữu ích.
Prompt Engineering thực chất là làm rõ bài toán
Đây là điểm mình rất thích ở khái niệm này.
Nhiều lúc:
Prompt chưa rõ
không phải vì AI kém.
Mà vì:
chính chúng ta chưa xác định rõ mình muốn gì.
Ví dụ bạn nói:
"Làm cho website nhanh hơn."
Nghe rất rõ.
Nhưng thực ra chưa rõ chút nào. 😭
Nhanh hơn ở đâu?
- tải trang?
- database?
- API?
- ảnh?
- JavaScript?
- server?
- TTFB?
- mobile?
- desktop?
Nếu không biết...
AI cũng phải đoán.
Hãy biến "làm nhanh hơn" thành yêu cầu cụ thể
Ví dụ:
Website PHP + MySQL của tôi có trang danh sách sản phẩm.
Trang hiện tại mất khoảng 3 giây để tải.
Tôi muốn tìm nguyên nhân.
Đây là:
- SQL query
- PHP code
- kết quả EXPLAIN
- thời gian response
Hãy:
1. phân tích các điểm có thể gây chậm
2. chỉ ra vấn đề đáng kiểm tra trước
3. giải thích tại sao
4. đề xuất cách tối ưu
5. không thay đổi database schema nếu chưa cầnĐây là prompt tốt hơn rất nhiều.
"Đừng sửa ngay" là một câu rất hữu ích
Đặc biệt khi debug.
Ví dụ:
Đây là code của tôi.
Đây là error message.
Đừng sửa ngay.
Hãy:
1. xác định nguyên nhân có khả năng nhất
2. giải thích tại sao
3. chỉ ra cách kiểm tra
4. sau đó mới đề xuất cách sửaTại sao hay?
Vì bạn không chỉ nhận:
"Code mới."
Bạn nhận được:
quá trình suy luận và kiểm tra vấn đề.
Đối với người học, điều này cực kỳ hữu ích.
Một ví dụ "dở khóc dở cười" 😭
Bạn:
"Viết cho tôi chương trình xóa file rác."
AI:
"Quá dễ, chuyện nhỏ như con thỏ!"
AI viết:
import os
for file in os.listdir("."):
os.remove(file)Bạn:
"..."
😂
Vấn đề nằm ở đâu?
"File rác" chưa được định nghĩa.
AI có thể hiểu theo một cách rất khác với bạn.
Prompt tốt hơn
Tôi có một thư mục Downloads.
Tôi muốn tìm các file có phần mở rộng:
.tmp
.log
Nhưng KHÔNG được xóa.
Trước tiên chỉ liệt kê chúng ra màn hình.
Sau khi tôi kiểm tra danh sách,
tôi sẽ quyết định có xóa hay không.
Viết Python code cho người mới và giải thích.Đây là một prompt rất khác.
Bạn vừa thêm:
phạm vi + điều kiện + giới hạn + quy trình an toàn.
Đây là tư duy cực kỳ quan trọng với AI Agent
Quay lại bài trước.
Agent có khả năng hành động.
Vậy nếu prompt mơ hồ:
Dọn thư mục này.thì rủi ro cao hơn nhiều so với chatbot chỉ trả lời.
Nhưng:
Chỉ tìm file .tmp và .log.
Không xóa.
Chỉ tạo danh sách.
Sau đó chờ tôi xác nhận.thì an toàn hơn.
Bạn thấy chưa?
Prompt Engineering không chỉ để có câu trả lời hay.
Nó còn có thể liên quan đến:
kiểm soát hành động của AI.
Prompt càng dài càng tốt?
Không.
Hãy thử hai câu:
Viết Python.và:
Tôi đang học Python.
Hãy viết một chương trình tính tổng từ 1 đến n.
Dùng vòng lặp for.
Không dùng thư viện ngoài.
Giải thích từng dòng cho người mới.Câu thứ hai dài hơn.
Nhưng không phải vì nó dài.
Nó tốt hơn vì thông tin hữu ích hơn.
Đừng thêm:
Bạn là thiên tài vũ trụ...
Bạn là lập trình viên số một...
Bạn đã code từ thời Internet còn dùng dial-up...nếu những thứ đó không giúp nhiệm vụ rõ hơn. 😂
Đừng "nhồi" quá nhiều thứ vào một prompt
Một lỗi khác:
Viết website bán hàng,
tạo database,
làm login,
làm thanh toán,
làm admin,
làm API,
tối ưu SEO,
thêm chatbot,
deploy server,
và nhớ làm responsive.AI:
"Chuyện nhỏ!"
Bạn:
"Ồ!"
AI:
"Đây là phần 1..."
Sau 5 phút:
một núi code.
Bạn:
"Giờ sửa chỗ nào đây?" 😭
Với project lớn, thường nên chia nhỏ.
Database
↓
Authentication
↓
Product
↓
Cart
↓
Order
↓
Payment
↓
AdminMỗi bước kiểm tra một lần.
Prompt Engineering cũng giống chia bài toán
Đây chính là tư duy lập trình mà chúng ta đã học từ trước.
Một bài toán lớn:
Làm website.chia thành:
Login
Product
Cart
Order
PaymentMột task AI lớn cũng vậy.
Đừng hỏi:
"Làm hết."
Hãy hỏi:
"Làm phần này trước."
Sau đó:
"Kiểm tra."
Rồi:
"Làm phần tiếp theo."
Một kỹ thuật rất đơn giản: cho AI biết nó không được làm gì
Đây là phần người mới thường quên.
Ví dụ:
Không dùng thư viện ngoài.Không thay đổi database.Không xóa dữ liệu.Không viết lại toàn bộ file.Chỉ sửa function này.Không thay đổi API hiện tại.Những câu này giúp thu hẹp phạm vi.
Và trong project thật...
thu hẹp phạm vi thường là chuyện tốt.
Hãy cho AI biết "Definition of Done"
Một cụm từ nghe hơi chuyên nghiệp:
Definition of Done
Nói đời thường:
"Thế nào thì tôi mới coi là xong?"
Ví dụ:
Chức năng login được xem là hoàn thành khi:
- email đúng thì đăng nhập được
- password đúng thì đăng nhập được
- password sai thì báo lỗi
- email không tồn tại thì báo lỗi
- password không được lưu dạng plain text
- query dùng prepared statement
- session được tạo sau khi đăng nhậpBây giờ AI biết "xong" nghĩa là gì.
Prompt tốt không cứu được yêu cầu sai
Đây là điều rất quan trọng.
Bạn có thể viết prompt dài 1.000 chữ.
Nhưng nếu yêu cầu sai...
AI vẫn có thể giúp bạn làm sai rất đẹp.
Ví dụ:
"Tôi muốn lưu password người dùng vào database dưới dạng plain text."
Đó là yêu cầu...sai! Bạn có thể viết prompt cực kỳ chi tiết.
Nhưng vấn đề vẫn nằm ở yêu cầu.
Vì vậy:
Prompt Engineering không thay thế kiến thức.
Nó giúp bạn truyền đạt kiến thức và mục tiêu cho AI rõ hơn.
AI cũng có thể hỏi ngược lại
Đây là một điều bạn nên tận dụng.
Bạn có thể nói:
Nếu yêu cầu của tôi còn thiếu thông tin,
đừng tự đoán.
Hãy hỏi tôi tối đa 5 câu hỏi cần thiết trước khi viết code.Cực kỳ hữu ích.
Ví dụ bạn:
"Tạo API đăng nhập."
AI có thể hỏi:
1. Bạn dùng PHP hay Python?
2. Database là MySQL hay PostgreSQL?
3. Authentication dùng session hay JWT?
4. API đang phục vụ web hay mobile?
5. Bạn muốn refresh token không?Đỡ phải:
AI đoán → code → lỗi → sửa → đoán tiếp.
Nhưng cũng đừng bắt AI hỏi 50 câu
😂
Nếu bạn nói:
Trước khi trả lời hãy hỏi tôi 100 câu.thì chúc mừng.
Bạn vừa biến AI thành một nhân viên hành chính rất máy móc, cứng nhắc...và luôn khiến mọi người...mệt mỏi!
"Xin vui lòng điền biểu mẫu A."
"Xin vui lòng xác nhận biểu mẫu B."
"Xin vui lòng xác nhận bạn đã xác nhận biểu mẫu A."
😭
Mục tiêu là:
hỏi những thứ thật sự cần.
Một prompt debug rất đáng lưu lại
Bạn có thể dùng template này:
Tôi đang làm [MÔ TẢ PROJECT].
Tôi đang dùng [NGÔN NGỮ / FRAMEWORK / VERSION].
Tôi muốn [MỤC TIÊU].
Đây là code liên quan:
[CODE]
Đây là lỗi / kết quả thực tế:
[ERROR / OUTPUT]
Kết quả tôi mong muốn:
[EXPECTED RESULT]
Hãy:
1. xác định nguyên nhân có khả năng nhất
2. giải thích dễ hiểu
3. chỉ ra cách kiểm tra
4. đề xuất cách sửa
5. đưa code sửa
6. giải thích phần đã thay đổi
Nếu thiếu thông tin quan trọng, hãy hỏi tôi trước khi đoán.Không cần dùng y chang mỗi lần.
Nhưng đây là một khung tư duy rất tốt.
Một prompt code mới
Tôi đang học [NGÔN NGỮ].
Tôi là người mới.
Tôi muốn xây [CHỨC NĂNG].
Yêu cầu:
- [YÊU CẦU 1]
- [YÊU CẦU 2]
- [YÊU CẦU 3]
Hãy:
- đưa code hoàn chỉnh
- giải thích từng phần
- chỉ ra các lỗi người mới thường gặp
- đưa một vài test case đơn giảnBạn có thể thay:
Pythonbằng:
C
PHP
JavaScriptv.v.
Một prompt review code
Đây cũng là cách dùng AI rất hay.
Thay vì:
"Code này đúng không?"
hãy thử:
Hãy review đoạn code dưới đây.
Hãy kiểm tra:
- bug
- readability
- performance
- security
- edge cases
Đừng viết lại toàn bộ code ngay.
Trước tiên hãy liệt kê vấn đề theo mức độ:
critical
important
minor
Sau đó giải thích từng vấn đề.Bạn đang biến AI thành một người review code.
Nhưng vẫn phải nhớ:
Review của AI cũng cần được kiểm tra.
Prompt cho việc học
Đây có lẽ là cách mình thích nhất.
Bạn có thể nói:
Tôi đang học Python.
Hãy cho tôi một bài tập về vòng lặp.
Đừng đưa đáp án ngay.
Chỉ cho tôi đề bài.
Sau khi tôi gửi code,
hãy review và chỉ ra lỗi.
Nếu tôi sai,
đừng sửa toàn bộ ngay.
Hãy cho tôi một gợi ý trước.Ồ.
Bây giờ AI không còn là:
"máy trả lời bài tập".
Nó trở thành:
"người hướng dẫn tận tình".
Và bạn vẫn phải tự làm.
Đây mới là "học cùng AI"
Một vòng học có thể là:
AI đưa bài tập
↓
Bạn tự code
↓
Bạn chạy
↓
Bạn gặp lỗi
↓
Bạn tự debug
↓
Hỏi AI nếu cần
↓
AI gợi ý
↓
Bạn sửa
↓
Bạn chạy lại
↓
Bạn hiểuCách này khác rất xa:
AI:
"Đây là đáp án."
Bạn:
"Thanks."
😂
Chua thêm 😭
Có một cuộc hội thoại rất dễ xảy ra:
Bạn:
Viết code Python đọc file CSV.
AI:
> Đây là code.
Bạn:
Không chạy.
AI:
> Bạn hãy kiểm tra file.
Bạn:
File có rồi.
AI:
> Bạn hãy kiểm tra đường dẫn.
Bạn:
Đúng rồi.
AI:
> Bạn hãy kiểm tra encoding.
Bạn:
Cũng đúng.
AI:
> Bạn hãy gửi error message.
Bạn:
"FileNotFoundError"
AI:
> À! 😄
Bạn:
Vậy sao lúc đầu không hỏi? Đau hết cả đầu!
😂
Đây chính là lý do context quan trọng.
Checklist: Nói chuyện với AI hiệu quả
Trước khi gửi prompt, thử hỏi:
- AI có biết tôi đang làm gì không?
- AI có biết mục tiêu không?
- AI có biết tôi dùng ngôn ngữ/công nghệ gì không?
- Tôi đã đưa error message thật chưa?
- Tôi đã cho biết kết quả mong muốn chưa?
- Có giới hạn nào AI cần biết không?
- Tôi muốn code, giải thích, review hay debug?
- Tôi có cần AI hỏi lại nếu thiếu thông tin không?
- Task có quá lớn không?
- Có thể chia nhỏ không?
- Có thông tin nhạy cảm nào tôi đang định gửi không?
Nếu câu trả lời cho những câu quan trọng là "có"...
prompt của bạn thường sẽ rõ hơn rất nhiều.
FAQ nhanh
Prompt Engineering có phải học một ngôn ngữ mới không?
Không.
Bạn không cần học một "ngôn ngữ prompt" riêng.
Điều quan trọng là biết diễn đạt mục tiêu, context, yêu cầu và giới hạn rõ ràng.
Prompt càng dài càng tốt?
Không.
**Rõ ràng quan trọng hơn dài.**
Có cần lúc nào cũng nói "Bạn là chuyên gia..." không?
Không.
Đó có thể là một phần của prompt trong một số trường hợp, nhưng không phải phép thuật.
Context và yêu cầu cụ thể thường quan trọng hơn.
Có cần dùng tiếng Anh để AI hiểu tốt hơn không?
Không nhất thiết.
Bạn có thể dùng tiếng Việt.
Nếu cần code, hãy giữ nguyên tên hàm, biến, error message và thuật ngữ kỹ thuật cần thiết.
AI không hiểu ý tôi thì sao?
Đừng chỉ lặp lại:
> "Không đúng."
Hãy nói rõ:
```text
Kết quả này chưa đúng vì...
Tôi muốn...
Bạn đang hiểu nhầm phần...Sau đó đưa thêm context.
Bạn có thể cũng đang gặp...
- "AI Agent là gì?"
- "Dùng ChatGPT để code hiệu quả"
- "Python và Automation"
- "Web Scraping là gì?"
- "API là gì?"
- "JSON là gì?"
- "Đọc CSV bằng Python"
Nhìn lại sẽ thấy một điều khá thú vị:
Prompt tốt không tự nhiên xuất hiện.
Nó thường đến từ việc:
bạn hiểu vấn đề tốt hơn.