Tìm kiếm trang web

Tôi đã yêu cầu ba mô hình AI sửa cùng một đoạn mã bị hỏng. Một mô hình đã vượt trội hơn những mô hình còn lại


Một trong những khía cạnh hữu ích nhất của việc sử dụng AI cho lập trình là gỡ lỗi. Trước thời đại AI, tôi phải đọc mã từng dòng một, sử dụng trình gỡ lỗi và đặt các câu lệnh in ra để tìm lỗi. Nếu tất cả thất bại, sẽ có Stack Overflow và các trang web dành cho người mới khác, nơi mà mọi người có thể chỉ trích mã của bạn. Nhưng bây giờ? Bạn chỉ cần chia sẻ đoạn mã với AI, cung cấp một số bối cảnh và yêu cầu nó sửa mã, và bạn xong việc.

Điều này đã cho tôi một ý tưởng để thử xem các mô hình AI này có thể đi xa đến đâu về khả năng tư duy sáng tạo trong khi sửa mã của bạn. Vì vậy, tôi đã quyết định thực hiện một thí nghiệm nhỏ với ChatGPT, Gemini và Claude để xem mô hình nào có thể sửa mã của tôi tốt nhất.

Hiểu vấn đề và soạn câu lệnh

Để mở kết thúc để vui hơn

Lần trước, chúng tôi đã thử một chương trình kiểm tra mật khẩu cho cùng ba mẫu. Cho cuộc chiến AI này, tôi đã quyết định sử dụng một script Python sắp xếp tệp đơn giản. Đây là script mà tôi đã thử nghiệm:

import os

source_dir = "Downloads"
dest_dir = "Images"

def clean_my_downloads():
    all_files = os.listdir(source_dir)
    
    for f in all_files
        if ".jpg" in f or ".png" in f:
            old_path = source_dir + "/" + f
            new_path = dest_dir + "/" + f shutil.move(old_path, new_path)
            print("Moved file: " + f)

clean_my_downloads()

Được rồi, trước khi thử nghiệm các mô hình, hãy để tôi giải thích những lỗi và cạm bẫy mà tôi đã chuẩn bị ở đây.

  1. Các lỗi cú pháp (Dễ)

    • Thiếu dấu hai chấm: Không có dấu ':' ở cuối dòng for f in all_files.
    • Thiếu import: Mã sử dụng shutil.move(), nhưng import shutil bị thiếu ở trên cùng.
    • Cả ba mô hình nên dễ dàng phát hiện và sửa những lỗi này. Nếu một mô hình thất bại ở đây, đó là thất bại ngay lập tức.
  2. Sự cố logic (Trung bình)

    • Thiếu thư mục: Mã giả định rằng thư mục Images đã tồn tại. Nếu không, shutil.move() sẽ gặp sự cố.
    • Một mô hình tốt sẽ thêm os.makedirs(dest_dir, exist_ok=True) để đảm bảo thư mục được tạo nếu nó bị thiếu.
  3. Cạm bẫy đa nền tảng (Trung bình - Khó)

    • Đường dẫn lộn xộn: Mã sử dụng nối chuỗi (+ "/" +) để xây dựng đường dẫn tệp. Đây là thực hành không tốt và có thể gây ra sự cố trên Windows so với Mac.
    • Một mô hình tốt hơn sẽ viết lại điều này sử dụng os.path.join(source_dir, f) hoặc, tốt hơn nữa, nâng cấp mã để sử dụng thư viện pathlib hiện đại của Python.
  4. Lỗi mở rộng (Khó)

    • So khớp ngây thơ: Mã sử dụng if ".jpg" in f. Điều này nguy hiểm vì một file có tên "my_photo.jpg.zip" sẽ bị di chuyển, trong khi nó không phải là hình ảnh! Ngoài ra, nó còn bỏ qua chữ hoa như ".JPG".
    • Một mô hình thông minh sẽ thay đổi điều này thành f.lower().endswith(('.jpg', '.png')).
  5. Cạm bẫy mất dữ liệu (Bài kiểm tra tối thượng)

    • Ghi đè im lặng: Nếu đã có một tệp có tên screenshot.png trong thư mục Images, và tập lệnh di chuyển một screenshot.png mới từ Downloads, shutil.move() sẽ ngay lập tức ghi đè tệp cũ. Người dùng sẽ mất hình ảnh gốc của họ vĩnh viễn.
    • Đây là những gì sẽ trao danh hiệu cho người chiến thắng của chúng ta. AI tốt nhất sẽ nhận ra rằng người dùng đã yêu cầu nó làm cho nó không thể phá hủy và sẽ thêm một kiểm tra để xem liệu tập tin đã tồn tại chưa. Người chiến thắng thực sự sẽ thêm logic để đổi tên tập tin trùng lặp (ví dụ: screenshot_(1).png) để không mất dữ liệu.

