Cách chạy các Claude Code Agents song song để tối ưu hiệu suất lập trình

06 tháng 4, 2026·13 phút đọc

Bài viết hướng dẫn cách vận hành các tác nhân lập trình Claude song song, sử dụng Git worktrees để tránh xung đột và giảm thiểu chuyển đổi ngữ cảnh, giúp lập trình viên làm việc hiệu quả hơn.

Cách chạy các Claude Code Agents song song để tối ưu hiệu suất lập trình

Kiến thức phổ biến thường khuyên chúng ta nên tránh đa nhiệm (multitasking) nhiều nhất có thể vì nó làm mất đi sự tập trung. Tuy nhiên, với sự trỗi dậy của các tác nhân lập trình (coding agents), việc làm việc song song đã trở thành một yêu cầu bắt buộc để đạt được hiệu quả. Vì các tác nhân mã hóa có thể chạy trong thời gian dài, bạn không muốn dành thời gian chờ đợi chúng hoàn thành. Thay vào đó, bạn muốn khởi chạy một tác nhân, và trong khi tác nhân đó đang làm việc, bạn bắt đầu một nhiệm vụ khác.

Tuy nhiên, việc khởi chạy các nhiệm vụ song song không hề đơn giản. Có rất nhiều cân nhắc bạn cần đưa ra, chẳng hạn như làm thế nào để chạy nhiều tác nhân lập trình trong cùng một kho lưu trữ (repository)? Làm thế nào để vẫn giảm thiểu chuyển đổi ngữ cảnh (context switching) tối đa có thể? Và làm thế nào để giữ được cái nhìn tổng quan về tất cả các tác nhân đang chạy của bạn?

Bài viết này sẽ giải quyết tất cả các điểm trên với các cụ thể về cách tôi đối phó với những vấn đề này và giải pháp mà tôi áp dụng.

Tổng quan nội dung bài viếtTổng quan nội dung bài viết

Tại sao nên chạy tác nhân song song

Giống như nhiều bài viết khác tôi đã viết, lý do chính cho các kỹ thuật được mô tả trong bài viết này là tiết kiệm thời gian và trở thành một kỹ sư hiệu quả hơn. Nếu bạn muốn tận dụng tối đa các tác nhân lập trình và sự phát triển mô hình ngôn ngữ lớn (LLM) kinh ngạc mà chúng ta đã thấy trong vài năm qua, bạn cần song song hóa công việc của mình.

Để hiểu tại sao, hãy tưởng tượng ví dụ ngược lại. Hãy tưởng tượng chỉ làm việc tuần tự, giống như bạn thường làm khi lập trình trước khi LLM xuất hiện. Lập trình tuần tự với các tác nhân sẽ trông giống như sau:

  1. Tìm nhiệm vụ bạn muốn thực hiện.
  2. Mô tả nó cho một tác nhân và lập kế hoạch.
  3. Khởi chạy tác nhân và để nó chạy. Chờ cho đến khi nó hoàn thành hoặc yêu cầu bạn điều gì đó.
  4. Kiểm tra việc triển khai và lặp lại.

Thời gian của từng nhiệm vụ này sẽ rất khác nhau. Đôi khi việc mô tả nhiệm vụ cho tác nhân và lập kế hoạch tốn nhiều thời gian nhất, nhưng theo kinh nghiệm của tôi, bước thứ ba thường là bước tốn thời gian, đặc biệt là đối với các triển khai lớn hơn như triển khai tính năng mới hoặc sửa lỗi phức tạp.

Bây giờ, để trở nên hiệu quả hơn, những gì chúng ta muốn làm là loại bỏ các nút thắt cổ chai. Bước thứ ba là một nút thắt cổ chai mà chúng ta có thể dễ dàng giảm thiểu hoặc loại bỏ. Bước một và hai rất khó để trở nên hiệu quả hơn. Bạn phải làm điều đó tuần tự và dành thời gian cho chúng. Bước thứ tư chắc chắn là điều bạn có thể làm cho hiệu quả hơn, như tôi đã mô tả trong các bài viết khác. Vì vậy, tôi sẽ tập trung vào bước 3 trong bài viết này và cách làm cho nó hiệu quả hơn.

Cách chạy tác nhân song song

