Tôi dùng AI để viết code. Nó hoạt động. Tôi ghét nó.
Một chuyên gia bảo mật AI đã phải sử dụng các công cụ mã hóa sinh trắc học để hoàn thành một dự án thực tế. Dù kết quả là một ứng dụng mã nguồn mở hoạt động tốt và an toàn, nhưng quá trình xây dựng dựa trên sự tương tác với mô hình ngôn ngữ lớn (LLM) lại đầy mệt mỏi và đòi hỏi sự giám sát nghiêm ngặt để tránh các lỗi tiềm ẩn.

Tôi là người phản đối mạnh mẽ nhất đối với các công cụ mã hóa sinh trắc học (genAI). Và dẫu vậy, trong tháng qua, tôi đã sử dụng chúng để hoàn thành một dự án lập trình. Nó hoạt động. Tôi ghét việc phải làm nó như vậy.
Dù cảm thấy tự ái vì phải làm điều này, tôi nhận ra mình không thể phủ nhận tính thực tế. Với vai trò chuyên gia bảo mật AI, tôi cần hiểu sâu sắc về các công cụ này để ngăn chặn các lỗ hổng trong các ứng dụng được triển khai. Tuy nhiên, tôi cũng nhận thức rõ những tác hại xã hội và môi trường do chúng gây ra. Vấn đề là tôi cần chúng để hiểu chúng, dù không mong muốn sử dụng chúng.
Dự án này liên quan đến việc di chuyển cơ sở đào tạo "Taggart Institute" khỏi hai nền tảng thương mại sang Discourse. Một tính năng khó thực hiện là trình tạo chứng chỉ hoàn thành khóa học. Các giải pháp hiện tại không đáp ứng đủ tốt nhu cầu của chúng tôi, đặc biệt là khi người dùng trên LinkedIn rất thích khoe thành tích.
Tôi quyết định thử nghiệm phát triển bằng Claude Code. Nếu thành công, tôi sẽ có giải pháp. Nếu thất bại, tôi ít nhất sẽ hiểu rõ hơn về công nghệ này. Spoiler alert: nó thành công. Mã nguồn đã được đưa vào sản xuất, phục vụ cho người dùng của Taggart Institute.
Mã nguồn hoàn chỉnh: [Link]
Đối với dự án này, tôi đã xây dựng một trình chặn webhook nhận chi tiết hoàn thành khóa học (tên học viên, email, tên khóa học) và tạo một PDF chứng chỉ có mã định danh duy nhất và kiểm tra được. Chứng chỉ sẽ được gửi qua email, kèm theo mã QR trỏ đến trang xác minh trên ứng dụng.
Dự án sử dụng Rust cho phía backend, Svelte cho giao diện người dùng, và Typst cho việc tạo PDF. Tôi sử dụng Claude Code với phiên bản Sonnet 4.6. Phương pháp chính là kiểm thử dẫn dắt phát triển (TDD).
Tôi đã áp dụng chế độ "Lập kế hoạch" của Claude Code. Thay vì viết mã ngay lập tức, mô hình sẽ tạo ra một kế hoạch, được lưu vào một tệp Markdown bên ngoài để duy trì ngữ cảnh. Tôi cũng duy trì tệp TASKS.md để theo dõi tiến độ. Đa số thời gian tôi dành cho việc viết Markdown thay vì viết code trực tiếp.
Quá trình này thực sự là một trải nghiệm tồi tệ. Tôi đã dành phần lớn thời gian đọc các đề xuất mã và nhấn phím "1" để chấp nhận. Tôi giống như một chú chim uống nước (Homer's drinking bird), luôn trong trạng thái nhấp nút. Cơn thèm muốn nhấn "2" (chấp nhận tất cả) là rất lớn. Nếu bạn chấp nhận từng cái một, tại sao không chấp nhận tất cả cùng lúc? Nhưng đó chính là con đường dẫn đến thảm họa. Nếu bạn ngừng soi xét, xác suất xảy ra lỗi sẽ tiến tới 100%.
Điều này làm cho việc giữ "con người trong vòng lặp" trở nên nhàm chán và khuyến khích con người rút lui khỏi vòng lặp đó. Tôi đã phải đọc từng dòng mã mà mô hình tạo ra. Việc hiểu sâu về mã nguồn trở nên khó khăn hơn, vì tôi không còn là người xây dựng ngôi nhà trong đầu mà là người phải hiểu sau khi nó đã được dựng lên.
Tuy nhiên, mô hình đã gặp phải các lỗi (hallucination) ít khi xuyên suốt. Một số lần nó đã giả định các phương thức không tồn tại trong thư viện, nhưng các kiểm tra biên dịch của Rust đã buộc nó sửa lại. Một lần, trong khi sửa lỗi bảo mật, nó đã tạo ra một vectơ tấn công DoS không rõ ràng. May mắn thay, tôi đã phát hiện ra nó nhờ việc đọc kỹ từng thay đổi.
Điều thú vị nhất là khi tôi yêu cầu mô hình đóng vai trò chuyên gia bảo mật để kiểm tra mã. Nó đã tìm ra một số lỗ hổng nghiêm trọng, bao gồm lỗi truy cập đường dẫn (path traversal) và vấn đề tiềm ẩn trong hàm băm Argon2 (thời gian thực thi phụ thuộc vào mật khẩu). Điều này cho thấy các công cụ AI có thể thực hiện phân tích tĩnh bảo mật hiệu quả, giúp cải thiện an toàn cho ứng dụng.
Dự án này hoàn thành trong ba tuần, trong khi cùng một dự án trước đây tôi đã mất sáu tháng. Tôi không thể xây dựng nó tốt và nhanh đến vậy nếu không có sự hỗ trợ này. Tuy nhiên, tôi nhận thấy một vấn đề lớn: các công cụ này đòi hỏi chuyên gia để xác thực, nhưng việc sử dụng chúng lại làm giảm sự phát triển của chuyên gia đó. Làm thế nào một lập trình viên trẻ có thể học được các quy tắc nếu công việc hàng ngày của họ chỉ là trông coi cho các mô hình?
Tôi cũng nhận ra rằng công nghệ này được xây dựng trên nền tảng của sự đánh cắp. Tập dữ liệu huấn luyện chứa mã có giấy phép không được sử dụng cho mục đích này. Dù tôi có thể không sử dụng mã bị đánh cắp trong đầu ra, nhưng toàn bộ hệ thống trọng số và mã thông tin đều bị liên kết chặt chẽ với vi phạm bản quyền.
Cuối cùng, kẻ thực sự đáng sợ không phải là mô hình AI, mà là những người đứng sau nó lợi dụng công nghệ để bóc lột lao động. Chúng ta không nên mâu thuẫn nhau về việc sử dụng công cụ, mà nên tập trung vào việc chống lại sự bóc lột.
Mô tả: Một chú chim uống nước hoạt động liên tục, tượng trưng cho quá trình lặp lại việc chấp nhận mã từ AI
Tôi sẽ sử dụng công cụ này một lần nữa, nhưng sẽ được đánh dấu rõ ràng và tuân thủ các nguyên tắc an toàn. Tôi không thể phán xét những người khác vì đã chọn nó, nhưng tôi cũng không thể phủ nhận những rủi ro mà nó mang lại.
Bài viết liên quan

Phần mềm
Anthropic ra mắt Claude Opus 4.7: Nâng cấp mạnh mẽ cho lập trình nhưng vẫn thua Mythos Preview
16 tháng 4, 2026

Công nghệ
Qwen3.6-35B-A3B: Quyền năng Lập trình Agentic, Nay Đã Mở Cửa Cho Tất Cả
16 tháng 4, 2026

Công nghệ
Spotify thắng kiện 322 triệu USD từ nhóm pirate Anna's Archive nhưng đối mặt với bài toán thu hồi
16 tháng 4, 2026
