Tự động hóa chuẩn hóa mã nguồn Python theo PEP8 bằng mô hình Qwen2.5-Coder-1.5B

Trong quá trình phát triển phần mềm, việc duy trì một phong cách lập trình (coding style) nhất quán thường bị xem nhẹ trước áp lực về tiến độ. Kết quả là những đoạn mã nguồn hoạt động tốt nhưng lại cực kỳ khó bảo trì với các lỗi phổ biến như đặt tên biến tùy tiện, thụt lề không đồng nhất hoặc khai báo thư viện chồng chéo. Với sự ra đời của Qwen2.5-Coder-1.5B, một mô hình ngôn ngữ lớn chuyên biệt cho lập trình, việc chuyển đổi mã nguồn lộn xộn thành mã nguồn chuẩn PEP8 đã trở nên đơn giản và chính xác hơn bao giờ hết.

Phân tích mã nguồn không đạt chuẩn

Hãy xem xét một đoạn mã Python điển hình thường gặp ở những lập trình viên mới, nơi các quy tắc về khoảng trắng, cách đặt tên và cấu trúc tệp bị bỏ qua:

import os,sys,math
def calc_area(r):
    pi=3.14159
    return pi*r**2
class geometry_helper:
  def __init__(self,shapes):
    self.shapes=shapes
  def process(self):
    for s in self.shapes:
      if s>0:print(f"Diện tích: {calc_area(s)}")
      else: print("Bán kính lỗi")

Đoạn mã trên vi phạm nhiều quy tắc PEP8 quan trọng:

  • Khai báo nhiều thư viện trên cùng một dòng.
  • Thiếu khoảng trắng quanh toán tử gán và toán tử số học.
  • Tên lớp (class) không tuân thủ quy tắc PascalCase.
  • Thụt lề không nhất quán (2 khoảng trắng thay vì 4).
  • Câu lệnh điều kiện viết trên cùng một dòng với khối lệnh.

Khả năng tái cấu trúc của Qwen2.5-Coder-1.5B

Khi đưa đoạn mã trên qua mô hình Qwen2.5-Coder-1.5B, hệ thống không chỉ sửa lỗi cú pháp mà còn tái cấu trúc toàn bộ mã nguồn để đạt độ hoàn thiện cao nhất về mặt thẩm mỹ và quy chuẩn kỹ thuật:

import math
import os
import sys


def calculate_area(radius):
    """Tính diện tích hình tròn dựa trên bán kính."""
    pi = 3.14159
    return pi * radius ** 2


class GeometryHelper:
    def __init__(self, shapes):
        self.shapes = shapes

    def process(self):
        for shape in self.shapes:
            if shape > 0:
                print(f"Diện tích: {calculate_area(shape)}")
            else:
                print("Bán kính lỗi")

Mô hình đã thực hiện các cải tiến đáng kể:

  • Tách các lệnh import thành từng dòng riêng biệt và sắp xếp theo thứ tự bảng chữ cái.
  • Chuyển đổi tên hàm và biến sang snake_case mang tính mô tả cao hơn (r thành radius).
  • Áp dụng PascalCase cho tên lớp (GeometryHelper).
  • Thêm khoảng trống giữa các hàm và phương thức để tăng độ phân tách thị giác.
  • Căn chỉnh lại các khối lệnh điều kiện một cách tường minh.

Xử lý các kịch bản phức tạp và Docstrings

Qwen2.5-Coder-1.5B còn thể hiện sự thông minh trong việc xử lý các cấu trúc dữ liệu phức tạp và tối ưu hóa các chú thích mã nguồn. Ví dụ, với các hàm lồng nhau hoặc các logic điều kiện dày đặc, mô hình sẽ tự động đề xuất cách ngắt dòng phù hợp để tránh vi phạm quy tắc độ dài dòng (thường là 79 ký tự trong PEP8).

# Mã nguồn trước khi xử lý
def filter_data(items,limit):
    res=[i for i in items if i.value>limit and i.status=='active']
    return res

# Mã nguồn sau khi Qwen2.5-Coder xử lý
def filter_data(items, limit):
    """
    Lọc danh sách các mục dựa trên giá trị ngưỡng và trạng thái hoạt động.
    """
    result = [
        item for item in items 
        if item.value > limit and item.status == 'active'
    ]
    return result

Trong ví dụ này, mô hình đã tự động nhận diện nhu cầu về docstring và định dạng lại list comprehension để dễ đọc hơn, đồng thời thay đổi biến tạm res thành result để rõ nghĩa.

Hiệu suất và ứng dụng thực tế

Với kích thước tham số 1.5B, mô hình này đủ nhẹ để chạy trên các thiết bị cá nhân hoặc tích hợp trực tiếp vào các trình soạn thảo mã nguồn (IDE) như VS Code hoặc PyCharm thông qua các tiện ích mở rộng. Tốc độ phản hồi gần như tức thì cho phép lập trình viên thực hiện việc "dọn dẹp" mã nguồn ngay trong quá trình viết (Real-time linting).

Việc áp dụng mô hình này vào quy trình CI/CD (Continuous Integration/Continuous Deployment) cũng giúp đảm bảo rằng mọi mã nguồn được đẩy lên kho lưu trữ chung đều đạt tiêu chuẩn chất lượng cao nhất, giảm thiểu thời gian tranh luận về phong cách viết code trong các buổi Code Review.

Lưu ý khi sử dụng

Để đạt được kết quả tốt nhất khi sử dụng Qwen2.5-Coder-1.5B cho mục đích chuẩn hóa mã nguồn, người dùng nên:

  • Cung cấp đủ ngữ cảnh: Nếu đoạn mã sử dụng các thư viện nội bộ hoặc Framework đặc thù, hãy cung cấp một phần khai báo liên quan.
  • Kiểm tra logic: Mặc dù mô hình rất chính xác trong việc định dạng, nhưng việc thay đổi tên biến đôi khi có thể gây nhầm lẫn nếu mã nguồn sử dụng các kỹ thuật như getattr hoặc setattr.
  • Tùy chỉnh Prompt: Nếu dự án có các quy tắc riêng (ví dụ: thụt lề 2 khoảng trắng thay vì 4), hãy nêu rõ yêu cầu này trong phần chỉ dẫn cho AI.

Thẻ: python PEP8 Qwen2.5-Coder LLM refactoring

Đăng vào ngày 24 tháng 7 lúc 19:38