งาน AI สองงานของผมแย่งเมาส์ตัวเดียวกันไม่หยุด
การสาธิตเอเจนต์แบบขนาน (Parallel agent demos) ดูดีมาก แต่มันจะล้มเหลวทันทีเมื่อมีสองงานพยายามใช้เมาส์ตัวเดียวกัน
งานหนึ่งกำลังล็อกอินเข้าเว็บไซต์ อีกงานหนึ่งกำลังเปิดเบราว์เซอร์ และงานที่สามกำลังถามหาการอัปเดตสถานะ ทันใดนั้น ระบบก็คลิกผิดที่หรือยกเลิกการทำงานที่ผิดพลาด นี่ไม่ใช่ข้อผิดพลาดทางตรรกะ (logic error) แต่มันคือการแย่งชิงทรัพยากร (resource contention)
ผมเรียนรู้เรื่องนี้ระหว่างการสร้าง CliGate ซึ่งเป็น local control plane สำหรับการทำ desktop automation ของผม
การทำงานแบบขนาน (Parallelism) ใช้ได้ผลกับโค้ด คุณสามารถรันการค้นหาข้อมูลสภาพอากาศในขณะที่เซสชันการทำงาน (runtime session) กำลังทำงานอยู่ได้ การสรุปข้อมูลเบื้องหลังไม่จำเป็นต้องไปขัดขวางสิ่งใด
แต่เดสก์ท็อปนั้นต่างออกไป คุณมีคีย์บอร์ดหนึ่งอัน เมาส์หนึ่งอัน และหน้าจอหนึ่งจอ หากเอเจนต์สองตัวพยายามจะเข้าควบคุมพื้นผิว (surface) นั้น พวกมันจะขัดขวางกันเอง
สัญชาตญาณแรกของผมคือการยกเลิกงานเก่าเมื่อมีงานใหม่เข้ามา แต่นั่นเป็นสิ่งที่ผิด ผู้ใช้ที่ถามว่า "ดำเนินการไปถึงไหนแล้ว?" ไม่ควรทำให้ขั้นตอนการล็อกอินต้องหยุดชะงัก
ผมเลิกมองว่าการทำงานพร้อมกัน (concurrency) เป็นปัญหาเรื่อง prompt แต่มันคือปัญหาเรื่องทรัพยากร
ผมได้นำกฎง่ายๆ สามข้อมาใช้:
- งานที่เป็นอิสระต่อกันให้รันแบบขนาน
- งานที่ต้องใช้เดสก์ท็อปต้องเข้าคิว
- การยกเลิกจะเกิดขึ้นก็ต่อเมื่อผู้ใช้สั่งเท่านั้น
ใน CliGate การป้อนข้อมูลผ่านเดสก์ท็อปจะทำงานเหมือนการเช่า (lease) งานที่ใช้เมาส์จะกลายเป็นผู้ถือครองเดสก์ท็อป ส่วนงานอื่นๆ ต้องรอ
ตรรกะใหม่จะดำเนินตามขั้นตอนดังนี้:
- มีงานใหม่เข้ามา
- งานนั้นต้องใช้เดสก์ท็อปหรือไม่?
- ถ้าไม่ ให้รันแบบขนาน
- ถ้าใช่และเดสก์ท็อปว่าง ให้เข้าใช้งาน
- ถ้าใช่และเดสก์ท็อปไม่ว่าง ให้เข้าคิว
- ยกเลิกก็ต่อเมื่อผู้ใช้สั่งให้หยุดเท่านั้น
การพยายามใหม่ (Retries) มักจะทำให้ desktop automation แย่ลง หากงานที่สองพยายามจะแย่งเมาส์อยู่เรื่อยๆ มันจะยิ่งเพิ่มการรบกวน แทนที่จะพยายามซ้ำๆ ให้หนักขึ้น ผู้ช่วยควรจะพูดว่า: "เดสก์ท็อปไม่ว่าง ขณะนี้ฉันกำลังอยู่ในคิว และจะเริ่มทำงานเมื่อเดสก์ท็อปว่าง"
สิ่งนี้เปลี่ยนความล้มเหลวให้กลายเป็นพฤติกรรมที่คาดเดาได้
ผมยังได้เพิ่มกฎเหล็กอีกข้อคือ: เอเจนต์ไม่สามารถยกเลิกการทำงานที่กำลังรันอยู่ของตัวเองได้ สิ่งนี้ช่วยป้องกันไม่ให้เอเจนต์คลิกปุ่มปิดการทำงานของตัวเองด้วยความตื่นตระหนก (panic-clicking)
พฤติกรรม AI ที่ไม่ดีมักเกิดจากการพยายามทำตัวฉลาดเกินไป ผู้ใช้ต้องการสิ่งที่เรียบง่ายกว่านั้นมาก:
- รันงานที่ไม่ขัดแย้งกัน
- จัดคิวงานที่ขัดแย้งกันในเรื่องทรัพยากรทางกายภาพ
- ตอบคำถามเกี่ยวกับสถานะจาก status logs
- หยุดเมื่อผู้ใช้สั่งให้หยุด
หากคุณสร้างเครื่องมือ AI ที่ต้องสัมผัสกับเดสก์ท็อป ให้จำไว้ว่า: การทำงานแบบขนานนั้นทำได้ แต่ทรัพยากรทางกายภาพจำเป็นต้องมีการระบุเจ้าของที่ชัดเจน
Source: https://dev.to/codekingai/my-two-ai-tasks-kept-fighting-for-the-same-mouse-1hij