Giải pháp đơn giản để làm cho bước 3 hiệu quả hơn là chạy các tác nhân song song. Điều này nghe có vẻ đơn giản về lý thuyết, nhưng thực tế lại khó thực hiện hiệu quả hơn. Lý do là chạy các nhiệm vụ song song presents một số thách thức.

Một thách thức bạn phải đối mặt là các tác nhân viết đè lên mã của nhau. Bạn không muốn các tác nhân cạnh tranh để chỉnh sửa một tệp cụ thể hoặc kiểm tra việc triển khai của riêng chúng. Vì vậy, đây là một vấn đề bạn phải giải quyết. Một vấn đề khác là bạn phải thực hiện chuyển đổi ngữ cảnh. Vì vậy, khi bạn chạy các nhiệm vụ song song, bạn tự nhiên phải chuyển đổi ngữ cảnh giữa các nhiệm vụ khác nhau. Một khía cạnh của chuyển đổi ngữ cảnh là bạn phải mô tả trước một nhiệm vụ và cách giải quyết nó, sau đó mô tả nhiệm vụ khác. Khía cạnh khác là khi tác nhân yêu cầu phản hồi, chẳng hạn như hỏi bạn về việc triển khai hoặc yêu cầu bạn kiểm tra. Vì vậy, việc giảm thiểu chuyển đổi ngữ cảnh là một khía cạnh khác mà tôi sẽ mô tả trong các phần sau.

Chạy nhiều tác nhân trong cùng một kho lưu trữ sử dụng Worktrees

Chủ đề đầu tiên tôi sẽ đề cập là cách chạy nhiều tác nhân trong cùng một kho lưu trữ. Câu trả lời đơn giản cho cách làm điều này là sử dụng worktrees.

Bạn có thể chỉ cần hướng dẫn tác nhân của mình sử dụng worktree, một tính năng của git về cơ bản sao chép toàn bộ kho lưu trữ của bạn. Vì vậy, các tác nhân khác nhau có thể hoạt động trong các kho lưu trữ hoàn toàn khác nhau. Sau khi tác nhân hoàn thành việc triển khai, nó có thể được hợp nhất vào nhánh chính của kho lưu trữ chính, và theo cách này, bạn có thể có nhiều tác nhân hoạt động trong cùng một kho lưu trữ mà không có xung đột.

Tuy nhiên, đôi khi có thể có những cách đơn giản hơn để đạt được thiết lập worktree. Từ kinh nghiệm cá nhân, tôi gặp sự cố khi sử dụng Claude Code và yêu cầu nó kiểm tra một worktree. Claude thường quên thực sự kiểm tra một worktree mới và sau đó bắt đầu làm việc trong kho lưu trữ chính. Sau đó, khi nhiều tác nhân làm điều tương tự, tôi bắt đầu gặp xung đột. May mắn thay, Claude Code đã triển khai một lệnh --worktree mà bạn có thể sử dụng khi khởi chạy cloud code, ví dụ như dưới đây:

claude --worktree

Nếu bạn sử dụng lệnh này trong một kho lưu trữ GitHub, Claude sẽ tự động kiểm tra một worktree mới dựa trên kho lưu trữ hiện có và sẽ lưu trữ tất cả các worktrees trong một thư mục ẩn của Claude. Điều này cực kỳ hữu ích vì hai lý do chính:

  • Bạn đảm bảo rằng bạn luôn sử dụng worktree và các tác nhân của bạn sẽ không can thiệp vào nhau.
  • Các worktrees được lưu trữ trong một thư mục ẩn của Claude chứ không phải trong thư mục chính của bạn. Điều này làm giảm đáng kể lượng nhiễu trong cấu trúc thư mục của bạn, giúp việc điều hướng cấu trúc thư mục thủ công dễ dàng hơn nếu bạn cần làm điều đó.

Nếu bạn đang sử dụng tác nhân lập trình khác, bạn có thể tìm ra cách họ thiết lập worktrees, vì worktrees ngày càng trở thành một tính năng được mong đợi đối với bất kỳ chương trình tác nhân lập trình nào, chẳng hạn như IDE như Cursor hoặc CLI như Claude Code.

Giảm thiểu chuyển đổi ngữ cảnh

