Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 5 — Cấu trúc prompt cho tác vụ code: rõ ràng, có ràng buộc, có tiêu chí

Đã đọc 0/8 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Prompt code khác prompt chat

Với coding agent, prompt tốt không phải văn hoa mà là đặc tả kỹ thuật gọn: mục tiêu, ràng buộc, phạm vi, tiêu chí nghiệm thu. Model đã giỏi viết code; việc của bạn là khử mơ hồ để nó không đoán sai.

Khung TCREV cho prompt code

T - Task (mục tiêu): làm gì, chính xác
C - Context (bối cảnh): file/hàm liên quan (đã nạp)
R - Ràng buộc: quy ước, thư viện được/không được dùng
E - Example (mẫu): mẫu output hoặc code tương tự đã đúng
V - Verify (nghiệm thu): làm sao biết là xong

Ví dụ: prompt mơ hồ vs prompt tốt

Mơ hồ: "Viết chức năng gửi email." → agent tự chọn thư viện, tự đặt tên, không xử lý lỗi.

Tốt (TCREV):

Task: Thêm hàm send_welcome_email(user_id) gửi email chào mừng.
Context: dùng EmailClient trong services/email.py (đã đọc).
Ràng buộc:
- Dùng EmailClient hiện có, KHÔNG thêm thư viện mới.
- Template lấy từ templates/welcome.html.
- Retry 3 lần nếu SMTP lỗi; log qua logger hiện có.
Example: theo mẫu send_reset_email() cùng file.
Verify: thêm test giả lập EmailClient, pytest tests/test_email.py pass.

Agent gần như không còn gì để đoán sai.

Kỹ thuật quan trọng

  • Ràng buộc phủ định — nói rõ điều KHÔNG được làm ("không đổi API public", "không thêm dependency"). Chặn cả lớp lỗi.
  • Chỉ tới ví dụ trong repo — "làm theo send_reset_email" mạnh hơn mọi mô tả, vì agent bắt chước phong cách thật.
  • Phạm vi rõ (scope) — "chỉ sửa email.py, không đụng route" tránh agent refactor lan man.
  • Tiêu chí nghiệm thu bằng lệnh — "pytest ... pass" cho agent mục tiêu tự kiểm chứng.
  • Chia nhỏ tác vụ lớn — một prompt = một thay đổi mạch lạc, dễ review.

Các bước soạn một prompt code tốt

  • Viết một câu mục tiêu duy nhất, cụ thể.
  • Liệt kê file liên quan (và đảm bảo đã nạp).
  • Ghi 2-4 ràng buộc, gồm ít nhất một điều CẤM.
  • Chỉ tới một ví dụ mẫu nếu có.
  • Ghi tiêu chí nghiệm thu bằng lệnh chạy được.
  • Giới hạn phạm vi file được phép sửa.

Checklist trước khi bấm gửi

  • [ ] Mục tiêu một câu, không mơ hồ
  • [ ] File liên quan đã nạp vào context
  • [ ] Có ít nhất một ràng buộc phủ định
  • [ ] Có ví dụ mẫu để bắt chước (nếu có)
  • [ ] Tiêu chí "xong" là một lệnh chạy được
  • [ ] Phạm vi sửa được giới hạn

Mẫu prompt tái sử dụng được

Bạn không cần viết lại từ đầu mỗi lần. Hãy giữ một khung mẫu và điền vào chỗ trống:

[Task]   ...
[Files]  đọc: ...  (chỉ sửa: ...)
[Rules]  tuân: ...  | KHÔNG: ...
[Model]  làm theo: <hàm/mẫu đã đúng>
[Done]   <lệnh test/lint> phải pass

Ví dụ điền: Task = "thêm phân trang cho GET /orders"; Files = đọc routes/orders.py, services/order.py, chỉ sửa 2 file này; Rules = dùng tham số page, size; KHÔNG đổi schema response cũ; Model = theo GET /users đã có phân trang; Done = pytest tests/test_orders.py pass. Một prompt như vậy gần như không để agent chỗ nào để đoán sai, và bạn tái dùng khung cho mọi tác vụ.

Sai lầm thường gặp

  • Prompt một dòng cho tác vụ lớn — "làm hệ thống thanh toán" → agent đi lung tung. Chia nhỏ.
  • Quên ràng buộc phủ định — agent tự thêm thư viện, đổi API, refactor ngoài ý muốn.
  • Không có tiêu chí nghiệm thu — agent "báo xong" nhưng chưa chạy gì; bạn không có cơ sở kiểm.
  • Mô tả dài dòng thay vì chỉ ví dụ — một mẫu code đúng trong repo đáng giá hơn ba đoạn văn.
  • Trộn nhiều mục tiêu vào một prompt — khó review, dễ lỗi chồng lỗi.
  • Không cố định phạm vi sửa — quên nói "chỉ sửa file X" khiến agent lan man sang chỗ khác.
Prompt có cấu trúc + context đúng = agent chạy gần như tự động. Bài sau đi sâu vào chống ảo giác.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi