Cách tôi khiến AI ngừng "ảo giác" trên codebase fintech 3 năm tuổi của chúng tôi

Các công cụ lập trình AI thường thất bại trong các dự án thực tế (production). Chúng hoạt động tốt với mã nguồn mới nhưng lại "tan rã" trước các codebase cũ có lịch sử phát triển lâu đời.

Tôi đã học được bài học xương máu này từ dự án fintech của mình. Chúng tôi có hai frontend React, một bảng điều khiển admin và một backend FastAPI. Cơ sở dữ liệu của chúng tôi rất phức tạp, chứa các dữ liệu tài chính và người dùng nhạy cảm.

Chúng tôi đã thử dùng AI để đẩy nhanh tiến độ. Kết quả là thất bại ngay lập tức.

Tôi yêu cầu AI tạo một bảng contacts. Nó đã tạo ra các cột mới cho tên và email. Tuy nhiên, các cột này đã tồn tại trong bảng users của chúng tôi. AI đã nhân bản dữ liệu thay vì sử dụng khóa ngoại (foreign key). Nó hoàn toàn không biết rằng bảng users của chúng tôi đang tồn tại.

Tôi ngừng đặt câu hỏi làm thế nào để AI viết mã tốt hơn. Thay vào đó, tôi bắt đầu hỏi xem AI cần biết những gì để có thể đưa ra các quyết định đúng đắn.

AI chỉ giỏi tương xứng với ngữ cảnh (context) mà bạn cung cấp cho nó. Chúng tôi đã làm cho ngữ cảnh của mình trở nên rõ ràng và có tính định hướng cao. Đây là hệ thống mà chúng tôi đã xây dựng:

Các tệp ADR: Chúng tôi tạo một thư mục docs/adrs/. Các tệp này ghi lại lý do tại sao chúng tôi đưa ra các quyết định về kiến trúc. Một tệp (ADR-001) sẽ chỉ dẫn cho AI: "Kiểm tra các bảng hiện có trước. Sử dụng khóa ngoại. Tuyệt đối không nhân bản dữ liệu người dùng."

context.md: Tệp này giải thích các thuật ngữ cụ thể của chúng tôi. Nó cho AI biết các khái niệm khác nhau liên quan đến nhau như thế nào trong hệ thống.

plot.md: Đây là một bản đồ tổng quan. Nó cho thấy các phần khác nhau của dự án kết nối với nhau như thế nào.

Các quy tắc nghiêm ngặt: Chúng tôi yêu cầu AI rằng thư mục docs là nguồn thẩm quyền cao nhất. Nó phải tuân thủ các quy tắc này theo thứ tự.

Kiểm thử bắt buộc: Mọi route API mới đều phải có các trường hợp kiểm thử (test cases).

Hệ thống này giúp AI trở nên dễ dự đoán hơn.

Có lần, AI đã thay đổi một hàm dùng chung khiến tám phần khác của ứng dụng bị lỗi. Nhờ có các bài kiểm thử, AI đã nhận ra các lỗi đó. Nó tự sửa lỗi bằng cách tạo ra một phiên bản mới của hàm đó để xử lý cả các yêu cầu cũ và mới. Nếu không có kiểm thử, lỗi đó đã lọt thẳng vào môi trường production.

Đừng đổ lỗi cho AI vì nó không biết codebase của bạn. Hãy đối xử với nó như một nhân viên mới. Bạn không thể trách một nhân viên mới vì họ không biết các quy tắc của bạn. Thay vào đó, bạn cung cấp cho họ tài liệu và quy trình hướng dẫn (onboarding).

Cấu trúc của chúng tôi trông như thế này:

docs/

  • context.md (Thuật ngữ và các mối liên kết)
  • plot.md (Bản đồ tổng quan)
  • adr/ (Các quy tắc cụ thể như tạo bảng hoặc cấu trúc API)

Ba mẹo cho quy trình làm việc của bạn:

  • Hãy cụ thể trong các tệp ADR. Sử dụng các chỉ dẫn rõ ràng thay vì những lời khuyên mơ hồ.
  • Biến tài liệu thành nguồn thẩm quyền. Hãy nói với AI rằng các quy tắc này phải được ưu tiên hàng đầu.
  • Biến sai lầm thành quy tắc. Mỗi khi AI thất bại, hãy tạo một ADR mới để ngăn chặn điều đó lặp lại.

Điều này không làm cho AI trở nên hoàn hảo. Nó làm cho AI trở nên nhất quán.

Source: https://dev.to/jaskiratanand/how-i-made-ai-stop-hallucinating-on-our-3-year-old-fintech-codebase-3g0h

Cộng đồng học tập tùy chọn: https://t.me/GyaanSetuAi