Cách dùng AI lập trình an toàn và hiệu quả

Giao việc cho AI như đồng nghiệp, rồi soi lại sản phẩm như kiểm duyệt viên. Gợi ý prompt debug, viết code, tạo test case và những lưu ý cốt lõi.

9 phút đọcĐã cập nhật

Glass blocks connected by glowing lines with small gears

AI chat thực sự hữu ích cho việc lập trình: giải thích mã nguồn lạ lẫm, tìm nguyên nhân gây lỗi, viết mã khung (boilerplate), phác thảo kiểm thử và hướng dẫn bạn học một ngôn ngữ hoặc thư viện mới. Tuy nhiên, nó cũng thường xuyên tự tin đưa ra câu trả lời sai, vì vậy bạn nên coi mỗi phản hồi như một pull request từ một đồng nghiệp nhanh nhạy nhưng ẩu đoảng. Hướng dẫn này sẽ chỉ cho bạn cách đặt câu hỏi hiệu quả và cách kiểm tra lại kết quả nhận được.

AI chat làm tốt những gì trong lập trình

  • Giải thích mã nguồn: "hãy hướng dẫn tôi chi tiết từng dòng trong hàm này".
  • Gỡ lỗi (debug): đọc thông báo lỗi và stack trace rồi gợi ý các nguyên nhân tiềm ẩn.
  • Các hàm nhỏ, có mục tiêu rõ ràng: phân tích ngày tháng, xác thực đầu vào, chuyển đổi dữ liệu.
  • Mã khung (boilerplate): tệp cấu hình, phân tích đối số dòng lệnh, trình xử lý API cơ bản.
  • Kiểm thử: phác thảo unit test, bao gồm cả các trường hợp biên (edge case) mà bạn bỏ quên.
  • Regex, SQL và các lệnh shell một dòng, đi kèm phần giải thích cho từng đoạn.
  • Học tập: "Tôi biết Python; hãy chỉ cho tôi cách viết đoạn này trong Go và giải thích sự khác biệt".
  • Review code: phát hiện các vấn đề về khả năng đọc, thiếu xử lý lỗi và các lỗ hổng bảo mật hiển nhiên.

AI sẽ yếu hơn ở các quyết định kiến trúc lớn phụ thuộc vào toàn bộ codebase của bạn, ở các phiên bản thư viện quá mới mà nó chưa kịp cập nhật, và bất kỳ thứ gì nó không thấy được. Trong một công cụ chat như ChatG, AI chỉ thấy những gì bạn dán vào. Nó không thể mở tệp hay chạy mã nguồn của bạn.

Cách nhờ sửa lỗi

Hầu hết các câu trả lời kém chất lượng đều do thiếu ngữ cảnh. Một câu lệnh gỡ lỗi tốt cần có năm yếu tố: ngôn ngữ và phiên bản, đoạn mã liên quan, toàn bộ thông báo lỗi, kết quả bạn mong đợi so với thực tế diễn ra, và những gì bạn đã thử làm.

Yếu:
Code của tôi không chạy, sửa giúp với.
[dán 200 dòng code]
Mạnh:
Python 3.12, pandas 2.x. Hàm này cần trả về giá trị đơn hàng trung bình
trên mỗi khách hàng, nhưng lại báo lỗi KeyError: 'customer_id'.

Mã nguồn:
[chỉ dán hàm này và 5 dòng dữ liệu mẫu]

Toàn bộ traceback:
[dán vào đây]

Tôi đã kiểm tra và thấy tệp CSV có cột customer_id. Các nguyên nhân
khả dĩ là gì? Hãy giải thích cách khắc phục trước khi đưa ra đoạn mã đã sửa.

Hãy rút gọn mã nguồn xuống phần nhỏ nhất mà vẫn tái hiện được vấn đề. Thao tác đó đôi khi đã giúp bạn tự nhận ra lỗi, đồng thời giữ cho các dòng quan trọng luôn được tập trung. Bạn có thể mở câu lệnh gỡ lỗi trong chat và điền thông tin vào các chỗ trống.

Cách yêu cầu viết mã mới

Hãy viết một bản đặc tả ngắn gọn. Bạn mô tả đầu vào, đầu ra và các trường hợp biên càng chính xác bao nhiêu, bạn càng ít phải sửa lại bấy nhiêu.

Viết một hàm TypeScript slugify(title: string): string.
- Chữ thường, chỉ dùng ASCII; chuyển đổi các ký tự có dấu phổ biến
  (ví dụ: é thành e).
- Thay thế chuỗi các ký tự không phải chữ và số bằng một dấu gạch nối.
- Cắt bỏ dấu gạch nối ở hai đầu; độ dài tối đa 60, không cắt giữa chừng một từ.
- Không dùng thư viện ngoài.
Sau đó viết 8 unit test bằng Vitest, bao gồm cả chuỗi rỗng và
đầu vào có chứa emoji.