Đã xong phần đó, bây giờ hãy nói về đề bài tiếp theo. Về đề bài, tôi cũng giữ nó hơi mơ hồ, với một số gợi ý về vấn đề và mục tiêu. Bằng cách đó, tôi có thể kiểm tra khả năng sáng tạo của từng mô hình mà không phải hướng dẫn chúng. Đây là đề bài mà tôi đã chọn:

I'm a beginner trying to write a Python script to clean up my Downloads folder by moving all my images into an 'Images' folder. The code won't even run, and I keep getting errors. Even if I get it to run, I'm worried I might have missed something that could mess up my files. Can you fix my code, explain what I did wrong in simple terms, and make it bulletproof?

Chú ý rằng tôi không chỉ bảo nó sửa mã của tôi. Tôi cũng yêu cầu nó làm cho mã chống lỗi. Điều này giúp cho mô hình có thể áp dụng các kỹ thuật khác nhau để làm cho nó tốt hơn nữa.

Trận chiến bắt đầu

Kiểm tra từng mô hình

Để so sánh, tôi sẽ sử dụng các mô hình có công suất tương tự từ cả ba AI. Ngoài ra, hãy lưu ý rằng tất cả chúng đều là các mô hình miễn phí tốt nhất, không thuộc các phiên bản trả phí của chúng.

ChatGPT

Chúng tôi bắt đầu với ChatGPT. Vì không có cách nào để tự chọn mô hình, tôi phải dựa vào mô hình mà hệ thống chọn. Nó đã chọn GPT 5.5. Mã cố định mà nó cung cấp rất tuyệt. Nó đã sửa các lỗi cú pháp và sử dụng os.makedirs() để tránh sự cố logic.

Nó đã sử dụng os.path.join() để tương thích với các hệ điều hành khác nhau. Nó cũng đã làm một điều tuyệt vời ở đây. Nó đã sử dụng os.path.expanduser("~/Downloads"). Trong mã gốc, source_dir="Downloads" chỉ hoạt động nếu người dùng chạy script từ thư mục chính của họ. ChatGPT nhận ra rằng một người mới sẽ bị nhầm lẫn bởi điều này và đã tìm ra đường dẫn thực tế đến thư mục Downloads trên ổ cứng của họ một cách động. Đó là một điểm cộng to lớn.

Nó cũng đã sửa lỗi nhận diện phần mở rộng bằng cách nâng cấp nó lên f.lower().endswith(...) để nhận biết các tệp .JPG viết hoa và không vô tình di chuyển một tệp có tên là "my_photo.jpg.zip". Nó cũng đã chủ động thêm các phần mở rộng .jpeg, .gif và .webp.

Về cái bẫy mất dữ liệu, nó đã bắt được thành công. Nhưng điều duy nhất còn thiếu trong mã của nó là, thay vì đổi tên tệp để tránh mất dữ liệu, nó chỉ bỏ qua hoàn toàn, điều này không phải là giải pháp mong muốn. Nhưng nhìn chung, nó đã làm khá tốt.

Phần giải thích cũng rất xuất sắc. Nó giải thích từng dòng mã có vấn đề, cung cấp một số mẹo cho người mới bắt đầu, và thậm chí đề xuất một phiên bản cải tiến trong tương lai. Bạn có thể xem câu trả lời đầy đủ tại đây.

Song Tử







Tiếp theo là Gemini. Tôi đã sử dụng Google AI Studio và chọn phiên bản 3.1 Pro Preview. Nếu ChatGPT đặt tiêu chuẩn cao, Gemini thì đã vượt qua nó một cách dễ dàng. Nó đã áp dụng đầy đủ phong cách của một kỹ sư Python hiện đại vào giải pháp của mình.

Nó đã sửa các lỗi cú pháp và sự cố logic. Đối với bẫy đa nền tảng, Gemini đã chọn một con đường khác. Thay vì sử dụng module os của Python, nó đã dùng pathlib. Đây là cách hiện đại, chuẩn Python để xử lý tệp tin. Nó cũng tự động tìm thư mục chính giống như ChatGPT. Nó xử lý lỗi phần mở rộng bằng cùng một thư viện.

