Lãnh đạo tư tưởng

Tương lai của việc xây dựng ứng dụng AI phụ thuộc vào An toàn kiểu

mm
Thêm Unite.AI vào các nguồn ưu tiên của bạn trên Google

Mã được tạo bởi AI có thể được biên dịch, nhưng nếu không có an toàn kiểu nghiêm ngặt, thành công đó sẽ rất ngắn hạn. An toàn kiểu là rào chắn ngăn chặn mã dễ vỡ bị phân rã thành các lỗi ẩn và thất bại thời gian chạy khi hệ thống mở rộng.

Chúng ta phải bắt đầu buộc AI vào kiểu nghiêm ngặt thông qua ngữ cảnh, hướng dẫn, linting và vòng lặp phản hồi. Điều này mất một vài giờ thêm, nhưng nó tạo ra mã có thể tồn tại lâu dài.

Vấn đề khuyến khích

AI muốn làm hài lòng bạn. Nó tối ưu hóa cho hàm thưởng mà nó được cung cấp, và hầu hết thời gian đó chỉ là “có biên dịch không?”. Điều đó có nghĩa là nó sẽ cắt mọi góc để đến được dấu kiểm xanh. Những捷径 đó trông ổn ở thời điểm biên dịch, nhưng chúng sụp đổ ở thời gian chạy.

Đây là lý do tại sao AI yêu thích bất kỳ. Hoặc nó chọn một kiểu rộng như chuỗi nơi một kiểu nghiêm ngặt hơn, như UUID, được mong đợi. Mã được biên dịch, nhưng tính chính xác đã bị thỏa hiệp. Tồi tệ hơn, AI không nhớ những gì nó đã viết một vài tệp trước, vì vậy mà không có an toàn kiểu, dự án nhanh chóng sụp đổ dưới trọng lượng của nó khi độ phức tạp tăng lên.

Hai loại lỗi

Khi mã được tạo bởi AI chạy, bạn thường thấy hai loại vấn đề an toàn kiểu:

1. Lỗi thời gian biên dịch

  • Cái gì xảy ra: Trình biên dịch bắt được sự không phù hợp giữa kiểu được khai báo và những gì được truyền vào.
  • Con người sửa nó như thế nào: Quyết định xem người gọi có sai (chuyển 42 thành chuỗi) hay chữ ký hàm có sai (thay đổi nó để chấp nhận một số).
  • AI “sửa” nó như thế nào: Thay đổi kiểu của đối số thành bất kỳ. Vấn đề “được giải quyết”, nhưng bạn vừa loại bỏ rào chắn mà sẽ bắt được lỗi trong tương lai.

2. Lỗi thời gian chạy

  • Cái gì xảy ra: Trình biên dịch nghĩ mọi thứ ổn (thường vì kiểu được nới lỏng), nhưng giá trị thực tại thời gian chạy không phù hợp với giả định.
  • Con người sửa nó như thế nào: Tìm lại biến đến nguồn gốc (như một API hoặc truy vấn cơ sở dữ liệu) và sửa kiểu tại ranh giới để dữ liệu đến như một chuỗi đúng.
  • AI “sửa” nó như thế nào: Không có ngữ cảnh, nó đoán. Có thể nó bao quanh mọi thứ trong Chuỗi(…), hoặc chỉ nới lỏng kiểu lại. Va chạm biến mất ở điểm này, nhưng giờ logic bị hỏng. Số dành cho toán học bỗng trở thành chuỗi.

Chu kỳ này của lỗi thời gian chạy → “sửa” AI → kiểu lỏng lẻo nhanh chóng. Kết quả là một cơ sở mã có thể biên dịch và ném ít lỗi thời gian chạy hơn, nhưng không thể tin cậy. Hãy tưởng tượng một hệ thống lập lịch cho bác sĩ, nơi ca của bác sĩ được quản lý bởi ứng dụng. Một sự không phù hợp kiểu trượt vào: một số nguyên cho giờ được xử lý như một chuỗi. AI “sửa” nó bằng cách nới lỏng kiểu thành bất kỳ. Mã được biên dịch và lỗi biến mất, nhưng tính toán ca bị hỏng im lặng, đặt nhiều bác sĩ và để lại một toàn bộ cánh của bệnh viện không được bảo vệ.

Đa nhân cơ sở dữ liệu

Khi bạn kết nối với cơ sở dữ liệu, lỗi nhân lên và nguyên nhân của chúng trở nên khó tìm hơn. SQL được kiểu hóa vì một lý do. Mỗi lược đồ (INT, TEXT, UUID, BOOLEAN) mã hóa các giả định về dữ liệu của bạn.

Khi AI làm phẳng mọi thứ thành chuỗi | bất kỳ, bạn mất đi những bảo đảm đó:

  • Ghi xấu: chèn “true” vào một trường boolean biên dịch, nhưng làm hỏng cơ sở dữ liệu.
  • Đọc xấu: truy vấn trả về NULL, nhưng AI giả định chuỗi, dẫn đến một va chạm thời gian chạy.
  • Mối quan hệ bị hỏng: nếu một khóa quan hệ được mong đợi như một UUID nhưng AI xử lý nó như một chuỗi và gửi giá trị rác, các join sẽ không bị va chạm nhưng chúng sẽ trả về không có dữ liệu. Điều này che giấu lỗi cho đến khi chúng xuất hiện sau này dưới dạng kết quả thiếu hoặc không nhất quán.

