Mở rộng quy trình làm việc: Sử dụng Sub-agent trong Claude Code cho các tác vụ lập trình phức tạp

AI tutorial - IT technology blog
AI tutorial - IT technology blog

Giới hạn của việc lập trình với AI đơn tác vụ

Tôi từng mất bốn tiếng đồng hồ cố gắng yêu cầu một trợ lý AI refactor một dịch vụ Node.js cũ với hơn 50 endpoint. Tôi cần nó cập nhật tài liệu Swagger và viết test tích hợp cùng một lúc. Kết quả là một thảm họa. Giữa chừng, AI quên mất schema của cơ sở dữ liệu. Nó bắt đầu gọi các hàm không tồn tại và tài liệu thì trở thành một mớ hỗn độn đầy ảo giác.

Đây là bức tường mà mọi lập trình viên cuối cùng đều vấp phải. Khi bạn yêu cầu một AI agent tung hứng nhiều tác vụ cấp cao cùng lúc, nó sẽ cạn kiệt “bộ nhớ làm việc”. Khi dự án phát triển lên hàng nghìn dòng code, chất lượng đầu ra sẽ giảm sút. Bạn cuối cùng mất nhiều thời gian để debug AI hơn là thực sự triển khai tính năng.

Tại sao bão hòa ngữ cảnh lại giết chết năng suất

Vấn đề không phải là mô hình thiếu thông minh. Đó là sự bão hòa ngữ cảnh (context saturation). Trong một cuộc hội thoại thông thường, mọi tóm tắt tệp và hướng dẫn đều cạnh tranh cho cùng một sự tập trung hạn hẹp. Khi bạn yêu cầu vừa refactor vừa viết tài liệu, AI sẽ gặp khó khăn trong việc cân bằng giữa logic phức tạp và các quy tắc định dạng.

Các kho lưu trữ (repository) lớn thường gây nhiễu. Một agent đơn lẻ thường bị xao nhãng bởi các tệp helper không liên quan hoặc thất bại trong việc duy trì sự tập trung vào các tác vụ phụ chuyên biệt. Nó coi một chỉnh sửa CSS nhỏ có độ ưu tiên ngang hàng với một bản vá bảo mật API quan trọng. Để có kết quả chuyên nghiệp, bạn phải chia nhỏ các tác vụ này. Bạn cần các thực thể chuyên biệt không bị sa lầy vào những tạp âm của toàn bộ dự án.

Giải pháp: Sub-agent trong Claude Code

Claude Code giải quyết vấn đề này bằng cách sử dụng các sub-agent (agent phụ). Thay vì một instance cố gắng làm mọi thứ, bạn có một agent chính đóng vai trò như một quản lý dự án (project manager). Quản lý này có thể tạo ra các phiên bản Claude tạm thời và chuyên biệt. Mỗi phiên bản sẽ có một phạm vi hẹp và một bộ công cụ cụ thể để hoàn thành một công việc một cách hoàn hảo.

Hãy coi nó như một đội ngũ kỹ thuật thực thụ. Một lập trình viên trưởng (lead dev) không tự viết từng dòng code mẫu (boilerplate). Họ ủy quyền phần giao diện (UI) cho một chuyên gia front-end và phần API cho một chuyên gia back-end. Sub-agent mang lại hiệu quả phân cấp tương tự trực tiếp vào terminal của bạn.

Bắt đầu nhanh: Khởi tạo Sub-agent đầu tiên

Nếu bạn đã cài đặt Claude Code, bạn không cần thiết lập phức tạp. Công cụ này được thiết kế để nhận biết khi nào một tác vụ quá lớn đối với một lượt xử lý. Nó thường sẽ tự động gợi ý khởi tạo một tiến trình phụ.

Để thấy điều này hoạt động, hãy thử một lệnh yêu cầu làm việc song song. Mở terminal trong thư mục dự án và chạy:

claude "Refactor phần xác thực người dùng trong auth.ts. Trong khi làm việc đó, hãy sử dụng một sub-agent để viết hướng dẫn bằng markdown cho các endpoint mới."

Bạn sẽ thấy Claude Code khởi tạo một tác vụ riêng biệt. Giao diện sẽ chỉ định rằng nó đang ủy quyền phần tài liệu. Điều này giúp agent chính tập trung vào logic TypeScript mà không làm xáo trộn bộ nhớ của nó với cú pháp markdown. Đây là một cách làm việc sạch sẽ và nhanh chóng hơn.

Bạn cũng có thể ủy quyền một cách rõ ràng hơn:

claude "Tôi đang chuyển dự án này sang Vitest. Hãy tạo một sub-agent để chuyển đổi 20 bài kiểm tra Jest hiện có trong khi bạn giúp tôi cập nhật package.json và cấu hình."

Cơ chế ủy quyền hoạt động như thế nào