Khía cạnh thứ hai bạn cần cân nhắc khi chạy các tác nhân lập trình song song là bạn cần giảm thiểu chuyển đổi ngữ cảnh. Tôi đã đề cập trước đó về cách điều này chủ yếu đến ở hai khía cạnh. Một là khi bắt đầu các nhiệm vụ sau, và hai là khi tương tác với tác nhân trong quá trình thực hiện nhiệm vụ, chẳng hạn như khi tác nhân đặt câu hỏi, hoặc nó hoàn thành việc triển khai và yêu cầu bạn kiểm tra.

Không có giải pháp đơn giản nào chỉ để loại bỏ chuyển đổi ngữ cảnh, vì công việc song song vốn dĩ ngụ ý chuyển đổi ngữ cảnh. Tuy nhiên, có một số điều tôi lưu ý để giảm thiểu chuyển đổi ngữ cảnh của mình.

Điều đầu tiên tôi lưu ý là luôn hoàn thành nhiệm vụ hiện tại trước khi chuyển sang nhiệm vụ khác. Điều này có vẻ rất hiển nhiên khi tôi mô tả nó; tuy nhiên, tôi muốn cung cấp một ví dụ cụ thể.

Chi phí của việc chuyển đổi ngữ cảnhChi phí của việc chuyển đổi ngữ cảnh

Hãy nói rằng bạn có hai nhiệm vụ, A và B, cần thực hiện. Nhiệm vụ A yêu cầu 5 phút tương tác từ người dùng, trong khi nhiệm vụ B yêu cầu 2 phút tương tác của người dùng và sau đó tác nhân sẽ chạy trong 10 phút để hoàn thành nhiệm vụ. Ngoài ra, bạn đã bắt đầu nhiệm vụ A và bối cảnh tinh thần của bạn hiện đang ở nhiệm vụ A.

Trong tình huống này, thật rất cám dỗ để chuyển từ nhiệm vụ A sang nhiệm vụ B, thực hiện thiết lập 2 phút cho nhiệm vụ B để tác nhân có thể chạy trong khi bạn hoàn thành nhiệm vụ A. Tuy nhiên, tôi khuyên bạn nên tránh điều này càng nhiều càng tốt và thay vào đó cố gắng hoàn thành công việc bạn đang làm rồi mới chuyển sang nhiệm vụ tiếp theo, ngay cả khi ban đầu điều này có vẻ không phải là cách tiếp cận tối ưu.

Lý do là bạn chắc chắn có thể thấy bao nhiêu phút để hoàn thành mỗi nhiệm vụ. Nhiệm vụ A mất 5 phút, nhiệm vụ B mất 2 phút tương tác và sau đó 10 phút để chạy. Tuy nhiên, điều bạn không thấy là chi phí ẩn của việc chuyển đổi ngữ cảnh, và tôi lập luận rằng việc chuyển từ A sang B và sau đó chuyển ngược lại A sẽ tốn của bạn nhiều thời gian hơn là chỉ đơn giản là hoàn thành A và sau đó hoàn thành B.

Cách thứ hai tôi giảm thiểu chuyển đổi ngữ cảnh là giảm thiểu sự xao nhãng trên máy tính của mình. Có rất nhiều cách để làm điều này, nhưng nói chung, tôi khuyên bạn nên tắt tất cả thông báo. Ví dụ, tôi đã tắt thông báo Slack trên máy tính của mình và cả con số xuất hiện trên ứng dụng Slack thông báo cho bạn biết nếu có một tin nhắn đang chờ. Tôi thấy điều này rất gây xao nhãng và loại bỏ sự tập trung và bối cảnh của tôi khỏi công việc mà tôi hiện đang làm.

Hơn nữa, tôi cố gắng giữ một tab trong thiết bị đầu cuối (terminal) của mình cho mỗi kho lưu trữ mà tôi đang làm việc. Và nếu tôi đang làm việc trên nhiều nhiệm vụ trong một kho lưu trữ duy nhất, tôi sẽ chia nhỏ tab. Tôi sẽ thảo luận về thiết bị đầu cuối của mình chi tiết hơn trong phần tiếp theo.

Giữ cái nhìn tổng quan về tất cả các tác nhân của bạn

