Hai tác vụ AI của tôi cứ tranh giành nhau một con chuột
Các bản demo agent chạy song song trông rất tuyệt. Nhưng chúng sẽ thất bại ngay khi có hai tác vụ cùng cố gắng sử dụng một con chuột.
Một tác vụ đăng nhập vào một trang web. Một tác vụ khác mở trình duyệt. Tác vụ thứ ba yêu cầu cập nhật trạng thái. Đột nhiên, hệ thống click nhầm chỗ hoặc hủy nhầm tiến trình đang chạy. Đây không phải là lỗi logic. Đó là sự tranh chấp tài nguyên (resource contention).
Tôi đã học được điều này khi xây dựng CliGate, hệ thống điều khiển cục bộ (local control plane) cho tự động hóa desktop của mình.
Tính song song hoạt động tốt với mã nguồn. Bạn có thể chạy một lệnh tra cứu thời tiết trong khi một phiên thực thi (runtime session) đang hoạt động. Một bản tóm tắt chạy ngầm không cần phải chặn bất cứ thứ gì.
Nhưng desktop thì khác. Bạn chỉ có một bàn phím vật lý, một con chuột và một màn hình. Nếu hai agent cùng cố gắng chiếm quyền kiểm soát bề mặt đó, chúng sẽ phá hỏng công việc của nhau.
Bản năng đầu tiên của tôi là hủy tác vụ cũ khi có tác vụ mới đến. Điều này là sai lầm. Một người dùng hỏi "đã thực hiện đến đâu rồi?" không nên làm gián đoạn một luồng đăng nhập.
Tôi đã ngừng coi tính đồng thời (concurrency) là một vấn đề về prompt. Đó là một vấn đề về tài nguyên.
Tôi đã triển khai ba quy tắc đơn giản:
- Các tác vụ độc lập chạy song song.
- Các tác vụ cần đến desktop phải xếp hàng (queue).
- Việc hủy chỉ xảy ra khi người dùng yêu cầu.
Trong CliGate, việc nhập liệu desktop hoạt động giống như một quyền sử dụng tạm thời (lease). Một tác vụ sử dụng chuột sẽ trở thành người nắm giữ desktop. Các tác vụ khác phải chờ.
Logic mới tuân theo luồng sau:
- Một tác vụ mới đến.
- Nó có cần desktop không?
- Nếu không, hãy chạy song song.
- Nếu có và desktop đang rảnh, hãy chiếm lấy nó.
- Nếu có và desktop đang bận, hãy đưa vào hàng đợi.
- Chỉ hủy nếu người dùng nói dừng.
Việc thử lại (retries) thường làm cho tự động hóa desktop trở nên tồi tệ hơn. Nếu tác vụ thứ hai liên tục cố gắng giành lấy chuột, nó sẽ làm tăng sự can thiệp. Thay vì cố gắng thử lại dồn dập hơn, trợ lý nên nói: "Desktop đang bận. Tôi đang ở trong hàng đợi. Tôi sẽ bắt đầu khi nó rảnh."
Điều này biến một lỗi thành một hành vi có thể dự đoán được.
Tôi cũng thêm một quy tắc cứng: một agent không thể tự hủy tiến trình đang chạy của chính nó. Điều này ngăn agent nhấn nhầm nút tắt của chính mình trong lúc hoảng loạn.
Hành vi AI kém thường đến từ việc cố gắng trở nên quá thông minh. Người dùng cần thứ gì đó đơn giản hơn nhiều:
- Chạy các tác vụ không xung đột.
- Xếp hàng các tác vụ xung đột về tài nguyên vật lý.
- Trả lời các câu hỏi về trạng thái từ nhật ký trạng thái (status logs).
- Dừng lại khi người dùng nói dừng.
Nếu bạn xây dựng các công cụ AI có tương tác với desktop, hãy nhớ điều này: các tác vụ song song thì ổn, nhưng các tài nguyên vật lý cần có quyền sở hữu rõ ràng.
Source: https://dev.to/codekingai/my-two-ai-tasks-kept-fighting-for-the-same-mouse-1hij