- ในงานเดียวกันบนแผงผู้ดูแลระบบ vision agent ควบคุม UI ด้วยภาพหน้าจอและการคลิก ขณะที่ API agent เรียกใช้แฮนด์เลอร์ของแอปเดียวกันผ่านการตอบกลับแบบมีโครงสร้าง ทำให้ตัวแปรที่ต่างกันมีเพียงอินเทอร์เฟซ
- ด้วยพรอมป์ต์พื้นฐาน API agent ทำงานเสร็จใน 8 ครั้งของการเรียกใช้ แต่ vision agent มองข้ามรีวิวที่รออยู่ 3 รายการซึ่งอยู่ต่ำกว่าพื้นที่ที่มองเห็น จึงอนุมัติได้เพียง 1 จาก 4 รายการ
- เมื่อเพิ่ม UI walkthrough แบบ 14 ขั้นตอน vision agent ก็ทำงานสำเร็จเช่นกัน แต่ใช้เวลารันราว 14 นาทีและกิน input token ราว 500,000 โทเค็น และคำแนะนำที่ละเอียดเช่นนี้เองก็เป็นต้นทุนวิศวกรรมอีกชั้นหนึ่ง
- จากผลรวมทั้งหมด โดยอิงตาม Sonnet เส้นทาง vision ใช้เฉลี่ย 53 ขั้นตอน, 1003 วินาที, และ input token 550,976 โทเค็น ขณะที่เส้นทาง API จบใน 8 ครั้งของการเรียก, 19.7 วินาที, และ input token 12,151 โทเค็น พร้อมความผันผวนของต้นทุนและเวลาก็น้อยกว่ามาก
- ช่องว่างด้านต้นทุนไม่ได้มาจากความสามารถของโมเดล แต่เกิดจาก โครงสร้างของอินเทอร์เฟซ และหากสามารถสร้าง HTTP endpoint อัตโนมัติจาก event handler ได้แบบ Reflex 0.9 การคำนวณความคุ้มทุนก็จะเอนเอียงไปทางเส้นทาง Structured API สำหรับเครื่องมือภายในที่พัฒนาขึ้นเอง
เป้าหมายของเบนช์มาร์กและการตั้งค่าการทดลอง
- ให้ vision agent และแนวทาง Structured API ควบคุมแผงผู้ดูแลระบบเดียวกัน เพื่อวัดต้นทุนของแนวทางแบบใช้งานเบราว์เซอร์หรือคอมพิวเตอร์
- เมื่อ AI agent ต้องควบคุมเว็บแอปที่ไม่ได้เปิด API ไว้ vision agent มักกลายเป็นตัวเลือกเริ่มต้นโดยง่าย
- ในสถานการณ์ที่แต่ละทีมมีเครื่องมือภายในมากกว่า 20 ตัว การเขียน MCP หรือ REST surface ให้แต่ละแอปกลายเป็นโครงการวิศวกรรมแยกต่างหาก ทำให้หลายทีมเลือกใช้ vision agent
- แอปที่ใช้ทดสอบคือแผงผู้ดูแลระบบสำหรับจัดการลูกค้า คำสั่งซื้อ และรีวิว โดยอิงจาก react-admin Posters Galore demo
- เอเจนต์ทั้งสองใช้แอปที่กำลังรันเดียวกัน, Claude Sonnet ตัวเดียวกัน, ชุดข้อมูลคงที่เดียวกัน, และงานเดียวกัน โดยให้ อินเทอร์เฟซเป็นตัวแปรเดียว
- งานคือค้นหาลูกค้าที่มีชื่อ “Smith” และมีจำนวนคำสั่งซื้อมากที่สุด จากนั้นหาคำสั่งซื้อล่าสุดของลูกค้าคนนั้นที่ยังรอดำเนินการ อนุมัติรีวิวที่รอทั้งหมด และทำเครื่องหมายคำสั่งซื้อว่าได้จัดส่งแล้ว
- งานนี้แตะ 3 resource และรวมทั้งการกรอง, pagination, การค้นหาข้ามเอนทิตี, รวมถึงการอ่านและเขียน จึงคล้ายกับงานทั่วไปของเครื่องมือภายใน
สองเส้นทางการรัน
-
เส้นทาง A: Vision agent
- Claude Sonnet ใช้ browser-use 0.12 ในโหมด vision เพื่อควบคุม UI ด้วยภาพหน้าจอและการคลิก
-
เส้นทาง B: API agent
- Claude Sonnet เรียก HTTP endpoint ของแอปโดยตรงในรูปแบบการใช้เครื่องมือ
- แต่ละเครื่องมือแมปกับ event handler อย่างน้อยหนึ่งตัวของ state ในแอป และใช้ฟังก์ชันเดียวกับที่ปุ่มบน UI เรียกใช้
- เอเจนต์ได้รับ การตอบกลับแบบมีโครงสร้าง แทนที่จะดูหน้าที่เรนเดอร์แล้ว
เหตุใด vision agent จึงล้มเหลวด้วยพรอมป์ต์พื้นฐาน
- ให้ทั้งสองเอเจนต์ทำงานเดียวกันจากคำสั่ง 6 ประโยคชุดเดียวกัน
- API agent ทำงานเสร็จด้วยการเรียกใช้ 8 ครั้ง
- แสดงรายการรีวิวของลูกค้าที่กรองด้วยสถานะรอ
- อนุมัติแต่ละรีวิว
- ทำเครื่องหมายคำสั่งซื้อว่าได้จัดส่งแล้ว
- แม้ทั้งสองเอเจนต์จะเรียกใช้ตรรกะของแอปเดียวกัน แต่ API agent อ่านการตอบกลับแบบมีโครงสร้างโดยตรงแทนการดูหน้าที่เรนเดอร์แล้ว
- vision agent ภายใต้พรอมป์ต์เดียวกันพบและอนุมัติรีวิวที่รอเพียง 1 จาก 4 รายการ ก่อนจะไปขั้นถัดไป
- รีวิวที่เหลืออีก 3 รายการอยู่ต่ำกว่าพื้นที่ที่มองเห็นบนหน้ารีวิว และเอเจนต์ไม่ได้รับสัญญาณว่าต้องเลื่อนหน้าจอ
- ความล้มเหลวนี้ไม่ได้มาจากปัญหาการให้เหตุผลของโมเดล แต่เกิดจากการที่หน้าที่เรนเดอร์แล้วไม่ส่งสัญญาณว่ามีข้อมูลส่วนอื่นอยู่อีก
- API agent เรียกใช้แฮนด์เลอร์เดียวกับที่ UI เรียก แต่ในการตอบกลับมีทั้งผลลัพธ์ทั้งหมดที่แฮนด์เลอร์คืนค่า ไม่ใช่แค่แถวที่กำลังเรนเดอร์อยู่
- API agent ไม่ต้องตีความตัวควบคุม pagination จากพิกเซล แต่สามารถอ่านข้อมูลอย่าง “หน้า 1 จาก 4 หน้า โดยแสดง 50 รายการต่อหน้า” ได้โดยตรง
ผลลัพธ์เมื่อเพิ่มคำแนะนำ UI 14 ขั้นตอน
- เพื่อให้เทียบกันอย่างเป็นธรรม พรอมป์ต์ของ vision ถูกเขียนใหม่เป็น UI walkthrough ที่ชัดเจน
- มีการระบุชื่อองค์ประกอบ UI ที่เอเจนต์ต้องโต้ตอบในแต่ละขั้นตอน เช่น รายการในแถบข้าง แท็บ และช่องแบบฟอร์ม
- กระบวนการนำทางที่เดิมเอเจนต์หาเองไม่เจอ ถูกเขียนเป็นคำสั่งลำดับหมายเลข 14 ข้อ
- เมื่อให้คำแนะนำนี้ vision agent ก็ทำงานสำเร็จ
- อย่างไรก็ตาม การรันใช้เวลา 14 นาที และใช้ input token ราว 500,000 โทเค็น
- คำสั่งแบบลำดับหมายเลขแต่ละข้อไม่สะท้อนอยู่ในจำนวนโทเค็น แต่หมายถึงต้นทุนวิศวกรรมจริง
- หากต้องการ deploy vision agent กับเครื่องมือภายใน ก็ต้องเขียนพรอมป์ต์ที่ละเอียดระดับนี้ หรือยอมรับความเสี่ยงที่เอเจนต์อาจพลาดงานไปแบบเงียบ ๆ
รูปแบบการรันและความผันผวน
- เส้นทาง API รัน 5 ครั้ง ส่วนเส้นทาง vision รัน 3 ครั้ง
- เส้นทาง vision ใช้เวลา 14–22 นาทีต่อครั้ง และใช้ 400,000–750,000 โทเค็น จึงจำกัดไว้ที่ 3 ครั้ง
- เส้นทาง vision มี ความแปรปรวน ระหว่างการรันสูง
- เวลาแบบ wall-clock ใน 3 ครั้งอยู่ระหว่าง 749 วินาทีถึง 1257 วินาที
- input token อยู่ระหว่าง 407,000 ถึง 751,000 โทเค็น
- รอบที่สั้นที่สุดใช้ 43 cycle และรอบที่ยาวที่สุดใช้ 68 cycle
- ลูปภาพหน้าจอ-ให้เหตุผล-คลิกมีความไม่เป็นเชิงกำหนดมากพอ จึงยากจะประเมินต้นทุนตัวแทนจากการรันเพียงครั้งเดียว
- เส้นทาง API ไม่มีความผันผวนแบบนี้
- Sonnet ใช้การเรียกเครื่องมือ 8 ครั้งเหมือนกันทุกครั้งจาก 5 ครั้งที่รัน
- จำนวน input token ต่างกันเพียงในช่วง ±27 ตลอดทั้ง 5 ครั้ง
- การตอบกลับแบบมีโครงสร้างไม่ได้เปิดช่องให้เอเจนต์หลุดเส้นทาง จึงเรียกแฮนด์เลอร์ชุดเดิมในลำดับเดิม
ผลลัพธ์รวม
| ตัวชี้วัด | Vision agent (Sonnet) | API (Sonnet) | API (Haiku) |
|---|---|---|---|
| ขั้นตอน / การเรียก | 53 ± 13 | 8 ± 0 | 8 ± 0 |
| เวลา wall-clock | 1003 วินาที ± 254 วินาที, ประมาณ 17 นาที | 19.7 วินาที ± 2.8 วินาที | 7.7 วินาที ± 0.5 วินาที |
| Input token | 550,976 ± 178,849 | 12,151 ± 27 | 9,478 ± 809 |
| Output token | 37,962 ± 10,850 | 934 ± 41 | 819 ± 52 |
- ตัวเลขทั้งหมดเป็นค่าเฉลี่ย ± sample standard deviation (n−1) โดยเส้นทาง API มี n=5 และเส้นทาง vision มี n=3
- รายละเอียดการรันทั้งหมดดูได้จากที่เก็บซอร์ส
- Haiku ไม่สามารถทำเส้นทาง vision ให้เสร็จได้
- ความล้มเหลวนี้จำกัดอยู่ที่ structured output schema ของ browser-use 0.12 โดย Haiku ไม่สามารถสร้างสิ่งนี้ได้อย่างเสถียรทั้งในโหมด vision และโหมดข้อความล้วน
- ในเส้นทาง API นั้น Haiku ทำงานเสร็จในเวลาไม่ถึง 8 วินาที ใช้ input token ไม่ถึง 10,000 โทเค็น และเป็นตัวเลือกที่ถูกที่สุดในการตั้งค่าที่ทดสอบ
ช่องว่างด้านต้นทุนเชิงโครงสร้าง
- ความต่างของต้นทุนเกิดขึ้นโดยตรงจากสถาปัตยกรรม
- เอเจนต์ที่ต้องมองเห็นก่อนจึงจะลงมือทำได้ จะต้องจ่าย ต้นทุนของการมองเห็น เสมอ ต่อให้โมเดลดีขึ้นก็ตาม
- โมเดล vision ที่ดีกว่าอาจลดอัตราความผิดพลาดต่อภาพหน้าจอได้ แต่ไม่ได้ลดจำนวนภาพหน้าจอที่ต้องใช้เพื่อไปถึงข้อมูลที่เกี่ยวข้อง
- การเรนเดอร์แต่ละครั้งคือภาพหน้าจอ และภาพหน้าจอแต่ละภาพกลายเป็น input token หลายพันโทเค็น
- เอเจนต์ทั้งสองผ่านตรรกะแอปเดียวกัน
- ทั้งคู่กรองข้อมูล, ทำ pagination, และอัปเดตในแบบเดียวกับ UI
- ความต่างอยู่ที่แต่ละขั้นตอนอ่านอะไร
- vision agent อ่านพิกเซล และต้องเรนเดอร์พร้อมตีความทุกสถานะคั่นกลาง
- API agent อ่านการตอบกลับแบบมีโครงสร้างจากแฮนด์เลอร์เดียวกัน ซึ่งมีข้อมูลที่ UI ตั้งใจจะแสดงรวมอยู่แล้ว
- โมเดลที่ดีกว่าอาจลดต้นทุนต่อขั้นตอนได้ แต่ จำนวนขั้นตอน ถูกกำหนดโดยอินเทอร์เฟซ จึงไม่ลดลง
เมื่อค่าใช้จ่ายด้านวิศวกรรม API ลดลง การตัดสินใจก็เปลี่ยนไป
- เบนช์มาร์กนี้รันได้ในต้นทุนต่ำด้วย Reflex 0.9
- Reflex 0.9 มีปลั๊กอินที่สร้าง HTTP endpoint อัตโนมัติจาก event handler ของแอป Reflex
- ข้อสรุปเชิงโครงสร้างไม่ได้ขึ้นกับ Reflex แต่ Reflex ทำให้เส้นทาง API รันได้โดยไม่ต้องมี codebase แยก
- ประเด็นสำคัญคือ เมื่อค่าใช้จ่ายด้านวิศวกรรมของ API surface ใกล้ศูนย์ จะเกิดอะไรขึ้นได้บ้าง
- vision agent ยังเหมาะกับแอปพลิเคชันที่ไม่ได้อยู่ในการควบคุมโดยตรง
- ผลิตภัณฑ์ SaaS ของบุคคลที่สาม
- ระบบ legacy
- แอปพลิเคชันที่แก้ไขไม่ได้
- แต่สำหรับเครื่องมือภายในที่สร้างเอง การคำนวณความคุ้มทุนจะเอนกลับอีกด้าน
ขอบเขตการทดลองและข้อควรระวัง
- ผลลัพธ์ของ vision จำกัดอยู่ที่โหมด vision ของ browser-use 0.12 และ vision agent ตัวอื่นอาจทำงานต่างออกไป
- ตัวรันของเส้นทาง B นำ endpoint ที่สร้างอัตโนมัติมาแปลงเป็น REST tool surface ขนาดเล็กราว 30 บรรทัด
- เอเจนต์มองสิ่งนี้เป็นเครื่องมืออย่าง
list_customers,update_order - ชุดข้อมูลเป็นแบบคงที่และมีขนาดเล็ก
- ลูกค้า 900 คน
- คำสั่งซื้อ 600 รายการ
- รีวิว 324 รายการ
- ยังไม่ได้วัดพฤติกรรมบนข้อมูลขนาด production
- vision agent รันผ่าน
ChatAnthropicของ LangChain - API agent รันโดยใช้ Anthropic SDK โดยตรง
- จำนวนโทเค็นที่รายงานคือ input token ที่ไม่ได้ cache
เอกสารสำหรับการทำซ้ำ
- ในที่เก็บซอร์สมีทั้งการสร้าง seed data, react-admin demo ที่ถูกแพตช์, สคริปต์ของเอเจนต์ทั้งสองแบบ และผลลัพธ์ดิบ
1 ความคิดเห็น
ความเห็นบน Hacker News
นี่คือวิธี ทำให้การท่องเว็บของเอเจนต์มีค่าใช้จ่ายสูง: ย้ายองค์ประกอบบนหน้าจอทุกครั้งที่เมาส์ขยับ, ทำให้ UI ทำงานได้ก็ต่อเมื่อบังคับให้เมาส์เคลื่อนที่อย่างเป็นธรรมชาติ, สุ่มเปลี่ยนชื่อป้ายปุ่มใน JS ทุกครั้งที่มีการเข้าชม, และบังคับให้เลื่อนลงไปจนสุดหน้าจอเพื่อดูงานเพิ่มเติมที่ซ่อนอยู่
เดี๋ยวก่อน นี่มันเหมือน แอป SaaS สำหรับองค์กร ทั่วไปเลยนี่นา
ตอนที่เป็นเรื่องของมนุษย์กลับไม่ยอมทำ แต่พอ AI ต้องการ ทุกคนกลับรีบทำกันใหญ่ น่าสนใจและก็หดหู่นิดหน่อย สุดท้ายก็ดูเหมือนจะทำเพื่อ AI เพราะรู้สึกว่ามันให้ประโยชน์กับตัวเองมากกว่ากับใครสักคนในอนาคตแบบนามธรรม
[0] https://www.cs.unm.edu/~dlchao/papers/p152-chao.pdf
ตอนนั้นยังไม่ใช่ยุคของ generative AI แต่เราก็ต้องผสม OCR, การจำลองอินพุตผู้ใช้, และการจับภาพจากการพิมพ์เข้าด้วยกันเพื่อใช้งานแอปและส่งออกข้อมูล ถ้านักพัฒนารู้เรื่อง Windows DRM API ที่กันการแคปหน้าจอ หรือรู้ว่าข้อความในไฟล์ PostScript สามารถกู้คืนได้ง่ายพร้อมรูปแบบพื้นฐานขั้นต่ำ พวกเขาอาจทำอะไรที่แย่กว่านี้ก็ได้
ที่น่าขันคือ กระบวนการเดิมก่อนถูกแทนที่คือให้แรงงานราคาถูกจากต่างประเทศเข้าถึงข้อมูลทั้งหมดในระบบแบบรีโมตโดยอ่านได้อย่างเดียว ซึ่งจริง ๆ แล้วเป็นความเสี่ยงด้านความปลอดภัยที่ร้ายแรงกว่าการให้อุปกรณ์ในเครื่องจากผู้ขายที่เชื่อถือได้แก่พนักงานที่ได้รับอนุมัติเพื่อทำงานอัตโนมัติโดยไม่ต้องเข้าถึงเครือข่ายเสียอีก
ผมกำลังสร้างสิ่งที่แก้ปัญหานี้โดยตรงอยู่[1]
ในหน้า landing page ยังไม่ได้พูดถึงเรื่องนี้ แต่แก่นของมันคือการให้อุปกรณ์ชุดเล็กกับเอเจนต์เพื่อสำรวจพื้นผิวของแอป และโดยเฉพาะ functional API ของ macOS ที่เกี่ยวกับ accessibility
หลังจากเอเจนต์สำรวจแอปแล้ว มันสามารถเขียน workflow ที่ทำซ้ำได้ และหลังจากนั้นก็รันจาก CLI ได้แบบ
invoke chrome pinTabเหตุผลที่ใช้ accessibility ก็เพราะสุดท้ายมันคือ DOM ที่ดีสำหรับแอป แม้ไม่ใช่ทุกแอปจะทำได้สมบูรณ์ แต่มีจำนวนมากพอที่จะมีประโยชน์มาก
[1] https://getinvoke.com - ตอนนี้ landing page ยังทำสำหรับครีเอเตอร์อยู่ จึงยังไม่ครอบคลุม use case นี้
คุณจะเห็นได้ว่าเซลล์สีเขียวสามารถชี้นำ LLM ให้แค่อ่านบางส่วนของหน้าจอหรือใช้ OCR ได้อย่างไร, มีข้อความมากแค่ไหนที่ accessibility engine มีให้อยู่แล้ว, และมันต่อยอดได้ทั้งกับ MCP และตัวสร้างโค้ดที่สร้างแล้วรันสคริปต์ของตัวเองเพื่อ crawl accessibility layer ของ workflow
ผมมองว่านี่เป็นพื้นที่ที่อุดมสมบูรณ์มาก ห้องแล็บใหญ่ ๆ ต้องใช้แนวทางที่ทำงานข้ามหลายแพลตฟอร์มและ workflow แบบสุ่มได้ ดังนั้นวิสัยทัศน์ทั้งหน้าจอจึงเป็นตัวหารร่วมต่ำสุด วิธีเฉพาะแพลตฟอร์มยังเป็นพื้นที่เปิดที่น่าสนใจมาก
แต่ก็คงต้องรับประกันให้ได้ว่า workflow ที่ดึงข้อมูลผู้ใช้ เช่น รหัสผ่าน จะไม่ถูกแชร์ออกไป
ปัญหาใหญ่คือมีแอปมากเกินไปที่เปิดเผยองค์ประกอบเหล่านี้ได้แย่มาก แนวทางของผมคือใช้ UIAccess หรือวิชันโมเดลแบบ one-pass เพื่อสร้าง UI template: https://github.com/willwade/app-automate?tab=readme-ov-file#...
ข้อโต้แย้ง reddit ต่อเรื่องนี้คือประสบการณ์จริงกลับแทบตรงข้าม UIA ดูเหมือนสม่ำเสมอบนเอกสาร แต่ WPF, WinForms, และ Win32 ต่างก็เปิดเผย control pattern คนละแบบ สุดท้ายจึงต้องใช้ handler แยกตาม toolkit ส่วน Qt ต้องมีการคอมไพล์ QAccessible และโหลด accessibility plugin ตอนรันไทม์ก่อนถึงจะเปิดเผยอะไรได้ ซึ่งแทบไม่เคยเกิดกับไบนารีที่แจกจริง Electron เองก็ทึบพอ ๆ กับบน macOS แม้อยู่บน Windows เพราะสุดท้ายก็เป็น Chromium ตัวเดียวกันที่วาดลงบน canvas เส้นแบ่งที่แท้จริงจึงไม่ใช่ระบบปฏิบัติการต่อระบบปฏิบัติการ แต่เป็น native toolkit กับทุกอย่างที่เหลือ
การบอกว่าการเขียนพื้นผิว MCP หรือ REST ให้แต่ละแอปเป็นโปรเจ็กต์วิศวกรรมแยกต่างหากนั้น ไม่จำเป็นต้องจริงเสมอไป ถ้า แบ็กเอนด์ถูกแยกจากฟรอนต์เอนด์ดีพอ และงานฝั่งเซิร์ฟเวอร์ถูกออกแบบอย่างรอบคอบและเป็นภาพรวมมาตั้งแต่แรก
ผมสงสัยว่าจะให้วิชันเอเจนต์ช่วย “ทำแผนที่” UI แล้วเปิดเผยให้เอเจนต์อีกตัวหนึ่งเป็นชุดอินเทอร์เฟซที่ดูคล้าย API มากขึ้นได้ไหม
ตอนนี้ผมเข้าใจว่าวิชันเอเจนต์ต้องรู้ทั้งว่า “หน้าถัดไป” แปลว่ามีผลลัพธ์เพิ่ม และยังต้องรู้ด้วยว่าควรดึงผลลัพธ์เพิ่มตั้งแต่แรก
ถ้าเอเจนต์ตัวหนึ่งได้สำรวจเฉพาะ UI ในสภาพแวดล้อมทดสอบเพื่อสร้างคำอธิบายที่มีโครงสร้างระดับหนึ่งเกี่ยวกับองค์ประกอบและการทำงานของ UI แล้วให้อีกเอเจนต์รับคำอธิบายนั้นไป มันจะทำได้ดีกว่าเอเจนต์ที่ต้องทั้งสำรวจ UI และทำภารกิจไปพร้อมกันไหม
เช่น อาจนิยามว่า “ดึงรีวิวทั้งหมด” หมายถึงไปแต่ละหน้าแล้วคลิก “ดูรีวิวเต็ม” สำหรับแต่ละสรุปรีวิว หรือ “ไปแต่ละหน้า” หมายถึงเริ่มจากหน้า 1 ซึ่งเป็นค่าเริ่มต้นของแท็บรีวิว แล้วกด “ถัดไป” ไปเรื่อย ๆ จนปุ่มหายไป
แบบนั้นเอเจนต์ตัวที่สองก็ไม่ต้องเสียแรงคิดวิธีสำรวจ เพราะมีเทคนิคอยู่แล้ว ส่วนเอเจนต์ตัวแรกก็สำรวจ UI แค่ครั้งเดียวในสภาพแวดล้อมทดสอบโดยไม่ต้องกังวลเรื่องทำพลาด ผมอาจเข้าใจบทความผิดไปหมดก็ได้ แต่ก็ยังน่าสนใจอยู่ดี
สุดท้ายจึงต้องฝ่าความซับซ้อนของ HTML/CSS/JavaScript ไม่ว่าจะดีหรือร้าย เว็บแอปขนาด 5~10MiB ก็ไม่ใช่เรื่องแปลกแล้ว
แทนที่จะเข้าหาแบบ “จากล่างขึ้นบน” ราวกับทำงานย้อนกลับสิ่งที่ browser engine ทำ การมองการแสดงผลด้วยสายตาแบบมนุษย์แล้วเข้าหา “จากบนลงล่าง” ดูจะง่ายกว่า
สำหรับการสำรวจยังคงต้องมีงานด้านวิชันอยู่บ้าง แต่จะเป็นงานวิชันง่าย ๆ ที่ไม่ต้องคิดมาก
ส่วน image→image ใช้ภาพทั้งภาพ
ผมไม่ค่อยเข้าใจสมมติฐาน ถ้าเป็นแอปภายในองค์กร ทำไมต้องหยิบคอมพิวเตอร์ยูสขึ้นมา แทนที่จะให้เอเจนต์สร้าง CLI หรือ MCP ล่ะ
แน่นอนว่า computer use แย่กว่า มันควรเป็นทางเลือกสุดท้าย เวลาเราจัดการสถานะใน DB ที่เราเป็นเจ้าของเอง ไม่ควรใช้มัน
ที่น่าประทับใจกลับเป็นการที่มันแย่กว่า แค่ 50 เท่า เท่านั้น
เห็นด้วยเต็มที่ ช่วงหลังผมทำเครื่องมือภาพ AI และลองทั้งสองแนวทางมาแล้ว ความ หน่วงและต้นทุน ของการใช้เบราว์เซอร์แบบ “เอเจนต์ทั่วไป” นั้นร้ายแรงถึงขั้นใช้กับแอปผู้บริโภคแบบเรียลไทม์ไม่ได้ในตอนนี้
structured API หรือแม้แต่แค่สายโซ่เรียก LLM ที่ใช้ JSON schema แบบเข้มงวด ไม่เพียงถูกกว่า 40 เท่า แต่ยังชี้ขาดพอให้สร้างผลิตภัณฑ์ที่เสถียรได้จริง computer use เป็นเดโมที่เท่ แต่ structured API ต่างหากที่ช่วยจ่ายค่าเซิร์ฟเวอร์
ถ้าคุณคิดว่า LLM เหมาะกับงานใด ก็สร้าง middleware ที่นิยามชัดเจนและมีความกำหนดแน่นอนสูงบน Openrouter ให้ตรงกับเป้าหมายนั้นไปเลย
structured API ต้องใช้การคิดจริง ๆ แต่ทุกวันนี้ การคิด ไม่ค่อยถูกมองว่าเป็นเรื่องดีนัก
เมื่อไม่กี่เดือนก่อน ผมสร้าง desktopctl CLI สำหรับควบคุมแอป GUI โดยได้แรงบันดาลใจจาก
kubectlบน Mac มันผสาน OCR กับ Accessibility API เพื่อแสดง UI เป็น Markdown และเปิดเผยการกระทำของเมาส์กับคีย์บอร์ด
แนวคิดหลักคือให้ลูปรับรู้แบบ “เร็ว” ทำงานในเครื่องทั้งหมด โดยปรับแต่งการแปลง UI เป็นโทเค็นและตรวจจับการเปลี่ยนแปลงด้วย GPU ส่วนลูปควบคุมแบบ “ช้า” ต้องมีการวนกลับไปหา LLM และใช้ Markdown interface ที่ประหยัดโทเค็นสำหรับผลลัพธ์ CLI
ตัวควบคุมใช้ตัวระบุที่ค่อนข้างเสถียร เอเจนต์จึงสามารถเขียนสคริปต์การกระทำทั่วไปอย่าง
desktopctl pointer click --id btn_saveได้โดยไม่ต้องพึ่งลูปแปลง UI เป็นโทเค็นhttps://github.com/yaroshevych/desktopctl/tree/main
แอปที่ดีเปิดเผยข้อมูลได้ดี และถูกปรับให้เหมาะกับการคลิก การพิมพ์ ฯลฯ
GUI ที่ดีที่สุดใช้ ความจำของกล้ามเนื้อ ได้ดีมาก จึงเป็นผู้สมัครชั้นเยี่ยมสำหรับการทำสคริปต์ผ่าน CLI เช่นลำดับง่าย ๆ อย่าง “เปิดแอป Notes, กด Cmd+F, ใส่คำค้น, อ่านรายการผลลัพธ์” สามารถกลายเป็นคำสั่ง Bash เดียวที่ AI agent เรียกใช้ได้
โดยรวมแล้วผมสงสัยกับแนวคิด “computer use” มาตลอด มันเหมือนกับการจ้างใครสักคนเข้ามาในบ้าน ปล่อยให้นอนบนเตียง ใช้ห้องน้ำ กินของในตู้เย็น ดูทีวี แล้วบอกด้วยว่ารหัสตู้เซฟอยู่ตรงนี้
เพียงแต่ว่าคนที่คุณจ้างมาคือ ลิง
เว็บไซต์ที่กำลังพยายามกัน Claude Code หรือ AI agent ตัวอื่น ๆ ตอนนี้ กำลังสู้ในเกมที่แพ้ตั้งแต่ต้น
computer use ยังอยู่ช่วงแรก และสิ่งที่ขวางการใช้งานในวงกว้างดูจะเป็นจำนวนโทเค็นที่ต้องใช้ ถ้าเอเจนต์ลองผิดลองถูกกับคำสั่ง CLI 10 คำสั่งก่อนเจอคำสั่งที่ถูก เราแทบไม่สนใจเลย
แต่กับ visual agent อย่างการใช้เบราว์เซอร์หรือ computer use ต่อให้สุดท้ายไปถึงจุดที่ถูก เราก็ไม่มีความอดทนพอจะรอ 20 นาทีเพื่อให้มันคลิกปุ่มเดียว เมื่อโทเค็นถูกลงและเร็วขึ้น ก็มีโอกาสสูงที่จะมีโมเดลที่ใช้ UI ได้เป็นธรรมชาติพอ ๆ กับ CLI