Gánh nặng ‘Alt-Tab’ trong lập trình hiện đại
Hầu hết các lập trình viên đã áp dụng AI, nhưng quy trình làm việc hàng ngày thường giống như một trò chơi truyền tin tẻ nhạt. Bạn sao chép một đoạn code, dán nó vào ChatGPT, giải thích ngữ cảnh và chờ đợi gợi ý. Sau đó là phần khó khăn nhất: hợp nhất các thay đổi đó trở lại IDE của bạn một cách thủ công. Nếu AI gợi ý chỉnh sửa trên năm file khác nhau, bạn sẽ phải loay hoay tìm kiếm từng dòng cụ thể, và rất dễ gây ra một vài lỗi đánh máy trong quá trình này.
Mỗi khi bạn rời khỏi trình soạn thảo để sử dụng trình duyệt web, bạn đang phải trả một loại “thuế tinh thần”. Bạn mất đi dòng suy nghĩ về vấn đề đang giải quyết vì bạn đang đóng vai trò là cầu nối thủ công giữa logic của AI và các file cục bộ của mình. Các LLM dựa trên web cũng thiếu cái nhìn toàn diện về dự án của bạn. Chúng thường xuyên “ảo tưởng” ra các hàm không tồn tại hoặc tham chiếu đến các biến mà bạn đã đổi tên từ ba commit trước.
Vấn đề của AI bị tách rời
Các giao diện LLM tiêu chuẩn bị cô lập khỏi môi trường làm việc thực tế của bạn. Chúng hoạt động như các hệ thống nhập-văn-bản, xuất-văn-bản mà không có bất kỳ nhận thức nào về hệ thống file cục bộ hoặc lịch sử git của bạn. Chúng không thể thấy auth.py tương tác thế nào với schema cơ sở dữ liệu trừ khi bạn tải toàn bộ thư mục lên một cách thủ công—một quá trình vừa chậm chạp vừa không an toàn.
Các bug phức tạp hiếm khi chỉ nằm trong một file duy nhất. Một bản sửa lỗi có thể yêu cầu thay đổi đồng thời ở frontend, logic API và bộ test. Trong một cửa sổ chat web, việc quản lý các chỉnh sửa đa file này là một cơn ác mộng. Nếu bạn bỏ lỡ một dòng trong quá trình merge thủ công, bạn vừa đổi một bug này lấy một bug khác. Hiệu quả thực sự đến từ việc đưa AI trực tiếp vào mã nguồn.
Chào mừng bạn đến với Aider: AI sống ngay trong Terminal của bạn
Aider là một công cụ dòng lệnh coi mô hình AI như một lập trình viên đồng hành (pair programmer) có toàn quyền truy cập vào kho lưu trữ git cục bộ của bạn. Thay vì đóng vai trò trung gian, bạn đưa ra lệnh cho Aider và nó sẽ chỉnh sửa trực tiếp các file của bạn. Nó theo dõi mọi thay đổi, tự động viết các thông điệp git commit đầy đủ mô tả và lập bản đồ toàn bộ cấu trúc dự án để LLM hiểu được ngữ cảnh.
Aider hoạt động tốt với những cái tên đình đám nhất. Nó hỗ trợ Claude 3.5 Sonnet—hiện là tiêu chuẩn vàng cho lập trình—cùng với GPT-4o và Gemini 1.5 Pro. Nếu bạn ưu tiên quyền riêng tư hoặc muốn tránh chi phí API, nó cũng có thể kết nối với các mô hình cục bộ thông qua Ollama.
Thiết lập môi trường
Vì Aider dựa trên Python, bạn có thể chạy nó trong vài giây bằng pip. Mặc dù cài đặt global vẫn hoạt động, nhưng một môi trường ảo sẽ giúp hệ thống của bạn sạch sẽ hơn.
pip install aider-chat
# Di chuyển vào thư mục dự án của bạn
cd /my-web-app
git init # Aider yêu cầu một repo git để theo dõi các thay đổi
Để sử dụng Claude 3.5 Sonnet, model mà tôi khuyên dùng vì khả năng suy luận vượt trội và ít thói quen lập trình “lười biếng”, chỉ cần export API key của bạn:
export ANTHROPIC_API_KEY=api-key-cua-ban-tai-day
aider --model claude-3-5-sonnet
Quản lý ngữ cảnh thông minh
Aider tránh việc bị “tràn token” bằng cách chọn lọc thông tin. Nó không nạp mù quáng toàn bộ dự án vào prompt. Thay vào đó, bạn chỉ định rõ ràng các file bạn muốn sửa đổi.
# Cho Aider biết những file cần theo dõi
/add src/api/routes.py src/models/user.py
Aider sử dụng một “bản đồ repo” (repo map) được xây dựng bằng ctags. Điều này cung cấp cho LLM một bản đồ cấp cao về các class, method và biến trong toàn bộ codebase hơn 100 file. AI hiểu rằng việc thay đổi chữ ký hàm trong utils.py sẽ làm hỏng một lệnh import trong main.py, ngay cả khi main.py không nằm trong ngữ cảnh chat hiện tại.
Ví dụ thực tế 1: Triển khai tính năng
Hãy tưởng tượng bạn cần thêm xác thực Zod vào một form TypeScript. Thay vì tự viết các code mẫu (boilerplate), chỉ cần nói với Aider:
“Thêm xác thực email và độ dài mật khẩu vào signup schema trong validation.ts. Sử dụng Zod và đảm bảo các thông báo lỗi thân thiện với người dùng.”
Aider sẽ phân tích file, áp dụng code và hiển thị cho bạn bản so sánh thay đổi (diff) được đánh dấu màu. Nếu thay đổi trông ổn, nó đã được commit. Nếu sai, một lệnh /undo sẽ xóa sạch mọi thứ để làm lại.
Ví dụ thực tế 2: Xử lý Traceback
Debugging là nơi Aider thực sự tỏa sáng. Bạn có thể nạp các lỗi terminal trực tiếp vào cửa sổ chat:
# Khi bộ test của bạn thất bại
/add server.js
/run npm test
# Aider thấy lỗi và đề nghị sửa nó
Bằng cách chạy /run, Aider thấy chính xác đầu ra của lỗi và có thể ngay lập tức đề xuất bản sửa lỗi. Điều này cắt giảm vòng lặp debug từ vài phút xuống còn vài giây.
Chọn Model: Gemini và LLM cục bộ
Claude rất tuyệt, nhưng Gemini 1.5 Pro của Google là một lựa chọn thay thế mạnh mẽ khi bạn cần xử lý các file lớn nhờ cửa sổ ngữ cảnh 2 triệu token. Việc chuyển đổi rất dễ dàng:
export GEMINI_API_KEY=key-cua-ban
aider --model gemini/gemini-1.5-pro
Đối với những người làm việc trên mã nguồn độc quyền nhạy cảm, các mô hình cục bộ là hướng đi đúng đắn. Hãy sử dụng ollama/deepseek-coder hoặc llama3. Chỉ cần lưu ý rằng các mô hình cục bộ cần VRAM đáng kể (ít nhất 24GB cho các model 33B+) để xử lý hiệu quả các hướng dẫn chỉnh sửa phức tạp của Aider.
Thành thạo các lệnh Slash
Hiệu quả trong Aider đến từ việc nắm vững các lệnh tích hợp sẵn. Những lệnh này giúp bạn không phải gõ những lời giải thích dài dòng:
/add <file>: Đưa một file vào tầm ngắm của AI./drop <file>: Xóa file khỏi ngữ cảnh để AI tập trung hơn và tiết kiệm chi phí./test <command>: Chạy các bài test của bạn. Nếu thất bại, Aider sẽ vào một vòng lặp để sửa code cho đến khi chúng vượt qua./architect: Vào chế độ mà AI mô tả kế hoạch chi tiết trước khi chạm vào bất kỳ dòng code nào.
Kinh nghiệm cộng tác với AI
Các công cụ AI chỉ tốt bằng những chỉ dẫn mà chúng nhận được. Hãy cụ thể về stack của bạn. Thay vì nói “Làm cho cái này nhanh hơn”, hãy thử “Tối ưu hóa truy vấn cơ sở dữ liệu trong get_users bằng cách sử dụng inner join thay vì nhiều lần tìm kiếm riêng lẻ”.
Giữ cho nhánh git của bạn sạch sẽ. Vì Aider tự động commit, tốt nhất là nên làm việc trên một feature branch. Nếu AI đi chệch hướng, bạn có thể dễ dàng reset. Đừng cố gắng sửa lỗi của AI một cách thủ công khi phiên làm việc đang diễn ra. Hãy nói với AI nó đã sai ở đâu và để nó tự sửa code; điều này đảm bảo bản đồ nội bộ về file của nó luôn chính xác.
Lời kết
Chuyển quy trình làm việc với AI sang terminal sẽ thay đổi mối quan hệ của bạn với code. Các nhiệm vụ tẻ nhạt như viết unit test hoặc cập nhật tài liệu trở thành các quy trình chạy nền trong năm giây. Bằng cách loại bỏ sự ma sát của vòng lặp copy-paste, bạn không còn là một người chép code nữa mà bắt đầu hành động như một kiến trúc sư phần mềm thực thụ.

