Tự động hóa Documentation: Dùng Python và Claude API để ‘dọn dẹp’ Tech Debt

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

Nỗi sợ mang tên “Documentation”

Bạn vừa hoàn thành 500 dòng logic phức tạp, mọi tính năng chạy mượt mà. Nhưng khi nhìn lại đống hàm trống trơn không một dòng comment, cảm giác nản lòng bắt đầu ập đến. Viết tài liệu thường bị coi là “việc phụ” nhàm chán. Tuy nhiên, nếu bạn quay lại sửa code sau 3 tháng hoặc bàn giao cho đồng nghiệp mà không có tài liệu, cái giá phải trả sẽ là hàng giờ đồng hồ đọc lại từng dòng logic cũ.

Kỹ năng viết tài liệu tốt thường là ranh giới giữa một Senior chuyên nghiệp và một coder chỉ biết chạy task. Thay vì ngồi gõ thủ công từng tham số args hay returns, tại sao chúng ta không để AI xử lý những phần việc mang tính lặp lại này?

Điểm qua các phương pháp tạo tài liệu hiện nay

Trước khi bắt tay vào code, hãy cùng xem giới dev thường duy trì tài liệu theo những cách nào.

1. Viết tay thủ công (Manual)

Đây là cách truyền thống nhất. Bạn tự gõ docstring cho từng function và cập nhật README.md. Cách này đảm bảo độ chính xác cao nhưng lại cực kỳ tốn thời gian. Trong các dự án chạy nước rút (Sprint), đây thường là phần bị lược bỏ đầu tiên, dẫn đến hệ quả là “nợ kỹ thuật” ngày càng chồng chất.

2. Công cụ sinh tài liệu tĩnh (Sphinx, Swagger)

Các công cụ này quét code và trích xuất comment có sẵn để tạo trang web tài liệu. Ưu điểm là tính nhất quán cao. Tuy nhiên, nhược điểm chí mạng là chúng chỉ trình bày lại những gì bạn đã viết. Nếu bạn lười viết comment ngay từ đầu, Sphinx hay Swagger cũng không thể giúp bạn giải thích logic code.

3. Ứng dụng AI (Claude API, OpenAI API)

Đây là hướng đi tối ưu nhất hiện nay. AI không chỉ đọc code mà còn hiểu được ý đồ của lập trình viên. Nó có thể tự diễn đạt lại logic bằng ngôn ngữ tự nhiên, viết hướng dẫn cài đặt dựa trên các thư viện bạn import, thậm chí gợi ý cả ví dụ sử dụng (usage examples) thực tế.

Tại sao Claude 3.5 Sonnet là lựa chọn hàng đầu cho Code?

Sau khi thử nghiệm thực tế trên các dự án Python phức tạp, mình ưu tiên chọn Claude API vì ba lý do cụ thể:

  • Tư duy logic chặt chẽ: Claude 3.5 Sonnet ít gặp tình trạng “ảo giác” (hallucination) hơn khi giải thích các cấu trúc lồng nhau (nested logic).
  • Context Window cực lớn: Với khả năng xử lý lên đến 200.000 tokens, bạn có thể đẩy toàn bộ module gồm nhiều file vào để AI hiểu được bức tranh tổng thể.
  • Giọng văn kỹ thuật chuyên nghiệp: Kết quả trả về thường gãy gọn, đúng trọng tâm và tuân thủ tốt các tiêu chuẩn như Google Style hay Numpy Style.

Xây dựng công cụ Auto Documentation

Chúng ta sẽ viết một script Python nhỏ để tự động quét file code, sau đó dùng Claude API để bổ sung docstring và tạo file README.

Bước 1: Cài đặt môi trường

Bạn cần lấy API Key tại Anthropic Console. Sau đó, cài đặt thư viện chính thức:

pip install anthropic python-dotenv

Bước 2: Đọc mã nguồn với Pathlib

