อ่านบทความนี้ใน Facebookโพสนี้อยากมาชวนคุยเกี่ยวกับ long-running coding agents ที่เป็น topic ที่เราเริ่มเห็นผ่านตามากขึ้นเรื่อย ๆ
อย่างเดือนที่แล้ว Cursor เองก็มี experiment ที่ปล่อยให้ AI agents หลาย ๆ ตัว run task เองประมาณ 1 สัปดาห์ ให้สร้าง web browser (ซึ่งเป็นหนึ่งใน software ที่มีความซับซ้อนมาก ๆ) จาก 0
ผลลัพธ์ก็คือว่า AI gen โค้ดมาประมาณ 3 ล้านบรรทัดกับ 3 หมื่น commits แถมผลลัพธ์ที่ได้ก็เรียกว่า render เว็บออกมาได้ดีระดับนึง ถึงแม้จะมี render ผิดบ้างอะไรบ้างก็ตาม
แน่นอนหล่ะว่ามันก็มีหลาย topic ที่หยิบมา discuss กันได้เช่นแบบ
-
web browser เองก็ไม่ใช่อะไรที่ใหม่ขนาดนั้น แล้วมีโค้ดมากน้อยแค่ไหนที่ inspire มากจากโปรเจคที่มีอยู่แล้วบน github?
-
หรือโค้ดสามล้านบรรทัดที่ออกมามีผลลัพธ์หรือ performance เมื่อเทียบกับโปรเจคที่มีอยู่แล้วอย่าง Chrome มากต่างกันแค่ไหน?
แต่ในโพสนี้เราอยากมาชวนคุยในมุมของความเป็นไปได้ใหม่ ๆ และการ shift ของ software development มากกว่า
ถ้าเราย้อนกลับไป 2-3 ปีที่แล้วจนถึงตอนนี้ เรารู้สึกว่า เราทำหน้าที่ verify ผลลัพธ์ใน level ที่สูงมากขึ้นเรื่อย ๆ
-
ตอนที่ github copilot, cursor ออกมาใหม่ ๆ ตอนนั้นมันช่วยเราในระดับ line of codes ; เราทำหน้าที่เป็นคน verify ว่าโค้ดแต่ละบรรทัดตรงกับ implement ที่เราคิดไว้ไหม จากนั้นก็ tab tab tab
-
ต่อมาเริ่มมี tools อย่าง claude code, cursor agents ที่ช่วยเราในระดับ implement feature ; เราทำหน้าที่เป็นคน verify ว่าโค้ดที่ออกมามันตรงกับ high-level design ที่เราวางไว้ไหม แล้วมันเทสได้ผ่านตามเคสที่เราวางไว้ไหม จากนั้นก็ merge PR
-
ตอนนี้มาถึง long-running agents ที่ (promise ว่า) จะช่วยเราในระดับ product milestone ได้ ; agents แบ่งงานกันเอง เทสเอง ; จากนั้นเราก็ verify ระดับ end to end ว่าผ่านครบทุก criteria ที่วางไว้ไหม
ยังไงก็ตามเราไม่ได้จะบอกว่างานของเรามันหายไปเรื่อย ๆ ไม่ต้องทำอะไรมากขึ้นเรื่อย ๆ แต่ส่วนตัวเรามองกลับกันว่า “ความยากมันมีอยู่เหมือนเดิม แค่ challenge มันมีหน้าตาเปลี่ยนไป”
แบบที่ (1) challenge คือนอกจากต้องคิด high-level design แล้วเรายังต้องมานั่งออกแบบ low-level design ด้วย นอกจากจะต้องออกแบบ algorithm, data structures ก็ต้องคิดด้วยว่าจะเขียนโค้ดออกมายังไงให้สวย อ่านง่าย
แบบที่ (2) challenge คือเราจะออกแบบ high-level design, architecture ยังไงให้
-
เวลาให้ AI มัน gen code สร้าง feature B ไม่ไประเบิด feature A หรือ complexity ไประเบิดตอนโปรเจคใหญ่ขึ้นเรื่อย ๆ
-
ทำยังไงให้ code ที่ gen มายังล้อไปกับ design, standard/style ได้ โดยที่ไม่ทำให้โค้ดโดยรวมมันแย่หรือออกนอกทิศที่วางไว้ไปเรื่อย ๆ
-
หรือทำยังไงให้ความเข้าใจของเรามันค่อย ๆ โตไปกับโปรเจค แบบเวลาเจอบัคแปลก ๆ แล้วเรายังรู้ว่าเราจะ debug หรือแก้ยังไง
(1) กับ (2) ว่ายากแล้ว เราคิดว่าแบบที่ (3) อย่าง long-running agents ก็คงมี challenge ที่ยากไม่แพ้กัน
-
เราจะ coordinate ยังไงให้ multi-agents ทำงานร่วมกันได้แล้วไม่ block งานหรือกระทบกัน (แถมแต่ละตัวก็มี context length ที่จำกัดอีก จะทำระบบ memory ยังไง etc.)
-
เราจะออกแบบ environment ยังไงแต่ละตัวให้มี feedback loop ที่เพื่อจะ take action ต่อได้ (แบบตัวที่ optimize algorithm อาจจะต้องทำคล้าย ๆ RL แบบมี reward score อะไรอย่างงั้นไหม หรืออีกตัวจะต้องต่อ browser ต่อ tools อะไรให้มี feedback พร้อมที่จะพัฒนาต่อได้)
-
เราจะออกแบบ human in the loop system ยังไงว่าถ้ามีตรงไหนไม่แน่ใจ ให้หยุดทำแล้วมาถามเราก่อนนะ ไม่ใช่ว่าคิดเองแล้วทำไปเรื่อย ๆ (อย่าลืมว่ายิ่งปล่อย auto ถ้าผิดก็ยิ่งยาวเลย)
-
เราจะออกแบบระบบยังไงที่ช่วยให้เรา observe หรือ notify ได้เวลาอาจจะมีปัญหา, เราจะเข้าใจโค้ดได้ยังไง, etc.
(รู้สึกว่ายิ่งคิดก็ยิ่งรู้สึกว่าเป็นวิธีที่ไม่คุ้นเลย 55)
ยังไงก็ตามโพสนี้ไม่ได้มาบอกว่าอนาคตควรจะเป็นยังไง 1, 2, 3 แค่อยากมาชวนคุยให้เห็นความเป็นไปได้ที่ อาจจะ เกิดขึ้นได้เฉย ๆ
บางทีอนาคตเราอาจจะเป็น (1), (2), (3) ผสม ๆ กัน หรือบางโปรเจคอาจจะเหมาะกับ (3) บางโปรเจคอาจจะเหมาะกับ (2) หรือ (1) ก็ได้
ถ้าใครอ่านมาถึงแล้วอยากมาชวนคุยครับว่าคิดเห็นยังไง~ บางทีได้คิดอะไรเวอร์ ๆ future ๆ หน่อยก็สนุกดี
