Giờ đây, các nhà phát triển có thể khởi tạo nhiều phiên làm việc của agent lập trình cùng một lúc mà không lo ngại về việc các tệp trạng thái bị ghi đè hoặc xung đột tệp ẩn. Một mô hình "share-nothing" (không chia sẻ) mang tính khuyến nghị sẽ cô lập không gian làm việc của từng agent và cảnh báo về các xung đột tiềm ẩn. Cách tiếp cận này thay thế các cơ chế khóa cứng (hard locks) bằng một sổ đăng ký (registry) nhẹ nhàng giúp cảnh báo các công việc chồng chéo trước khi chúng xảy ra, giúp các luồng công việc (pipelines) luôn được vận hành ngay cả khi một phiên làm việc bị lỗi.

Tại sao các agent chạy song song gây rắc rối

Việc chạy nhiều hơn một trợ lý lập trình tự động trong cùng một kho lưu trữ (repository) giúp tăng tốc quá trình tạo mã, kiểm thử hoặc tái cấu trúc mã (refactoring). Tuy nhiên, trên thực tế, có hai vấn đề nảy sinh ngay lập tức.

  • Hỏng dữ liệu trạng thái (State corruption) – Hai agent cùng ghi vào một tệp trạng thái; lần ghi sau sẽ ghi đè lên lần ghi trước, làm mất tiến trình đã thực hiện.
  • Xung đột tệp (File collision) – Hai agent cùng chỉnh sửa một tệp nguồn mà không biết về sự hiện diện của nhau. Xung đột sẽ xuất hiện sau đó, khi lệnh diff cho thấy các thay đổi khác biệt.

Cả hai vấn đề này đều gây lãng phí thời gian của nhà phát triển và có thể dẫn đến các lỗi khó truy vết.

Quy tắc “share nothing”

Ý tưởng cốt lõi rất đơn giản: mỗi agent có một vùng lưu trữ tạm thời riêng biệt trên đĩa và chỉ ghi vào các tệp thuộc về phiên làm việc đó. Chỉ cho phép duy nhất một tệp được chia sẻ có chủ đích trên mỗi nhánh, và tệp đó tuân theo quy tắc “người viết cuối cùng sẽ thắng” (last-writer-wins)—agent nào ghi cuối cùng sẽ quyết định nội dung cuối cùng.

Một lớp hiện diện (presence layer) sẽ theo dõi mọi phiên làm việc đang hoạt động:

  • Tên nhánh
  • Danh sách các tệp đang được tác động
  • Dấu thời gian của hoạt động cuối cùng

Khi một phiên làm việc mới bắt đầu, nó sẽ tham chiếu đến sổ đăng ký. Nếu một phiên khác đã và đang xử lý bất kỳ tệp nào trong số đó, nhà phát triển sẽ nhận được cảnh báo trước khi bất kỳ công việc nào bắt đầu.

Khóa khuyến nghị so với khóa chặn

Các tệp khóa truyền thống hoạt động giống như một con đường cụt: một khi khóa đã được chiếm giữ, bất kỳ tiến trình nào khác cũng phải chờ cho đến khi khóa được giải phóng. Nếu phiên làm việc sở hữu khóa bị lỗi, khóa đó có thể tồn tại vô thời hạn, buộc người dùng phải tìm kiếm thủ công các tệp khóa lỗi thời.

Mô hình khuyến nghị (advisory model) thì nhẹ nhàng hơn. Nó đưa ra cảnh báo khi phát hiện xung đột tiềm ẩn nhưng không dừng phiên làm việc mới. Nếu một mục trong sổ đăng ký đã cũ—nghĩa là tiến trình tạo ra nó không còn tồn tại—hệ thống vẫn chỉ đưa ra cảnh báo, để nhà phát triển tự quyết định có tiếp tục hay không.

Cách triển khai mô hình này

  1. Phân chia trạng thái theo người ghi – Cấp cho mỗi agent một thư mục riêng cho các tệp tạm thời và trạng thái. Chỉ dành các tệp chia sẻ cho dữ liệu thực sự mang tính toàn cục và chỉ áp dụng quy tắc "người viết cuối cùng sẽ thắng" tại đó.
  2. Tích hợp khả năng nhận biết khi khởi chạy – Trước khi một agent bắt đầu, hãy đọc sổ đăng ký hiện diện và so sánh danh sách tệp được yêu cầu với các mục hiện có. Hủy bỏ hoặc cảnh báo nếu tìm thấy sự chồng chéo.
  3. Xác minh trạng thái hoạt động khi đọc – Khi tham chiếu một mục trong sổ đăng ký, hãy kiểm tra xem ID tiến trình (process ID) đã ghi có còn đang chạy trên hệ điều hành hay không. Loại bỏ các mục thuộc về các tiến trình đã chết.
  4. Ưu tiên cơ chế khuyến nghị thay vì chặn – Hãy để các nhà phát triển giữ quyền kiểm soát. Một cảnh báo cho phép họ tiếp tục, tạm dừng hoặc hủy bỏ, tránh tình trạng bế tắc (deadlock).
  5. Theo dõi các trạng thái chờ – Khi có nhiều agent đang hoạt động, sự chú ý của nhà phát triển sẽ trở thành nút thắt cổ chai. Hãy hiển thị agent nào đang chờ phản hồi từ con người để có thể ưu tiên lại công việc.

Tất cả những điều này có thể được xây dựng chỉ với một thư mục chứa các tệp JSON; không cần cơ sở dữ liệu bên ngoài hay message bus nào. Định dạng lưu trữ đơn giản giúp hệ thống dễ dàng kiểm tra và có thể di chuyển linh hoạt giữa các môi trường.

Rủi ro và các quan điểm phản biện

Một số nhóm có thể lập luận rằng khóa cứng đảm bảo tính an toàn: không có hai agent nào có thể ghi vào cùng một tệp. Tuy nhiên, sự đánh đổi là giảm khả năng phục hồi—các phiên làm việc bị lỗi sẽ để lại các khóa mồ côi làm đình trệ toàn bộ quy trình làm việc.

Những điều cần lưu ý

Nếu bạn đang điều phối nhiều trợ lý mã nguồn dựa trên AI, mô hình khuyến nghị “share nothing” cung cấp một lộ trình thực tế để ngăn chúng xung đột với nhau. Bằng cách cô lập trạng thái, bộc lộ ý định sớm và để con người quyết định khi nào cần tiếp tục, phương pháp này cân bằng giữa tính an toàn và sự linh hoạt mà các luồng phát triển hiện đại yêu cầu.