Khi Claude Code tạo một sub-agent, nó không chỉ đơn thuần là mở một cửa sổ chat mới. Nó xây dựng một ngữ cảnh thực thi mới hoàn toàn. Sub-agent này nhận được ba thứ cụ thể:

  • Sứ mệnh hẹp: Một prompt cụ thể đã được loại bỏ các yếu tố gây nhiễu bên ngoài.
  • Công cụ có phạm vi: Quyền truy cập vào hệ thống tệp, nhưng thường bị giới hạn trong các thư mục cụ thể.
  • Ngữ cảnh độc lập: Nó không thể nhìn thấy các tệp không liên quan, điều này giúp giảm đáng kể hiện tượng ảo giác (hallucination).

Theo kinh nghiệm của tôi, bí quyết để làm chủ Claude Code là xác định các tác vụ trực giao (orthogonal tasks). Đây là những tác vụ không chồng chéo về logic nhưng thuộc về cùng một tính năng. Ví dụ, nếu tôi đang xây dựng một component React, tôi để agent chính xử lý logic trong khi một sub-agent viết Tailwind CSS. Chúng làm việc song song, giúp tôi tiết kiệm khoảng 30% tổng thời gian phát triển.

Quy trình làm việc đa giai đoạn nâng cao

Đối với các cuộc di chuyển (migration) lớn, bạn có thể chuỗi các tương tác này lại với nhau. Tôi sử dụng mô hình ‘Nghiên cứu -> Thực thi -> Xác minh’ cho các tác vụ phức tạp. Đây là cách tôi cấu trúc một prompt cho việc di chuyển cơ sở dữ liệu:

claude "Chúng ta đang chuyển từ TypeORM sang Prisma. Hãy làm theo các bước sau:
1. Khởi tạo một sub-agent để ánh xạ 15 entity của chúng ta sang tệp prisma.schema.
2. Khi schema đã sẵn sàng, chúng ta sẽ cùng nhau xem xét.
3. Sau đó, khởi tạo một sub-agent khác để viết lại các tệp repository.
4. Cuối cùng, sử dụng một sub-agent để chạy build và sửa các lỗi type."

Cấu trúc này ngăn chặn hiện tượng ‘trôi dạt ngữ cảnh’ (context drift). AI không cần phải nhớ cú pháp TypeORM cũ trong khi viết code Prisma mới. Mỗi sub-agent bắt đầu with một trạng thái sạch sẽ, chỉ tập trung vào bước cụ thể của nó.

Theo dõi các Sub-agent của bạn

Trong khi sub-agent chạy, Claude Code cung cấp các cập nhật trạng thái trực tiếp trong CLI của bạn. Bạn sẽ thấy các icon hiển thị ‘Sub-agent working…’ hoặc các thao tác tệp cụ thể. Bạn có thể ngắt tiến trình nếu nó có vẻ đang bị lặp. Hãy coi agent chính là đầu mối liên lạc chính của bạn. Bạn không nói chuyện trực tiếp với các chuyên gia; bạn nói với người quản lý những gì bạn muốn thực hiện.

Mẹo chuyên nghiệp để quản lý Agent

Ủy quyền rất mạnh mẽ, nhưng nó có thể trở nên tốn kém hoặc lộn xộn nếu bạn không cẩn thận. Đây là cách tôi giữ cho quy trình làm việc của mình hiệu quả:

  • Thiết lập ranh giới nghiêm ngặt: Cho sub-agent biết chính xác thư mục nào cần tác động. Sử dụng các cụm từ như “Chỉ sửa đổi các tệp trong /src/components.”
  • Kiểm tra việc bàn giao: Khi một sub-agent hoàn thành, người quản lý sẽ tóm tắt công việc. Hãy đọc kỹ phần này. Nếu sub-agent làm không đúng ý, hãy hoàn tác (revert) các thay đổi ngay lập tức.
  • Ngắt vòng lặp: Nếu một sub-agent chạy cùng một lệnh ba lần mà không thành công, hãy dừng nó lại. Cung cấp một gợi ý thủ công để đưa nó trở lại đúng hướng.
  • Đánh giá chi phí: Mỗi sub-agent đều tiêu tốn token. Đối với một tác vụ mất 2 phút, điều đó là quá mức cần thiết. Hãy để dành chúng cho các tác vụ mà con người sẽ mất 20 phút hoặc hơn để thực hiện.

Tôi thường sử dụng sub-agent cho code mẫu (boilerplate), chuyển đổi định dạng dữ liệu hàng loạt hoặc cập nhật import trong một thư mục 100 tệp. Những tác vụ này có logic đơn giản nhưng khối lượng lớn. Đó chính xác là nơi một chuyên gia tỏa sáng. Bằng cách chuyển sang tư duy ủy quyền, bạn biến Claude Code từ một chatbot đơn giản thành một đối tác kỹ thuật thực sự tự chủ.

Share: