Điều gì sẽ xảy ra khi bạn lập kế hoạch cho một dự án lớn mà không có ai chịu trách nhiệm chính? Hầu hết các ngăn xếp phần mềm (software stacks) đều giả định có một bộ điều phối duy nhất. Một tiến trình nắm giữ trạng thái, xếp hàng các công việc và phân phát các tác vụ. Nếu bộ điều phối đó khởi động lại, toàn bộ quy trình làm việc sẽ bị chệch hướng. Một dự án mới đảo ngược hoàn toàn giả định đó. Nó cho thấy cách một đàn (swarm) các tác nhân AI có thể phân rã một mục tiêu như "lập kế hoạch cho chuyến đi Nhật Bản hai tuần" thành một cây tác vụ đầy đủ mà không cần bất kỳ nút đơn lẻ nào nắm giữ toàn bộ kế hoạch tại bất kỳ thời điểm nào.
Tại sao nên xây dựng một hệ thống không người lãnh đạo?
Các bộ lập kế hoạch tập trung rất dễ để suy luận. Bạn gửi một yêu cầu đến máy chủ, nó chia nhỏ công việc, và các công nhân báo cáo lại. Vấn đề là máy chủ sẽ trở thành nút thắt cổ chai về cả nhận thức lẫn vật lý. Nó nắm giữ sự thật.
Trong một thiết lập phân tán, sự thật trở thành một bức tranh chung mà mạng lưới hội tụ thông qua cơ chế gossip. Bản triển khai Python cụ thể này kết nối hai khái niệm riêng biệt. Thứ nhất là một vòng lặp tinh chỉnh lặp đi lặp lại: một tác nhân viết một đề xuất, tác nhân khác chấm điểm nó, và tác nhân thứ ba trau chuốt nó. Thứ hai là một lớp mạng ngang hàng (peer-to-peer) được xây dựng trên libp2p, cho phép các tác nhân tự động tìm thấy nhau mà không cần sổ đăng ký hay bộ cân bằng tải. Kết quả là một cụm (cluster) nơi các nút ngang hàng xuất hiện, đề xuất, bỏ phiếu và thực thi mà không cần ai đóng vai trò nhạc trưởng.
Bốn vai trò
Hệ thống gán cho mỗi người tham gia một trong bốn tính cách. Bạn không cần bốn máy vật lý. Chúng có thể cùng tồn tại trên một máy tính xách tay hoặc trải rộng trên một mạng gia đình. Các vai trò bao gồm:
Decomposer (Người phân rã). Tác nhân này nhận mục tiêu cấp cao nhất và đề xuất chia nhỏ thành các mục tiêu phụ. Vì hệ thống chạy nhiều decomposer song song, bạn có thể nhận được ba phương án khác nhau cho cùng một chuyến đi Nhật Bản. Một phương án có thể chia hành trình theo địa lý: Tokyo, Kyoto, Osaka. Một phương án khác có thể chia theo hoạt động: di chuyển, lưu trú, ăn uống, tham quan. Phương án thứ ba có thể sắp xếp theo ngày. Mạng lưới sẽ xem xét tất cả chúng.
Scorer (Người chấm điểm). Các tác nhân này đóng vai trò như một ban biên tập. Họ kiểm tra một đề xuất chia nhỏ và đánh giá nó. Điểm số phản ánh liệu các mục tiêu phụ có đủ cụ thể, không chồng chéo và bao quát toàn bộ hay không. Quan trọng hơn, một scorer quyết định xem một đề xuất có đủ tốt để chấp nhận hay không. Nếu không có sự đồng ý của nó, một đề xuất chia nhỏ sẽ rơi vào trạng thái lấp lửng.
Executor (Người thực thi). Khi cây đạt đến các nút lá đủ nhỏ để thực hiện, các executor sẽ chạy đua để giành lấy chúng. Họ không đợi sự cho phép từ một hàng đợi trung tâm. Thay vào đó, họ sử dụng giao thức dấu thời gian (timestamp protocol) để quyết định xem ai sẽ giành được tác vụ. Người chiến thắng sẽ chạy công việc thông qua một lệnh gọi LLM cục bộ và phát sóng kết quả.
Observer (Người quan sát). Đây là người đứng ngoài quan sát mà mọi mạng lưới đều cần. Nó lặng lẽ lắng nghe các thông tin gossip, tái cấu trúc cây kế hoạch từ những cuộc trò chuyện và in ra một bản chụp (snapshot) có thể đọc được. Vì nó không bao giờ lên tiếng, nó chứng minh một điểm quan trọng: bất kỳ ai tham gia muộn đều có thể hiểu toàn bộ kế hoạch chỉ bằng cách nghe lỏm.
Gossip là nguồn sự thật duy nhất
Lớp libp2p xử lý việc khám phá và nhắn tin. Các tác nhân tìm thấy nhau thông qua tính năng khám phá ngang hàng tích hợp sẵn của giao thức, sau đó phát sóng các tin nhắn lên một chủ đề chung. Không có cơ sở dữ liệu lưu trữ, không có bộ nhớ đệm Redis nào nắm giữ kế hoạch chính thức.
Mỗi nút ngang hàng giữ một bản sao riêng của cây kế hoạch và cập nhật nó dựa trên các thông tin gossip mà nó nghe được. Khi một decomposer phát sóng một đề xuất, mọi nút khác đều nhận được, xác thực định dạng và thêm nhánh đó vào cây cục bộ của mình. Khi các scorer bỏ phiếu, kết quả kiểm phiếu cũng được lan truyền theo cách tương tự. Nếu hai executor công bố các yêu cầu xung đột cho cùng một tác vụ, giao thức dấu thời gian sẽ giải quyết sự xung đột. Mạng lưới sẽ chấp nhận yêu cầu sớm hơn và loại bỏ yêu cầu muộn hơn.
Theo thời gian, cây phát triển xuống dưới từ mục tiêu ban đầu thông qua các lớp mục tiêu phụ đã được chấp nhận cho đến khi đạt đến các tác vụ nhỏ gọn. Quá trình này giống như một blockchain đạt được sự đồng thuận, ngoại trừ việc dữ liệu là một lịch trình du lịch hoặc một đặc tả phần mềm thay vì một sổ cái tiền tệ.
Bỏ phiếu và cuộc đua thực thi
Dân chủ thì tốn kém, và hệ thống này phải trả giá bằng độ trễ (latency). Một đề xuất chia nhỏ chỉ thắng nếu có đủ các scorer đồng ý. Ngưỡng đó có thể là đa số đơn giản hoặc một hạn mức (quorum) nghiêm ngặt hơn, tùy thuộc vào cách bạn cấu hình cụm. Các decomposer không ngừng đưa ra đề xuất, vì vậy mạng lưới thường đánh giá nhiều cây cạnh tranh cùng một lúc. Cuối cùng, một cây sẽ đạt được số phiếu cần thiết và các mục tiêu phụ của nó sẽ chuyển từ bản nháp sang trạng thái được chấp nhận.
Các executor bổ sung thêm một lớp điều phối khác. Vì các tác vụ được công khai trên kênh gossip, nhiều executor có thể cùng cố gắng giành lấy cùng một leaf node hấp dẫn. Giao thức timestamp đóng vai trò là bộ phân xử (tiebreaker). Mỗi claim đều mang một monotonic timestamp, và mạng lưới sẽ ưu tiên cái sớm nhất. Bên thua cuộc chỉ đơn giản là chuyển sang tác vụ khả dụng tiếp theo. Cách làm này tuy còn thô sơ, nhưng nó giúp tránh được việc cần một bộ lập lịch tập trung (centralized scheduler) phải khóa các hàng trong cơ sở dữ liệu.
Khả năng phục hồi theo thiết kế
Kiến trúc này phát huy tối đa giá trị khi có sự cố xảy ra. Nếu một decomposer bị sập sau khi đề xuất một nửa số subgoal, các decomposer còn lại sẽ tiếp tục đưa ra các split. Kế hoạch không bị đình trệ để chờ đợi một tiến trình respawn. Nếu một scorer rời khỏi mạng, các voter còn lại vẫn có thể đạt được quorum miễn là bạn đã thiết lập quy mô cluster một cách hợp lý.
Lợi ích thực sự nằm ở việc tham gia muộn (late joins). Một agent mới khởi động khi quá trình đã diễn ra được một nửa không cần một snapshot hay một