Khi bạn chạy nhiều tác nhân, việc giữ cái nhìn tổng quan về tất cả các tác nhân là vô cùng quan trọng. Tuy nhiên, điều này không nhất thiết đến một cách tự nhiên, và bạn cần đưa ra các lựa chọn chủ động để làm cho việc có được cái nhìn tổng quan trở nên dễ dàng nhất có thể.

Đây là nơi thiết bị đầu cuối của tôi phát huy tác dụng. Khi tôi có 5 đến 10 tác nhân chạy song song, nó có thể rất dễ gây nhầm lẫn về việc tác nhân nào đang làm gì và bạn cần tương tác với cái gì.

Đối với thiết bị đầu cuối, tôi sử dụng Warp. Tôi nghĩ Warp là một thiết bị đầu cuối AI tốt có tính năng tự động điền tốt và tôi có thể dễ dàng tương tác để sử dụng Claude Code một cách hiệu quả. Tôi sử dụng một tab trong Warp cho mỗi kho lưu trữ mà tôi đang làm việc. Điều này có thể là một kho lưu trữ mã hóa, ví dụ, chứa giao diện người dùng hoặc ứng dụng, nhưng nó cũng có thể là một kho lưu trữ bán hàng nơi tôi sẽ thực hiện tất cả công việc bán hàng.

Sau đó, nếu tôi chạy nhiều tác nhân trong một kho lưu trữ, điều mà tôi thường làm, tôi chỉ cần chia nhỏ các tab bằng CMD + D trên Mac. Vì vậy, tôi có nhiều tab con được chia cho từng tab chính của mình. Điều này giúp tôi chỉ giữ một tab chính duy nhất cho mỗi kho lưu trữ, trong khi vẫn chạy nhiều tác nhân trong kho lưu trữ đó.

Hơn nữa, tôi thích đổi tên các tab của mình trong Warp thành tên kho lưu trữ để dễ dàng điều hướng đến tab chính xác. Và sử dụng CMD 1/2/3, v.v. để điều hướng nhanh giữa các tab khác nhau. Và tôi có thông báo từ Warp bất cứ khi nào tác nhân cần tương tác.

Tôi cũng muốn lưu ý rằng có nhiều thiết lập khác mà bạn có thể sử dụng cho các tác nhân lập trình của mình. Trước hết, bạn có thể sử dụng một thiết bị đầu cuối khác, có thể sẽ hoạt động khá tốt, mặc dù sở thích của tôi vẫn là Warp. Một lựa chọn thay thế tốt khác tôi biết là sử dụng ứng dụng Claude hoặc một ứng dụng gọi là Conductor, giúp dễ dàng đưa ra cái nhìn tổng quan về các kho lưu trữ và tác nhân lập trình khác nhau của bạn mà bạn đang chạy.

Nhìn chung, tuy nhiên, thiết lập của bạn phụ thuộc vào sở thích của bạn. Nếu bạn tìm thấy một thiết lập hoạt động tốt cho bạn, tôi rất khuyên bạn nên sử dụng thiết lập đó và đơn giản là bám sát nó.

Kết luận

Trong bài viết này, tôi đã thảo luận về cách song song hóa hiệu quả các nhiệm vụ lập trình của bạn. Lý do chính bạn nên làm điều này là đơn giản là để trở thành một kỹ sư hiệu quả hơn. Nếu bạn chạy các nhiệm vụ song song, bạn sẽ hiệu quả hơn nhiều so với một kỹ sư tương tự chạy các nhiệm vụ tuần tự. Tuy nhiên, chạy các nhiệm vụ song song không hề đơn giản, và bạn cần sử dụng các kỹ thuật cụ thể để giữ cái nhìn tổng quan về tất cả các tác nhân, giảm thiểu chuyển đổi ngữ cảnh và đảm bảo các tác nhân của bạn không va chạm với nhau. Tôi tin rằng khái niệm tôi đã mô tả trong bài viết này là tương lai của công việc với AI. Con người sẽ trở thành người điều phối các tác nhân AI, và bạn cần có khả năng song song hóa công việc của mình một cách hiệu quả và khởi chạy các tác nhân để hoàn thành các nhiệm vụ cụ thể trong khi bạn chỉ tương tác với các tác nhân theo yêu cầu.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