Your AI Coding Setup is a Complicated Tool. Your Codebase is Complex.

Các công cụ lập trình AI mới hứa hẹn sẽ giúp các agent trở nên đáng tin cậy hơn. Bạn thấy các framework dành cho kỹ năng (skills), siêu năng lực (superpowers) và phát triển dựa trên đặc tả (spec-driven development). Những công cụ này thực sự hiệu quả. Chúng giúp các agent tuân theo một quy trình thay vì chỉ đoán mò.

Nhưng có một cái bẫy ở đây. Mọi người lầm tưởng rằng một thiết lập tốt hơn cho một tác vụ đơn lẻ sẽ tạo ra một hệ thống nhất quán. Thực tế không phải vậy.

Để hiểu tại sao, hãy sử dụng khung tham chiếu Cynefin. Nó phân loại các vấn đề thành hai loại: Complicated (Phức tạp) và Complex (Phức hợp).

Complicated Problems

Những vấn đề này có câu trả lời có thể biết trước. Bạn sử dụng khả năng phân tích và kỹ năng để tìm ra nó. Ví dụ như tái cấu trúc (refactoring) một module hoặc viết một hàm kiểm tra (validation function). Một khi đã tìm ra câu trả lời, bạn có thể lặp lại quy trình đó. Hầu hết các công cụ lập trình AI đều nằm ở phân khúc này. Chúng tập trung vào đơn vị công việc (unit of work), giúp các tác vụ có thể lặp lại và kiểm chứng được.

Complex Problems

Những vấn đề này không có câu trả lời có thể dự đoán trước. Hệ thống là một mạng lưới các thành phần đan xen. Kết quả chỉ xuất hiện sau khi bạn hành động. Liệu 40 thay đổi được merge có làm hỏng kiến trúc sau sáu tháng nữa không? Liệu Agent A có mâu thuẫn với Agent B không? Bạn không thể tìm thấy những câu trả lời này chỉ bằng cách nhìn vào một tệp duy nhất. Chúng nảy sinh từ cách các thành phần tương tác với nhau.

Sự sai lệch xảy ra khi bạn kỳ vọng các công cụ Complicated có thể giải quyết các vấn đề Complex.

Một công cụ có thể giúp agent viết một hàm hoàn hảo. Nhưng nếu một tác vụ sử dụng userId và một tác vụ khác lại dùng user_id, hệ thống sẽ bị lỗi. Cả hai tác vụ đều "đúng" khi xét riêng lẻ. Sự thất bại này mang tính nảy sinh (emergent). Nó nằm ở sự tương tác, chứ không nằm ở đơn vị công việc.

Ngay cả các cửa sổ ngữ cảnh (context window) khổng lồ cũng không thể giải quyết được vấn đề này. Một cửa sổ lớn hơn giúp bạn nhìn thấy nhiều hơn, nhưng nhìn thấy không đồng nghĩa với việc suy luận được. Bạn có thể đọc toàn bộ codebase nhưng vẫn không biết liệu nó có bị deadlock dưới tải thực tế (production load) hay không. Đó là một thuộc tính khi chạy (runtime property).

How to handle both:

  • Đối với lớp Complicated: Sử dụng kỹ năng (skills), đặc tả (specs) và TDD. Những điều này giúp đầu ra riêng lẻ của agent trở nên chặt chẽ.
  • Đối với lớp Complex: Sử dụng quy trình "thăm dò - cảm nhận - phản hồi" (probe-sense-respond). Bạn không thể dự đoán điều gì sẽ hỏng. Bạn phải merge, deploy và quan sát. Hãy sử dụng kiểm thử tích hợp (integration tests) và khả năng quan sát (observability) để cảm nhận những gì xảy ra khi các thành phần kết hợp với nhau.

Đừng tin vào lời hứa rằng một bản đặc tả tốt hơn sẽ làm hệ thống của bạn ổn định. Đặc tả giúp đơn vị công việc trở nên đáng tin cậy, chứ không làm cho toàn bộ hệ thống trở nên nhất quán.

Hãy áp dụng phương pháp phù hợp với từng lĩnh vực. Sử dụng công cụ để hoàn thiện đơn vị công việc. Sử dụng thử nghiệm để thấu hiểu hệ thống.

Source: https://dev.to/bala_paranj_059d338e44e7e/your-ai-coding-setup-is-a-complicated-domain-tool-your-codebase-is-complex-3mkc

Optional learning community: https://t.me/GyaanSetuAi