Xây dựng 10 tác nhân AI tùy chỉnh để làm chủ kho code Clojure 500.000 dòng
Backend của Metabase là một hệ thống khổng lồ với 500.000 dòng code Clojure, gây khó khăn cho các công cụ AI như Claude Code do giới hạn ngữ cảnh. Tác giả đã giải quyết vấn đề này bằng cách xây dựng 10 tác nhân con (subagents) tùy chỉnh, chuyên biệt hóa cho từng lĩnh vực cụ thể để tối ưu hóa hiệu suất và giảm tải tài nguyên xử lý.

Backend của Metabase có quy mô rất lớn. Chúng ta đang nói về 500.000 dòng code Clojure được phân bổ trên bộ xử lý truy vấn, hệ thống phân quyền, nhiều trình điều khiển cơ sở dữ liệu, đường ống thông báo, lớp tuần tự hóa, công cụ tìm kiếm và nhiều thành phần khác. Giống như mọi kho code lớn, mỗi hệ thống con đều có những quy tắc, cạm bẫy và những "bạn chỉ cần biết" riêng của nó.
Các tác nhân con tùy chỉnh
Tôi đã sử dụng Claude Code cho công việc backend tại Metabase một thời gian. Nó khá tốt. Tuy nhiên, nó nhanh chóng làm quá tải cửa sổ ngữ cảnh (context window). Mỗi khi Claude cần hiểu một hệ thống con, nó phải khám phá, tìm kiếm (grep) và đọc các tệp. Tất cả quá trình khám phá đó "ăn" vào dung lượng ngữ cảnh. Ngay cả khi Claude tạo ra các tác nhân con, chúng vẫn cần làm rất nhiều việc phụ để bắt kịp tốc độ với lĩnh vực đó.
Tôi đã xây dựng một số tác nhân con tùy chỉnh để khắc phục vấn đề này.
Backend của Metabase có các ranh giới lĩnh vực tự nhiên. Bộ xử lý truy vấn là một đường ống trung gian gồm 68 giai đoạn biên dịch MBQL (Metabase Query Language) sang SQL trên 18 phương ngữ cơ sở dữ liệu. Hệ thống phân quyền là một biểu đồ đa hạt nhân xử lý bảo mật cấp độ hàng, định tuyến cơ sở dữ liệu và mạo danh kết nối. Hệ thống thông báo kết xuất biểu đồ thành hình ảnh bên trong JVM. Đây là những thế giới hoàn toàn khác nhau.
Một phiên Claude tổng quát có thể điều hướng bất kỳ cái nào trong số chúng, nhưng nó phải trả một "thuế ngữ cảnh" mỗi khi chuyển đổi lĩnh vực. Các tác nhân con loại bỏ thuế này bằng cách nạp trước kiến thức lĩnh vực vào lời nhắc hệ thống.
Tác nhân con là gì?
Tác nhân con là một tính năng của Claude Code cho phép bạn định nghĩa các trợ lý AI chuyên biệt dưới dạng tệp markdown. Mỗi tác nhân có cửa sổ ngữ cảnh, lời nhắc hệ thống, bộ nhớ, bộ công cụ và lựa chọn mô hình riêng.
Tôi đã sử dụng Claude để viết "mô tả công việc" cho từng tác nhân. Tôi mô tả lĩnh vực và những gì một chuyên gia sẽ biết, và Claude giúp tôi hoàn thiện các vị trí trong codebase, mẫu điều tra, các lưu ý và chiến lược thử nghiệm. Mỗi tác nhân kết quả khoảng 2.000-3.000 token (khoảng 150 dòng markdown) ngữ cảnh dày đặc, hữu ích không thể dễ dàng suy ra từ code.
Mỗi tác nhân là một tệp markdown tuân theo cùng một mẫu: kiến thức lĩnh vực -> vị trí codebase -> cách tiếp cận điều tra -> các lưu ý -> chiến lược thử nghiệm. Đó là tài liệu "đây là mọi thứ bạn cần để hữu ích trong góc phần mềm này".
Chuyên gia xử lý truy vấn (MBQL Expert)
Bộ xử lý truy vấn là trái tim của Metabase và là thứ khó khăn nhất để điều hướng. Nó là một đường ống trung gian gồm 68 giai đoạn nơi một truy vấn đi vào dưới dạng MBQL, được viết lại 44 lần trong quá trình tiền xử lý, biên dịch sang SQL qua HoneySQL, thực thi, và sau đó được xử lý hậu kỳ thêm 13 giai đoạn nữa. Ồ, và một số phần mềm trung gian chạy hai lần vì các giai đoạn sau có thể giới thiệu cấu trúc mà các giai đoạn trước cần xử lý lại. Xử lý truy vấn là một vấn đề phức tạp, đặc biệt khi xử lý nhiều cơ sở dữ liệu khác nhau.
mbql-expert đã biết tất cả những điều này. Khi tôi nói "truy nguyên lý do truy vấn lồng nhau này với các phép nối tạo ra kết quả sai trên Redshift", nó không bắt đầu bằng cách grep. Nó suy luận về các giai đoạn phần mềm trung gian nào chạm vào bí danh nối, kiểm tra các ghi đè trình điều khiển cụ thể của Redshift và kiểm tra đầu ra HoneySQL. Đó là sự khác biệt giữa một người tổng quát đang khám phá và một chuyên gia đang điều tra.
Cách sử dụng
Điểm hay là bạn không cần cú pháp đặc biệt. Chỉ cần đề cập đến tác nhân:
"Hãy hỏi mbql-expert xem tại sao truy vấn này lại chậm."
Claude đọc ý định và ủy quyền công việc cho tác nhân đúng. Nếu muốn rõ ràng, bạn cũng có thể @-nhắc trực tiếp các tác nhân.
Một mẫu hữu ích cho việc đề cập trực tiếp: khởi chạy nhiều tác nhân song song. Khi xem xét một thay đổi chạm vào bộ xử lý truy vấn và phân quyền, tôi sẽ yêu cầu Claude để cả hai chuyên gia đưa ra ý kiến cùng lúc. Mỗi chuyên gia điều tra trong ngữ cảnh của riêng mình và kết quả quay lại mà không làm ô nhiễm quá trình khám phá của nhau.
Mẫu tôi đã mô tả hoạt động cho bất kỳ kho code lớn nào có các hệ thống con riêng biệt. Xem tài liệu về tác nhân con của Claude để biết chi tiết về cách cấu trúc các tệp.
Repro Bot
Dưới đây là một số thứ đã hoạt động với tôi:
- Các tác nhân cá nhân sống trong
~/.claude/agents/, và các tác nhân cục bộ dự án nằm trong.claude/agents/. - Repro-Bot là một tác nhân AI tái tạo các vấn đề trong danh sách việc cần làm của Metabase để giúp chúng tôi sửa lỗi nhanh hơn.
Bài viết liên quan

Phần mềm
Thay thế PySpark bằng 4 tệp YAML: Cách để các nhà phân tích xây dựng Data Pipeline mà không cần kỹ sư
29 tháng 4, 2026

Công nghệ
Startup Pursuit huy động 22 triệu USD để dùng AI hỗ trợ doanh nghiệp bán hàng cho chính phủ
29 tháng 4, 2026

Phần mềm
Google Photos biến tủ quần áo trong phim "Clueless" thành hiện thực nhờ AI
29 tháng 4, 2026