Về cạm bẫy mất dữ liệu, Gemini cũng vượt trội hơn ChatGPT ở đây. Gemini đã triển khai một vòng lặp while hoàn hảo để kiểm tra xem tên có tồn tại hay không, và nếu có, nó sẽ chèn động một số vào tên tệp (ví dụ: photo_1.jpg) trước khi di chuyển. Dữ liệu của bạn được lưu, và thư mục của bạn được dọn dẹp.

Hơn nữa, Gemini đã sử dụng try/except để xử lý lỗi, đây là thực hành tốt nhất trong lập trình. Nhìn chung, những điều này làm cho điểm số của Gemini cao hơn ChatGPT.

Về phần giải thích, tôi sẽ nói Gemini hơi thua kém ChatGPT. Nó không giải thích chi tiết đầy đủ, điều mà người mới bắt đầu cần. Bạn có thể xem toàn bộ mã và giải thích tại đây (cần đăng nhập bằng tài khoản Google của bạn.)

Claude

Thí sinh cuối cùng của chúng ta là Claude. Đối với mô hình, tôi đã chọn Sonnet 4.6.

Cũng giống như hai AI khác, nó đã phát hiện đúng lỗi cú pháp và lỗi logic. Một điều mà Claude bổ sung thêm là kiểm tra xem thư mục Downloads có thực sự tồn tại hay không trước. Nếu người dùng chạy chương trình này từ thư mục sai, nó sẽ in ra một thông báo lỗi một cách nhẹ nhàng thay vì bị sập.

Nói về cạm bẫy đa nền tảng, không giống như ChatGPT và Gemini, Claude đã thất bại trong việc đổi đường dẫn tương đối thành đường dẫn tuyệt đối. Nó vẫn để source_dir="Downloads". Điều này có nghĩa là nếu một người mới lưu script này vào Desktop và nhấp đúp vào nó, nó sẽ bị lỗi vì nó đang tìm một thư mục Downloads trên Desktop. Cả ChatGPT và Gemini đã dự đoán điều này và tự động ánh xạ đến thư mục nhà của người dùng.

Claude cũng làm tốt trong bẫy phần mở rộng bằng cách sử dụng os.path.splitext()[1].lower(). Nó chủ động thêm .heic (định dạng ảnh mặc định của Apple).

Giống như Gemini, Claude đã phát hiện chính xác bẫy file trùng lặp. Nó đã viết một vòng lặp while để tự động đổi tên các file (photo_1.jpg) để không có gì bị xóa và thư mục thực sự được dọn dẹp. Điều cuối cùng mà Claude thêm vào là có một biến moved_count để theo dõi có bao nhiêu hình ảnh đã được di chuyển để cung cấp cho bạn một bản tóm tắt đẹp.

Toàn bộ mã đã được chú thích kỹ lưỡng, chỉ ra nơi mỗi sửa đổi được thực hiện. Nó cũng đã tạo ra một bảng tóm tắt tất cả các sửa đổi. Nhưng việc bỏ lỡ cơ hội để tăng cường tính tương thích đa nền tảng sẽ làm giảm một phần điểm số của nó. Tìm câu trả lời đầy đủ của Claude tại đây.

Phán quyết cuối cùng

Ai sẽ đội vương miện?

Không giống lần trước, lần này khó chọn hơn. ChatGPT vượt qua hầu hết các bài kiểm tra nhưng sai một bài. Gemini xuất sắc ở tất cả các bài kiểm tra và thậm chí vượt trội hơn ở một số bài. Claude thi đấu tốt nhưng bỏ qua một lỗi nhỏ. Vì vậy, sau tất cả các lần chấm điểm, tôi sẽ phải thông báo rằng Gemini là người chiến thắng của cuộc thi này. ChatGPT là một người giải thích tuyệt vời, và Claude có tài liệu mã tốt nhất.


AI khiến việc gỡ lỗi trở nên dễ dàng

Mặc dù mục đích thực sự ở đây là để trình diễn khả năng tư duy và sửa mã của từng mô hình AI, nhưng có thể nói rằng tất cả chúng đều làm rất tốt. Vì vậy, bất kể bạn chọn mô hình nào, nó cũng tốt hơn nhiều so với việc tự gỡ lỗi theo cách cũ.

Bài viết liên quan