Playbook kỹ nghệ prompt dành cho lập trình viên
(addyo.substack.com)- Trợ lý lập trình AI không thể tự biết ý đồ của dự án, nên chất lượng kết quả thay đổi rất lớn tùy vào việc nhà phát triển cung cấp ngữ cảnh, mục tiêu và ví dụ tốt đến mức nào
- Khi debug, thay vì chỉ ném vào đoạn mã và lỗi, nên cung cấp thêm hành vi kỳ vọng, hành vi thực tế, môi trường chạy, đồng thời thu hẹp phạm vi vấn đề bằng truy vết theo từng dòng hoặc ví dụ tái hiện tối thiểu
- Với refactor và tối ưu hóa, không nên chỉ nói “làm tốt hơn” mà cần nêu rõ tiêu chí thành công như loại bỏ trùng lặp, xử lý song song, giữ nguyên xử lý lỗi, hay ràng buộc phiên bản
- Khi triển khai tính năng mới, an toàn hơn nếu không giao toàn bộ cùng lúc mà chia thành các bước nhỏ như kế hoạch, khung sườn, quản lý trạng thái, tích hợp API và edge case để xem xét rồi mở rộng dần
- Những câu hỏi mơ hồ, yêu cầu quá mức, dump mã không có câu hỏi, hay tham chiếu không rõ ràng đều làm kết quả kém ổn định; AI nên được dùng như một pair programmer tương tác lặp lại hơn là công cụ tạo nội dung một lần
Các nguyên tắc cơ bản để dùng tốt trợ lý lập trình AI
- Trợ lý lập trình AI có thể hỗ trợ từ tự động hoàn thành hàm, gợi ý sửa lỗi, đến tạo module hoặc MVP, nhưng ý đồ cụ thể của dự án phụ thuộc vào thông tin người dùng cung cấp
- Prompt tốt là khi đối xử với AI như một “cộng tác viên hiểu theo nghĩa đen”, và hướng dẫn rõ ràng về kết quả cũng như định dạng mong muốn
- Các nguyên tắc cơ bản như sau
- Cung cấp ngữ cảnh phong phú: gồm ngôn ngữ, framework, thư viện, các hàm hoặc đoạn mã liên quan, thông báo lỗi chính xác và hành vi kỳ vọng
- Cụ thể hóa mục tiêu: thay vì hỏi “vì sao không chạy?”, hãy thu hẹp thành kiểu “vì sao hàm JavaScript này trả về
undefinedthay vì giá trị kỳ vọng, và cách sửa là gì” - Phân rã tác vụ phức tạp: không yêu cầu một tính năng lớn trong một lần, mà tiến hành tuần tự như tạo khung component React, thêm quản lý trạng thái, rồi tích hợp gọi API
- Cung cấp ví dụ đầu vào/đầu ra: ví dụ như đầu vào
[3,1,4]phải trả về[1,3,4]sẽ giảm sự mơ hồ trong yêu cầu - Chỉ định vai trò: giao vai trò như “senior React developer”, “JavaScript performance expert”, “code reviewer” có thể giúp điều chỉnh độ sâu và phong cách trả lời
- Lặp lại và chỉnh sửa: nếu câu trả lời đầu tiên chưa đúng, có thể điều chỉnh hướng bằng các yêu cầu tiếp theo như dùng vòng lặp thay vì đệ quy, cải thiện tên biến, hoặc thêm chú thích
- Giữ mã rõ ràng: tên hàm và biến có ý nghĩa, định dạng nhất quán, chú thích và docstring là các đầu mối giúp AI hiểu ý đồ của mã
Mẫu prompt cho debug
- Yêu cầu debug nên đi kèm với thông tin đoạn mã phải làm gì, thực tế sai ở đâu, và lỗi nào đang xảy ra
- Một prompt debug tốt thường gồm các thông tin sau
- Ngôn ngữ sử dụng và môi trường thực thi
- Mã gây vấn đề
- Thông báo lỗi chính xác hoặc đầu ra sai
- Đầu ra kỳ vọng
- Đầu vào ví dụ
- Những cách đã thử
- Với lỗi logic phức tạp, có thể yêu cầu AI truy vết thực thi theo từng dòng để lần theo sự thay đổi trạng thái
- Ví dụ: “Hãy theo dõi giá trị
totaltrong hàm này thay đổi như thế nào ở từng bước, và tìm vị trí việc cộng dồn bị sai”
- Ví dụ: “Hãy theo dõi giá trị
- Dù codebase lớn, nếu có thể tạo một đoạn mã nhỏ tái hiện được lỗi thì nên đưa dưới dạng ví dụ tái hiện tối thiểu
- Nếu câu trả lời đầu tiên chỉ hữu ích một phần, có thể tiếp tục bằng các câu hỏi như “hãy cho tôi đoạn mã đã sửa”, “hãy giải thích vì sao thay đổi này giải quyết được vấn đề”
Ví dụ debug: câu hỏi mơ hồ và câu hỏi đã cải thiện
- Mã ví dụ là một hàm Node.js/JavaScript
mapUsersById(users)dùng để chuyển một mảng người dùng thành đối tượng dựa trên ID - Lỗi là `for (let i = 0; i
Chưa có bình luận nào.