Đây là lý do tại sao các đội nghiêm túc sử dụng ngôn ngữ kiểu nghiêm ngặt và thực thi an toàn kiểu từ lược đồ đến API. Nếu bạn không, cơ sở dữ liệu ngừng bảo vệ bạn và vấn đề ẩn trở nên trầm trọng hơn.

Tại sao các đội trưởng thành thực thi kiểu nghiêm ngặt

Kiểu nghiêm ngặt không phải là về việc làm chậm các nhà phát triển. Nó là về việc làm cho việc mở rộng quy mô có thể xảy ra.

Kiểu:

  • Mã hóa ý định vào mã.
  • Làm cho việc tái cấu trúc an toàn và có thể dự đoán.
  • Bắt được toàn bộ lớp lỗi trước khi chúng đến sản xuất.
  • Hiển thị cho các nhà phát triển tương lai (và AI) chính xác cách sử dụng một hàm hoặc đối tượng.

Không có an toàn kiểu, sự lỏng lẻo của mã AI trở nên trầm trọng hơn. Với nó, cùng một AI tạo ra mã mà bạn có thể tin cậy và mở rộng.

Làm thế nào để buộc AI vào An toàn kiểu

Bạn phải đối xử với AI như một kỹ sư trẻ. Nhanh chóng, tài năng, nhưng cẩu thả nếu không có hướng dẫn.

Cung cấp ngữ cảnh đúng

Cho nó các giao diện và kiểu mà nó có thể sử dụng. Hiển thị các ví dụ về cách sử dụng. Hãy có quan điểm về cách cấu trúc mã đúng.

Đưa ra hướng dẫn nghiêm ngặt

Rất rõ ràng cho AI biết không được sử dụng bất kỳ, không bao giờ cho phép không xác định, và mỗi phương thức, đối tượng và biến phải được kiểu hóa. Hãy mong đợi nó sẽ gặp khó khăn khi tuân theo các hướng dẫn này (đặc biệt là trong lần đầu tiên).

Thực thi với linting

Giống như khi xem xét mã của một nhà phát triển trẻ, bạn cần kiểm tra mã của AI. Thiết kế các quy tắc lint tùy chỉnh định nghĩa “mã tốt” là gì đối với bạn. Trả lại các thất bại lint cho mô hình cho đến khi nó vượt qua. Có thể mất một vài vòng, nhưng nó thay đổi hàm thưởng hướng đến việc bao gồm an toàn kiểu.

Lặp lại với kiểm tra

Lỗi thời gian biên dịch, nhật ký thời gian chạy, kiểm tra nhấp chuột. Mỗi lần lặp lại buộc AI phải siết chặt kiểu và di chuyển gần hơn đến mã cấp sản xuất.

Một cách xây dựng tốt hơn

Tôi đã học được rằng hy sinh tốc độ tạo ra thô cho chất lượng cao hơn sẽ trả lại kết quả trong dài hạn. Điều đó có nghĩa là chiến đấu cho sự không khoan nhượng đối với kiểu bất kỳ, thực thi nhiều vòng lặp phản hồi và các quy tắc linting nghiêm ngặt mà AI phải vượt qua trước khi gọi mã “hoàn thành”. Điều đó đòi hỏi sự cố gắng liên tục, nhưng đó là cách duy nhất để giữ chất lượng không bị giảm sút.

Trước đó tôi đã đề cập đến một điểm quan trọng: một khi AI bắt đầu vá lỗi thời gian chạy bằng cách nới lỏng kiểu, bạn sẽ bước vào một chu kỳ ác tính. Mỗi bản vá loại bỏ một rào chắn khác, và kết quả trở nên trầm trọng hơn thành một cơ sở mã có thể biên dịch nhưng dễ vỡ và không thể bảo trì. Ngược lại cũng đúng: nếu bạn buộc AI tôn trọng an toàn kiểu trong mỗi lần đi qua, bạn sẽ tạo ra một chu kỳ có lợi. Mỗi lần lặp lại siết chặt rào chắn, cơ sở mã trở nên sạch hơn, và chất lượng trở nên đáng tin cậy và xây dựng.

Đây là hệ thống tôi tin rằng sẽ mang lại chất lượng mã lâu dài. Mỗi lần lặp lại được thiết kế để siết chặt tiêu chuẩn, không làm suy yếu chúng. Đó là lý do tại sao các đội kỹ sư tốt nhất chọn ngôn ngữ kiểu nghiêm ngặt. An toàn kiểu là rào chắn cơ bản cho khả năng bảo trì, và để AI bỏ qua nó sẽ đảm bảo ứng dụng của bạn sẽ không bao giờ đạt đến cấp sản xuất.

Brad Eckert là một doanh nhân suốt đời và là người lãnh đạo kỹ thuật với hơn một thập kỷ kinh nghiệm đưa sản phẩm từ giai đoạn ý tưởng đến giao hàng cho khách hàng và hơn thế nữa. Là một sinh viên tốt nghiệp của MIT, ông hiện là đồng sáng lập và CTO của Woz, một nền tảng AI được hỗ trợ bởi Y Combinator cho phép bất kỳ ai xây dựng và mở rộng kinh doanh phần mềm, không cần mã hóa.