งาน 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