10 điểm bởi GN⁺ 2025-03-04 | 1 bình luận | Chia sẻ qua WhatsApp
  • Nhiều lập trình viên thử dùng LLM để viết mã rồi gặp phải hiện tượng ảo giác (hallucination) và mất niềm tin
    • Việc LLM bịa ra các phương thức hoặc thư viện không tồn tại là chuyện rất thường gặp
    • Nhưng ảo giác trong mã lại là loại ảo giác ít nguy hiểm nhất
  • Nguy hiểm nhất là khi LLM tạo ra lỗi nhưng trình biên dịch hoặc trình thông dịch không phát hiện ngay lập tức
    • Các phương thức bị ảo giác thường gây lỗi ngay khi chạy nên khá dễ phát hiện
    • Thậm chí có thể dán lại thông báo lỗi cho LLM để nó tự sửa
  • Khác với ảo giác trong văn bản thông thường, mã có thể được kiểm chứng thực tế bằng cách chạy
  • LLM có chức năng tự sửa lỗi
    • Các công cụ như ChatGPT Code Interpreter, Claude Code cho phép LLM chạy đoạn mã nó viết, phát hiện lỗi và tự sửa
    • Đánh giá mã do LLM viết mà còn không chạy thử là điều thiếu hiệu quả
  • Một số lập trình viên muốn bác bỏ cả công nghệ này chỉ vì LLM tạo ra các phương thức bị ảo giác
    • Nhưng để dùng hiệu quả thì việc học hỏi và thử nghiệm là điều bắt buộc
    • Tác giả đã nghiên cứu việc viết mã dựa trên AI hơn 2 năm và vẫn đang tiếp tục học các kỹ thuật mới
  • Kiểm thử thủ công với mã là bắt buộc
    • Mã chạy được không có nghĩa là nó hoạt động đúng như kỳ vọng
    • Chỉ dựa vào review mã hoặc kiểm thử tự động cũng không thể xác minh hoàn toàn tính chính xác của mã
    • Quá trình tự chạy và tự kiểm chứng là điều thiết yếu
    • Mã do LLM tạo ra thường rất dễ đọc nên dễ khiến người ta mất cảnh giác
    • Mã do con người viết cũng vậy, không nên tin tưởng trước khi tự chạy thử
  • Cách giảm ảo giác
    • Dùng mô hình khác: Chọn mô hình có dữ liệu huấn luyện phong phú hơn cho nền tảng cụ thể
      • Ví dụ: Claude 3.7 Sonnet (bật thinking mode), OpenAI o3-mini-high, GPT-4o (kèm Python Code Interpreter)
    • Tận dụng ngữ cảnh (context): Dù LLM không biết một thư viện cụ thể, nó vẫn có thể học được mẫu nếu được cung cấp mã ví dụ
    • Chọn công nghệ ổn định: Nếu chọn các thư viện lâu đời, khả năng LLM xử lý tốt hơn sẽ cao hơn
  • Tầm quan trọng của review mã
    • Bài viết phản bác quan điểm rằng "nếu phải review toàn bộ mã do LLM viết thì tự viết còn nhanh hơn"
    • Đây cũng có thể là phát biểu cho thấy khả năng review mã còn thiếu
    • Việc review mã do LLM tạo ra có thể là cơ hội tốt để nâng cao năng lực
  • Phần thưởng thêm: phản hồi từ Claude 3.7 Sonnet
    • Tác giả đã nhờ Claude 3.7 Sonnet ở "extended thinking mode" xem lại bản nháp bài blog
    • Tác giả yêu cầu: "Hãy xem lập luận của bài này có thuyết phục không, có điểm nào cần cải thiện không, và có nội dung nào còn thiếu không"
    • Claude đã giúp làm cho giọng điệu của bản nháp trở nên mềm mại hơn
    • Liên kết cuộc trò chuyện phản hồi với Claude