Hãy yêu cầu kiểm thử cùng lúc với mã nguồn. Nếu các bài kiểm thử của AI và mã của nó mâu thuẫn nhau, bạn đã phát hiện ra vấn đề trước khi đưa vào sản phẩm thực tế.

Hãy nói rõ những gì bạn không muốn: "không dùng thư viện ngoài mới", "giữ nguyên cấu trúc hàm hiện tại", "chỉ dùng thư viện chuẩn", "không thay đổi bất cứ thứ gì ngoài hàm này". Nếu không có giới hạn, AI thường có xu hướng viết lại nhiều hơn mức bạn yêu cầu.

Kiểm tra mọi thứ trước khi triển khai

Mã nguồn do AI tạo ra có thể trông rất gọn gàng nhưng vẫn sai. Hãy biến các bước kiểm tra này thành thói quen:

  1. Chạy thử. Đừng bao giờ đưa mã nguồn vào dự án mà chưa chạy thử nó cùng các bài kiểm thử.
  2. Kiểm tra xem mọi hàm và tùy chọn có tồn tại hay không. AI đôi khi tự bịa ra các phương thức, tham số hoặc khóa cấu hình, hoặc sử dụng những thứ từ phiên bản cũ. Hãy tra cứu chúng trong tài liệu chính thức của đúng phiên bản bạn đang dùng.
  3. Kiểm tra tên từng gói trước khi cài đặt. Các nhà nghiên cứu bảo mật đã ghi nhận trường hợp trợ lý AI gợi ý các gói không hề tồn tại, và kẻ tấn công có thể đăng ký các tên đó để cài mã độc (hình thức tấn công đôi khi được gọi là "slopsquatting"). Hãy xác nhận gói đó là hàng thật, vẫn đang được duy trì trên kho lưu trữ chính thức trước khi cài đặt.
  4. Đánh giá bảo mật. Để mắt tới các câu lệnh SQL ghép chuỗi, việc thiếu xác thực đầu vào, tắt kiểm tra chứng chỉ, lộ secret trong mã nguồn và quyền hạn quá rộng. Hãy hỏi thẳng AI: "Hãy đánh giá vấn đề bảo mật của đoạn này, giả định rằng mọi dữ liệu đầu vào đều mang tính phá hoại."
  5. Đọc cho đến khi hiểu rõ. Nếu bạn không thể giải thích một khối lệnh làm gì, hãy hỏi lại, hoặc đừng merge nó. Chính bạn sẽ là người phải bảo trì nó sau này.

Không đưa thông tin mật và mã nguồn riêng tư vào khung chat

Không bao giờ dán API key, mật khẩu, token, khóa riêng tư (private key) hoặc chuỗi kết nối vào bất kỳ AI chat nào. Hãy thay thế chúng bằng các văn bản giữ chỗ như YOUR_API_KEY. Nếu bạn vô tình làm lộ một thông tin mật thực sự ra ngoài hệ thống của mình, hãy thu hồi và tạo mới (rotate) ngay lập tức.

Nếu bạn viết mã cho một công ty hoặc khách hàng, hãy kiểm tra chính sách của họ trước khi dán mã nguồn vào bất kỳ dịch vụ AI bên ngoài nào. Nhiều công ty chỉ cho phép sử dụng các công cụ đã được phê duyệt cho mã nguồn độc quyền. Khi không chắc chắn, hãy quy gọn vấn đề thành một ví dụ chung chung không làm lộ thông tin dự án. Hướng dẫn về quyền riêng tư và an toàn AI của chúng tôi sẽ đề cập chi tiết hơn về vấn đề này.

Các câu lệnh hữu ích cho lập trình viên

Giải thích đoạn mã này cho một lập trình viên biết [ngôn ngữ] nhưng chưa từng
dùng thư viện này. Đi qua từng khối lệnh, sau đó liệt kê những điểm có vẻ
rủi ro hoặc lỗi thời.
[dán mã nguồn]
Review bản diff này như một kỹ sư cấp cao (senior). Phân loại nhận xét thành: lỗi,
bảo mật, hiệu năng và khả năng đọc. Hãy cụ thể và trích dẫn các dòng
bạn đang nhắc tới.
[dán diff]
Viết một biểu thức chính quy (regex) khớp với [mô tả]. Giải thích từng phần,
sau đó đưa ra 5 chuỗi khớp và 5 chuỗi không khớp.
Tôi thành thạo Python và đang học Rust. Hãy chỉ cho tôi cách [tác vụ] trong Rust,
và giải thích cơ chế ownership và borrowing như thể tôi chưa từng nghe về chúng.

