Mục lục
Thử nghiệm táo bạo: 2 tháng chỉ sử dụng AI để viết code
Trong hai tháng qua, tôi đã thực hiện một thử nghiệm đầy thách thức: Xây dựng một dịch vụ thực tế hoàn toàn bằng cách sử dụng các tác nhân AI viết code. Đối tượng của thử nghiệm là mcp.sentry.dev – giải pháp của chúng tôi để đưa các tác nhân AI vào quy trình làm việc của Sentry. Đây không phải là dịch vụ quan trọng nhất nên rủi ro thấp hơn, đồng thời nó hoạt động độc lập nên rất phù hợp cho thử nghiệm.
Giới thiệu về dự án MCP
Khác với nhiều dự án “viết code theo cảm hứng” khác, MCP là một dịch vụ thực sự có khách hàng sử dụng. Được triển khai từ tháng 4, MCP hoạt động như một lớp bao bọc cao cấp cho các API công khai của chúng tôi. Dịch vụ này chạy trên nền tảng đám mây, xác thực người dùng qua OAuth, cung cấp các tính năng tối ưu cho AI và bao gồm nhiều mẫu thiết kế phức tạp giữa các tác nhân AI.
Cấu trúc thư mục của dự án khá phức tạp:
- Core MCP server implementation với 19+ công cụ
- Giao diện web & API trên Cloudflare
- Bộ đánh giá AI
- Máy chủ mock cho testing
- Tài liệu kỹ thuật tập trung vào AI
Chiến lược cung cấp ngữ cảnh qua tài liệu
Để cải thiện độ tin cậy, tôi tập trung vào việc tạo các hướng dẫn chi tiết cho AI. Cách tiếp cận này tương tự như khi bạn chỉ cho đồng nghiệp mới một tính năng bằng cách tham khảo code hiện có, nhưng có hệ thống và chính xác hơn.
Tuy nhiên, phương pháp này vẫn chưa thực sự đáng tin cậy. AI thường bỏ qua các hướng dẫn trừ khi chúng được nhắc rõ ràng trong prompt hiện tại. Chúng dường như gặp khó khăn trong việc “nhớ lại” thông tin đã được cung cấp trước đó.
Lời khuyên khi tạo tài liệu cho AI:
- Tạo tài liệu mẫu cho các thành phần cơ bản (API routes, tests…)
- Loại bỏ thông tin không cần thiết như hướng dẫn debug
- Luôn tham chiếu tài liệu trong prompt và cập nhật chúng thường xuyên
- Tạo meta docs hướng dẫn AI cách viết tài liệu mới
Quy trình thiết kế tính năng với AI
Trong hai tháng, mọi tính năng mới, sửa lỗi hay cải tiến đều được thực hiện thông qua AI. Tôi chủ yếu sử dụng Claude Code cho thử nghiệm này.
Các phiên làm việc hiệu quả thường bắt đầu bằng:
- Yêu cầu AI lập kế hoạch chi tiết (sử dụng chế độ planning)
- Cung cấp prompt đầu vào đầy đủ thông tin
- Điều chỉnh kế hoạch cho đến khi đạt yêu cầu
- Yêu cầu AI ghi kế hoạch ra file markdown
Tuy nhiên, ngay cả với quy trình này, AI vẫn thường đi chệch hướng, đặc biệt với các tính năng không có tiền lệ rõ ràng. Nó thường bỏ qua các hướng dẫn phụ và cần được nhắc lại liên tục.
Giai đoạn tinh chỉnh: Khi code “gần đúng” là chưa đủ
Vấn đề lớn nhất với cách viết code này là ngay cả khi code chạy được, nó thường khó bảo trì. AI thường tạo ra code trùng lặp, không sử dụng hoặc vi phạm các quy tắc (như sử dụng kiểu ‘any’ khi chúng tôi cấm điều đó).
Tôi thường phải yêu cầu AI xem xét lại implementation ít nhất 3 lần cho mỗi tính năng. Quá trình này giống như chơi máy đánh bạc – đôi khi bạn thắng và cảm thấy phấn khích, nhưng thực tế lại rất tốn thời gian so với cách làm thủ công.
Thách thức về ngữ cảnh và cửa sổ bộ nhớ
Một vấn đề nan giải khác là giới hạn về khả năng “nhớ” của AI. Dù có cửa sổ ngữ cảnh lớn hơn, chúng vẫn không xử lý tốt trọng lượng thông tin trong đó. Khác với con người có thể hiểu ngữ cảnh ngầm, AI cần mọi thứ được nói rõ ràng.
Giải pháp là tập trung vào:
- Giảm thiểu thông tin cần thiết để đạt kết quả
- Chia nhỏ nhiệm vụ
- Cung cấp thông tin chính xác ngay từ đầu
Khi nào nên dừng lại?
Sau nhiều thử nghiệm, tôi nhận ra rằng công nghệ hiện tại chưa thể thay thế hoàn toàn kỹ sư phần mềm. Trường hợp điển hình là khi tôi mất 3 ngày để AI xây dựng tính năng search_events, trong khi tự làm chỉ mất một buổi chiều.
Tuy nhiên, điều đó không có nghĩa là nên bỏ qua AI hoàn toàn. Chúng ta nên sử dụng chúng như công cụ hỗ trợ:
- Tạo code mẫu cho các task lặp đi lặp lại
- Hỗ trợ review code
- Giải quyết các vấn đề phức tạp
Thay vì tin vào những tuyên bố quá mức về “vibe coding”, hãy xem AI như trợ lý đắc lực để nâng cao năng suất. Hãy thử nghiệm và tự đúc kết kinh nghiệm, bởi thực tế đơn giản hơn nhiều so với những gì người ta thường mô tả.