1 bình luận

 
GN⁺ 2025-03-04
Ý kiến trên Hacker News
  • Tác giả đồng ý với bài viết trước đó, nhưng không đồng ý với bài này

    • Phản đối quan điểm rằng "nếu phải rà soát mọi đoạn mã do LLM viết ra, thì tôi tự viết còn nhanh hơn"
    • Không đồng ý với lập luận rằng chúng ta đầu tư chưa đủ vào năng lực đọc, hiểu và rà soát mã của người khác
    • Việc rà soát phụ thuộc vào mức độ chuyên môn và độ tin cậy của tác giả; rà soát đóng góp ẩn danh là một chuyện khác
    • Điều quan trọng là suy luận và so sánh ý định cũng như cách tiếp cận của đoạn mã, và với LLM thì phạm vi này bị hạn chế
    • Động lực là yếu tố quan trọng, và không phải mọi lập trình viên đều thích review code
    • Mã do LLM tạo ra không có khía cạnh xã hội, và vẫn cần người khác rà soát các thay đổi
  • Ngay cả khi mã do LLM sinh ra hoạt động tốt, nếu không phải người viết thì rất khó tìm ra bug hoặc lỗi logic

    • Nếu coi việc lập trình không phải là hiện thực hóa một kế hoạch được thiết kế tốt mà là ghép các mảnh lại với nhau, thì sẽ có lo ngại về việc một thuật toán ghép các mảnh bằng cách phỏng đoán
    • LLM không chấp nhận những rủi ro mà con người có thể chấp nhận, và có thể không hiểu ý nghĩa của một khối mã trong ngữ cảnh cụ thể
  • Mã do LLM tạo ra trông gọn gàng, nhưng lại khiến người ta tốn nhiều thời gian hơn cho QA và dọn dẹp

    • Mã chạy tốt và không có lỗi không có nghĩa là nó đang làm đúng việc cần làm
    • Chỉ chạy mã và test thôi không thể chứng minh tính đúng đắn của mã; cần phải suy luận logic
  • The Primeagen và Casey Muratori đã rà soát đầu ra của các trình tạo mã LLM mới nhất

    • Đáng ra phải dễ phát triển hơn nếu giao cho chúng những tác vụ được thể hiện đầy đủ trong dữ liệu huấn luyện của LLM
    • Nhưng trên thực tế, quá trình phát triển lặp đi lặp lại lại hội tụ về thứ mã vô dụng, và LLM ngày càng không tạo được tiến triển
  • Một loại lỗi khác mà Simon bỏ qua là kiểu ảo giác khi mô hình quên mất chức năng

    • So với mặt tích cực là mã vẫn biên dịch được, thì mặt tiêu cực là quên chức năng cốt lõi còn khó xử lý hơn
    • Chức năng có thể thay đổi đôi chút tùy theo đoạn mã mà nó giả định là nằm ngoài cuộc hội thoại/cửa sổ ngữ cảnh
  • Các phương thức bị ảo giác ra chỉ là trở ngại nhỏ, và khi mọi người than phiền về điều đó thì người ta thường cho rằng họ chỉ bỏ ra rất ít thời gian để học cách dùng hệ thống một cách hiệu quả

    • Đây là một giả định rất sai, và mọi người nhìn thấy ảo giác rồi nghĩ rằng: "nếu ngay cả thứ dễ nhất mà nó còn không làm đúng một cách nhất quán, thì không thể tin nó ở việc khó hơn"
  • Bản thân ảo giác không phải là rủi ro lớn nhất mà LLM đặt ra

    • Rủi ro lớn hơn là chatbot có thể thuyết phục con người làm hại chính mình
    • Điều này đã từng xảy ra, và tác giả không muốn chia sẻ thêm ý tưởng về những thứ còn nguy hiểm hơn
  • Nó chỉ ít nguy hiểm hơn trong ngữ cảnh hẹp của lỗi biên dịch

    • Nếu một lập trình viên bịa ra cả một thư viện chỉ để né nỗ lực tìm lời giải thực sự, thì điều đó còn gây bực hơn
    • Nếu coi ảo giác chỉ là sự chậm lại đơn thuần, thì tức là đang đánh giá thấp những gì LLM thực sự phải làm
  • Để có kết quả tốt từ LLM cần rất nhiều công sức

    • Điều này cho thấy có thể nhìn thấu sự thổi phồng
    • Nếu phải học nhiều năm chỉ để nhận được kết quả không đáng tin, thì sẽ phải đặt câu hỏi rằng LLM thực sự hữu ích cho việc gì và còn có thể kỳ vọng gì ở nó
  • Kinh nghiệm viết mã để tìm phòng khám 'chính' của bệnh nhân tại một trung tâm y tế

    • Cần tìm lịch hẹn gần nhất nhưng chỉ tính các lịch hẹn lâm sàng
    • Nếu không có lịch hẹn lâm sàng, thì cần tìm lịch hẹn gần nhất thuộc mọi loại
    • Tác giả đã viết mã bằng cách sắp xếp dữ liệu, nhưng trong quá trình ChatGPT viết tài liệu, nó lại hiểu ngược thứ tự sắp xếp
    • Đây là kiểu sai lầm còn tệ hơn rất nhiều so với việc "mã không chạy được"