Bạn có thể tìm thấy nhiều mẫu hơn trong bộ sưu tập câu lệnh lập trình. Đối với các tác vụ nhanh, công cụ trợ lý mã nguồn sẽ nhận mô tả hoặc đoạn mã rồi trả về mã nguồn kèm giải thích, và trợ lý lập trình tích hợp sẵn sẽ duy trì phong cách chuyên sâu cho nhà phát triển trong suốt cuộc trò chuyện.

Các sai lầm phổ biến

  • Dán cả dự án vào. Các đoạn dán quá dài sẽ làm lu mờ phần quan trọng và có thể vượt quá khả năng xử lý cùng lúc của AI. Chỉ gửi các tệp hoặc hàm thực sự liên quan.
  • Chấp nhận cách "sửa lỗi" che giấu triệu chứng. Bọc mọi thứ trong khối try/except chỉ làm biến mất thông báo lỗi chứ không sửa được lỗi. Hãy hỏi tại sao lỗi đó lại xảy ra.
  • Đi vào ngõ cụt. Nếu thử hai hoặc ba lần đều thất bại, hãy dừng lại và đổi hướng tiếp cận: bổ sung ngữ cảnh, đưa ví dụ nhỏ hơn, hoặc mở một đoạn chat mới với bản tóm tắt vấn đề rõ ràng.
  • Không nêu rõ phiên bản. API của framework thường thay đổi giữa các phiên bản lớn, vì vậy hãy nói rõ bạn đang dùng phiên bản nào.
  • Bỏ qua giấy phép phần mềm (license). Nếu AI tạo ra một đoạn mã lớn dễ nhận diện của người khác, hãy kiểm tra giấy phép của nó trước khi sử dụng.

Xem thêm cách các lập trình viên sử dụng ChatG và hướng dẫn viết câu lệnh tổng quát.

Quy trình làm việc giúp bạn luôn nắm quyền kiểm soát

  1. Mô tả mục tiêu trước, chưa đưa mã vội. Yêu cầu gợi ý hai hoặc ba hướng tiếp cận khả thi cùng các điểm đánh đổi trước khi viết bất kỳ dòng mã nào.
  2. Chọn một hướng và yêu cầu thực hiện bước nhỏ đầu tiên. Xử lý từng hàm hoặc từng tệp một sẽ dễ kiểm tra hơn nhiều so với cả một tính năng lớn.
  3. Chạy thử và phản hồi lại. Dán kết quả thực tế hoặc lỗi gặp phải, đừng chỉ nói "nó không chạy".
  4. Yêu cầu viết kiểm thử, sau đó nhờ review. Câu hỏi "Đoạn này còn bỏ sót trường hợp biên nào không?" thường sẽ giúp bạn phát hiện ra lỗi tiếp theo.
  5. Tự tay viết commit message. Nếu bạn không thể tóm tắt những gì đã thay đổi và lý do tại sao, tức là bạn vẫn chưa thực sự hiểu rõ sự thay đổi đó.

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

AI có thể thay thế việc học lập trình không?

Không. Nó chỉ giúp những người có khả năng đọc và đánh giá mã nguồn làm việc nhanh hơn. Nếu bạn không thể nhận biết câu trả lời đúng hay sai, bạn không thể sử dụng nó một cách an toàn. Hãy dùng AI để học nhanh hơn: hỏi tại sao, chứ không chỉ hỏi làm thế nào.

AI xử lý được những ngôn ngữ lập trình nào?

AI chat nhìn chung xử lý rất tốt các ngôn ngữ phổ biến như Python, JavaScript, TypeScript, Java, C#, C++, Go, PHP, SQL và shell script, nhưng kém tin cậy hơn với các ngôn ngữ hiếm. Chất lượng câu trả lời cũng giảm đối với các thư viện và phiên bản quá mới.

ChatG có thể chạy mã của tôi hay xem repository của tôi không?

Không. ChatG là công cụ trò chuyện: nó chỉ thấy những gì bạn dán vào và không thực thi mã nguồn. Bạn hãy tự chạy và kiểm thử mọi thứ trong môi trường của mình.

Mã nguồn do AI tạo ra có an toàn để dùng cho mục đích thương mại không?

Hãy coi nó như mã nguồn lấy từ bất kỳ nguồn bên ngoài nào: review kỹ, chạy kiểm thử, kiểm tra giấy phép của các phần phụ thuộc cũng như đoạn mã có dấu hiệu sao chép, và tuân thủ chính sách của công ty bạn. Đây là thông tin chung, không phải lời khuyên pháp lý.

Sẵn sàng hỗ trợ bạn

Mở khung chat và đặt câu hỏi đầu tiên. Hoàn toàn miễn phí và không cần cài đặt bất cứ thứ gì.

Bắt đầu trò chuyện