Sử dụng pathlib sẽ giúp script của bạn chạy mượt mà trên cả Windows và Linux.

import os
from pathlib import Path
from anthropic import Anthropic
from dotenv import load_dotenv

load_dotenv()
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))

def read_source_code(file_path):
    path = Path(file_path)
    return path.read_text(encoding="utf-8")

Bước 3: Cấu trúc Prompt tối ưu

Để AI không viết lan man, prompt cần được thiết kế chặt chẽ. Đừng chỉ yêu cầu “viết tài liệu”, hãy đặt ra các ràng buộc cụ thể.

def generate_documentation(code_content):
    prompt = f"""
    Bạn là một kỹ sư phần mềm cao cấp. Hãy phân tích mã nguồn sau:
    
    {code_content}
    
    Yêu cầu:
    1. Thêm docstring chuẩn Google Style cho mọi class và function.
    2. Giải thích rõ các tham số đầu vào và giá trị trả về.
    3. Giữ nguyên logic code, chỉ bổ sung comment.
    4. Trả về định dạng code block hoàn chỉnh.
    """
    
    response = client.messages.create(
        model="claude-3-5-sonnet-20240620",
        max_tokens=4000,
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text

Bước 4: Thực thi và lưu kết quả

Script sẽ ghi nội dung đã được AI tinh chỉnh vào một file mới để bạn dễ dàng so sánh.

def main():
    target_file = "core_logic.py"
    print(f"[*] Đang phân tích: {target_file}")
    
    raw_code = read_source_code(target_file)
    documented_code = generate_documentation(raw_code)
    
    output_path = Path(f"documented_{target_file}")
    output_path.write_text(documented_code, encoding="utf-8")
    
    print(f"[+] Thành công! Tài liệu đã sẵn sàng tại {output_path}")

if __name__ == "__main__":
    main()

Đánh giá hiệu quả thực tế

Sau khi áp dụng quy trình này cho một dự án nội bộ có khoảng 50 functions, mình nhận thấy những thay đổi rõ rệt.

Ưu điểm vượt trội

  • Tiết kiệm thời gian: Công việc vốn tốn 2 tiếng mỗi tuần nay chỉ mất chưa đầy 2 phút.
  • Tính nhất quán: Toàn bộ docstring trong dự án đều tuân theo một định dạng duy nhất, giúp việc tra cứu cực kỳ dễ dàng.
  • Hỗ trợ Onboarding: Thành viên mới có thể hiểu ngay mục đích của các hàm phức tạp mà không cần làm phiền người viết code cũ.

Lưu ý về bảo mật và chi phí

  • Kiểm soát dữ liệu: Tránh gửi các file chứa Secret Key hoặc thông tin khách hàng lên API. Hãy dùng biến môi trường để lọc bỏ dữ liệu nhạy cảm trước.
  • Review là bắt buộc: AI đôi khi hiểu lầm các logic nghiệp vụ (business logic) quá đặc thù. Bạn luôn phải kiểm tra lại trước khi merge vào nhánh chính.
  • Chi phí: Với Claude 3.5 Sonnet, chi phí để xử lý 1.000 dòng code chỉ rơi vào khoảng vài cent, rất rẻ so với giá trị thời gian bạn tiết kiệm được.

Lời kết

Xây dựng công cụ Auto Documentation không khó, rào cản lớn nhất chính là thay đổi tư duy làm việc. Khi coi tài liệu là một phần của quy trình tự động hóa thay vì gánh nặng, chất lượng sản phẩm của bạn sẽ nâng lên một tầm cao mới.

Nếu bạn đang quản lý một repo mã nguồn mở hoặc làm việc trong team Agile, hãy thử tích hợp script này vào CI/CD. Chắc chắn đồng nghiệp sẽ ngạc nhiên vì sự chỉn chu và chuyên nghiệp trong từng dòng code của bạn!

Share: