Bài 3: Viết Prompt hiệu quả cho các tác vụ học tập
Tài liệu này hỗ trợ tải xuống phiên bản PDF học phần.
Giới thiệu
Báo cáo này được thực hiện nhằm phát triển kỹ năng viết prompt (câu lệnh) hiệu quả, từ đó tận dụng tối đa khả năng của các mô hình ngôn ngữ lớn (LLMs) để phục vụ cho việc học tập các môn chuyên ngành ở bậc đại học. Qua quá trình thử nghiệm với chủ đề Độ phức tạp thời gian của thuật toán, em mong muốn tìm ra công thức giao tiếp với AI sao cho kết quả trả về chính xác, giúp em hiểu sâu cách phân tích và đánh giá hiệu năng của các thuật toán.
Lựa chọn các tác vụ học tập để thử nghiệm prompt
Trong phần này, em đã chọn 3 tác vụ học tập phổ biến của sinh viên khoa CNTT liên quan đến chủ đề độ phức tạp thời gian và phân tích yêu cầu cho từng tác vụ đó.
| Tác vụ | Mục tiêu | Đối tượng |
|---|---|---|
| Tác vụ 1: Giải thích khái niệm ký hiệu Big-O và các lớp độ phức tạp thời gian phổ biến. | Phải làm rõ được ý nghĩa toán học của Big-O và phân biệt được các lớp O(1), O(log n), O(n), O(n log n), O(n²) một cách trực quan. | Là sinh viên năm hai mới bắt đầu học môn Cấu trúc Dữ liệu và Giải thuật, cần giải thích dễ hiểu, có ví dụ minh họa cụ thể bằng ngôn ngữ lập trình Java. |
| Tác vụ 2: Phân tích độ phức tạp thời gian của một đoạn mã nguồn cho sẵn. | Phải xác định chính xác độ phức tạp của từng vòng lặp, hàm đệ quy hoặc khối lệnh lồng nhau và đưa ra kết luận Big-O tổng thể. | Yêu cầu AI đóng vai trò trợ giảng, giải thích từng bước phân tích để sinh viên có thể học được phương pháp, không chỉ nhận kết quả. |
| Tác vụ 3: Tạo một bộ câu hỏi ôn tập về phân tích độ phức tạp thời gian cho môn Cấu trúc Dữ liệu và Giải thuật. | Cần một bộ câu hỏi bao quát từ lý thuyết (định nghĩa, so sánh) đến thực hành (phân tích code, tối ưu hóa), có độ phân hóa rõ ràng theo mức độ khó. | Yêu cầu bộ câu hỏi phải rèn luyện tư duy phân tích độ phức tạp từ đoạn code thực tế, không chỉ kiểm tra thuộc lòng định nghĩa. |
Xây dựng các phiên bản prompt cho từng tác vụ
Với các tác vụ ở trong phần I, em đã tiến hành xây dựng các prompt để thử nghiệm trên AI.
Tác vụ 1:
Prompt cơ bản: “Big-O là gì?”
Prompt cải tiến: “Hãy giải thích ký hiệu Big-O và liệt kê các lớp độ phức tạp thời gian phổ biến từ nhanh đến chậm, kèm theo ví dụ cho mỗi loại.”
Prompt nâng cao: “Đóng vai một Giảng viên môn Cấu trúc Dữ liệu và Giải thuật với nhiều năm kinh nghiệm giảng dạy. Hãy giải thích ký hiệu Big-O cho một sinh viên năm hai chưa từng học về phân tích thuật toán. Yêu cầu cấu trúc trình bày: 1 đoạn giải thích ý nghĩa trực quan của Big-O bằng một phép ẩn dụ đời thường, 1 bảng so sánh các lớp độ phức tạp O(1), O(log n), O(n), O(n log n), O(n²), O(2ⁿ) với ví dụ mã Java tương ứng cho mỗi lớp, và 1 đoạn lưu ý những sai lầm phổ biến khi sinh viên mới học về Big-O.”
Tác vụ 2:
Prompt cơ bản: “Đoạn code này có độ phức tạp bao nhiêu?”
Prompt cải tiến: “Hãy phân tích độ phức tạp thời gian của đoạn code Java dưới đây và giải thích tại sao.”
Prompt nâng cao: “Đóng vai một Trợ giảng môn Giải thuật kiên nhẫn và cẩn thận. Hãy phân tích độ phức tạp thời gian của đoạn code Java dưới đây theo từng bước:
- Xác định và giải thích độ phức tạp của từng khối lệnh / vòng lặp riêng lẻ (có đánh số dòng tương ứng).
- Áp dụng các quy tắc cộng và nhân để tính độ phức tạp tổng thể.
- Kết luận Big-O cuối cùng và giải thích tại sao các số hạng bậc thấp hơn được bỏ qua.
- Gợi ý (nếu có) cách tối ưu hóa thuật toán để cải thiện độ phức tạp.”
Tác vụ 3:
Prompt cơ bản: “Cho tôi một số câu hỏi ôn tập về Big-O.”
Prompt cải tiến: “Hãy tạo 10 câu hỏi trắc nghiệm ôn tập về độ phức tạp thời gian của thuật toán. Mỗi câu cần có 4 đáp án A, B, C, D và in đậm đáp án đúng.”
Prompt nâng cao: “Đóng vai người ra đề thi môn Cấu trúc Dữ liệu và Giải thuật. Tôi cần một bộ câu hỏi kiểm tra giữa kỳ về chủ đề Độ phức tạp Thời gian. Hãy tạo một bộ đề mô phỏng cấu trúc sau:
- 3 câu trắc nghiệm lý thuyết (Mức độ Nhớ - định nghĩa Big-O, so sánh các lớp độ phức tạp).
- 3 câu hỏi phân tích đoạn code Java ngắn (Mức độ Hiểu - xác định Big-O của đoạn code cho sẵn).
- 1 bài tập tự luận (Mức độ Vận dụng - so sánh hai thuật toán sắp xếp về độ phức tạp và đề xuất lựa chọn theo từng trường hợp sử dụng cụ thể).
Yêu cầu: Cung cấp đáp án chi tiết và lời giải từng bước ngay bên dưới mỗi câu hỏi.”
Thử nghiệm và so sánh kết quả
Dựa vào các prompt đã được xây dựng ở trên, em tiến hành thử nghiệm các phiên bản prompt trên Google Gemini.


So sánh kết quả
| Tác vụ | Cơ bản | Cải tiến | Nâng cao |
|---|---|---|---|
| Tác vụ 1 | Kết quả: AI trả về định nghĩa toán học khô khan, chứa nhiều ký hiệu và thuật ngữ kỹ thuật như “giới hạn trên tiệm cận” khiến người mới học khó tiếp thu. | Kết quả: AI đưa ra giải thích dễ hiểu hơn và có kèm ví dụ, nhưng các ví dụ còn rời rạc, chưa liên kết được các lớp độ phức tạp với nhau một cách có hệ thống. | Kĩ thuật: Role prompting, constraints, structured output Kết quả: AI xây dựng phép ẩn dụ trực quan (ví dụ: tìm tên trong danh bạ điện thoại được sắp xếp vs. chưa sắp xếp) để minh họa sự khác biệt giữa O(1), O(log n) và O(n). Bảng so sánh đầy đủ giúp người học hình thành bức tranh tổng thể về các lớp độ phức tạp. |
| Tác vụ 2 | Kết quả: AI chỉ đưa ra kết luận Big-O mà không giải thích quá trình suy luận, khiến sinh viên không học được phương pháp phân tích. | Kết quả: AI có giải thích, nhưng cách trình bày thiếu cấu trúc, đôi khi bỏ qua một số vòng lặp hoặc không làm rõ lý do bỏ qua các số hạng bậc thấp. | Kĩ thuật: Role prompting, chain-of-thought, constraints Kết quả: AI phân tích từng dòng code một cách có hệ thống, áp dụng rõ ràng quy tắc cộng và nhân để hợp nhất độ phức tạp từng khối, và chủ động gợi ý phương án tối ưu hóa. Sinh viên học được quy trình tư duy chứ không chỉ nhận đáp số. |
| Tác vụ 3 | Kết quả: AI đưa ra các câu hỏi định nghĩa lặp đi lặp lại, ít câu liên quan đến phân tích code thực tế và không có sự phân hóa độ khó rõ ràng. | Kết quả: AI tạo được 10 câu trắc nghiệm đa dạng hơn, không bị lặp, nhưng phần lớn vẫn là câu hỏi thuần lý thuyết, thiếu bài tập phân tích code. | Kĩ thuật: Role prompting, chain-of-thought, structured output Kết quả: Bộ đề có cấu trúc phân tầng rõ ràng theo thang đo Bloom, từ ghi nhớ định nghĩa đến phân tích code thực tế và vận dụng so sánh thuật toán. Đáp án kèm lời giải từng bước giúp bộ đề có giá trị ôn tập cao. |
Phân tích hiệu quả của prompt nâng cao
Qua những thử nghiệm prompt trên, em thấy prompt sử dụng các kỹ thuật prompt engineering có độ hiệu quả tốt hơn so với prompt cơ bản vì những lí do sau:
Sự rõ ràng về bối cảnh: Prompt cơ bản như “Big-O là gì?” không cung cấp thông tin gì về người hỏi, dẫn đến câu trả lời mang tính học thuật cao và thiếu tính ứng dụng. Prompt nâng cao xác định rõ đối tượng giúp AI điều chỉnh ngôn ngữ và mức độ trừu tượng phù hợp.
Tạo kết quả tối ưu ngay từ đầu: Khi yêu cầu cấu trúc cụ thể, AI không trả về một khối văn bản dài mà tổ chức thông tin thành các phần có chủ đích, giúp người đọc tiếp thu từng lớp kiến thức một cách tuần tự.
Định hướng tư duy phân tích: Đặc biệt với Tác vụ 2, yêu cầu AI giải thích “từng bước” (chain-of-thought) thay vì chỉ đưa đáp án đã giúp em học được phương pháp tư duy đằng sau kết quả.
Kiểm soát chất lượng đầu ra: Việc yêu cầu cụ thể về cấu trúc đề thi giúp loại bỏ các câu hỏi mơ hồ hoặc lặp lại, tạo ra bộ tài liệu ôn tập có giá trị thực tiễn cao hơn.
Các nguyên tắc viết prompt hiệu quả
Từ bài tập này, em rút ra được những nguyên tắc quan trọng trong việc viết prompt hiệu quả cho các tác vụ học tập:
Bối cảnh: Luôn cho AI biết bạn là ai, trình độ của bạn đến đâu và bạn đang học trong hoàn cảnh nào (VD: “Hãy giải thích Big-O cho tôi như thể tôi là sinh viên năm hai chưa học về phân tích thuật toán”).
Hướng dẫn rõ ràng: Chia nhỏ các yêu cầu phức tạp thành các bước 1, 2, 3,… có thứ tự. Tránh dùng từ ngữ chung chung như “giải thích chi tiết hơn” mà hãy nói cụ thể “giải thích theo từng bước, có kèm ví dụ mã Java”.
Xác định vai trò: Yêu cầu AI đóng vai một chuyên gia cụ thể (Giảng viên, Trợ giảng, Người ra đề) sẽ định hướng văn phong, mức độ chuyên sâu và cách tổ chức thông tin của câu trả lời.
Chuỗi tư duy (Chain-of-thought): Với các tác vụ cần phân tích (như phân tích độ phức tạp code), hãy yêu cầu AI trình bày suy luận từng bước thay vì chỉ đưa kết luận.
Tinh chỉnh: Đừng chấp nhận câu trả lời đầu tiên của AI. Hãy luôn tương tác lại dựa vào câu trả lời của nó (Ví dụ: “Giải thích lại bước 2 nhưng dùng một ví dụ code phức tạp hơn”) để tinh chỉnh kết quả cho đến khi thực sự ưng ý.