Agents ต้องการ control flow ไม่ใช่ prompt ที่มากขึ้น
(bsuh.bearblog.dev)- เอเจนต์ที่ต้องจัดการงานซับซ้อนอย่างเสถียร ไม่ได้ต้องการ prompt chain ที่ประณีตขึ้น แต่ต้องการ deterministic control flow ที่เข้ารหัสไว้ในซอฟต์แวร์
- หากยังพึ่งพาคำอย่าง MANDATORY หรือ DO NOT SKIP ในพรอมป์ต์ แปลว่าคุณมาถึงขีดจำกัดของการทำ prompting แล้ว
- ลองจินตนาการถึงภาษาการเขียนโปรแกรมที่ประโยคทำงานเหมือนข้อเสนอแนะ และฟังก์ชันเกิดอาการหลอนแล้วคืนค่า “Success” ยิ่งความซับซ้อนเพิ่มขึ้น ก็ยิ่งไม่สามารถให้เหตุผลกับระบบได้ และความน่าเชื่อถือก็พังทลาย
- ซอฟต์แวร์ขยายตัวได้ผ่านการประกอบซ้ำแบบเรียกซ้อนของไลบรารี โมดูล และฟังก์ชัน และเพราะมันให้พฤติกรรมที่คาดการณ์ได้ จึงสามารถให้เหตุผลในระดับเฉพาะจุดได้
- prompt chain มีประโยชน์กับงานที่แคบ แต่ไม่มีคุณสมบัติแบบเดียวกัน เพราะไม่เป็นเชิงกำหนด สเปกอ่อน และตรวจสอบได้ยาก
โครงสร้างที่จำเป็นต่อความน่าเชื่อถือของเอเจนต์
- หากต้องการให้เชื่อถือได้ ต้องย้ายตรรกะออกจากคำอธิบายภาษาธรรมชาติไปไว้ที่ runtime
- โครงสร้างที่ต้องการคือ deterministic scaffold ที่ปฏิบัติต่อ LLM ในฐานะองค์ประกอบหนึ่ง ไม่ใช่ทั้งระบบ
- scaffold นี้ต้องมี state transition ที่ชัดเจนและ checkpoint สำหรับการตรวจสอบความถูกต้อง
- deterministic orchestration เพียงอย่างเดียวยังไม่พอ และระบบที่อาจล้มเหลวแบบเงียบ ๆ จำเป็นต้องมีการตรวจจับข้อผิดพลาดอย่างเข้มข้น
- หากไม่มีการตรวจสอบความถูกต้องด้วยโปรแกรม ทางเลือกจะเหลือเพียงสามแบบ
-
ผู้เฝ้าดู (Babysitter)
- มนุษย์ต้องอยู่ในลูปเพื่อจับข้อผิดพลาดก่อนที่มันจะลุกลาม
-
ผู้ตรวจสอบ (Auditor)
- ต้องตรวจสอบผลลัพธ์ทั้งหมดอย่างละเอียดหลังการทำงานเสร็จสิ้น
-
การภาวนา (Prayer)
- ต้องพึ่งการยอมรับผลลัพธ์จากความรู้สึกหรือบรรยากาศโดยรวม
-
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เห็นด้วย 1000% ยิ่งฟัง Anthropic ตีกลองเรื่อง “จงสร้างโดยอิงจากความสามารถของโมเดลในอนาคต เดี๋ยวมันก็ดีขึ้นเอง” บ่อยเท่าไร ก็ยิ่งเชื่อยากขึ้นเรื่อย ๆ
ผมเคยสร้างเอเจนต์ QA ที่ไล่อ่านไฟล์ Markdown ข้อกำหนด 200 ไฟล์ใน browser session และมันเป็นระบบที่ดีมากซึ่งช่วยเพิ่มประสิทธิภาพทีมได้มาก แต่พอปล่อยให้โมเดลรับผิดชอบ control flow ระดับสูง อย่าง “ดูไฟล์ requirement ในไดเรกทอรีนี้ แล้วสำหรับแต่ละไฟล์ให้สร้างรายการงานเพื่อตรวจว่าแอปทำตาม requirement นั้นหรือไม่” มันก็พังตั้งแต่ราว ๆ 30 ไฟล์
มันข้ามบางไฟล์ไป หรือไม่ก็ไปทดสอบไฟล์บางชุดซ้ำสามรอบ ทำให้งานที่ควรใช้ 3 นาทีลากเป็น 10 นาที หรือบางครั้งเพราะ error ในไฟล์เดียว มันก็ย้อนกลับไปทดสอบ 4 ไฟล์ก่อนหน้าใหม่ทั้งที่ไม่มีเหตุผล ความสามารถด้าน workflow orchestration ของ Opus 4.6 และ GPT 5.4 รวมถึงที่ลองผ่าน ๆ กับ Opus 4.7 และ GPT 5.5 ก็ไม่สม่ำเสมอ
สุดท้ายผมเลยสร้าง deterministic harness ที่เรียบง่ายมากมาครอบโมเดล แล้วเรียกโมเดลสำหรับแต่ละ test case เก็บผลลง array แล้วเขียนออกไฟล์ ความน่าเชื่อถือของระบบดีขึ้นแบบถล่มทลาย แต่แพลตฟอร์มเอเจนต์แบบ managed อย่าง Cursor Cloud Agents หรือ Anthropic ดูจะหมกมุ่นกับแนวคิดว่า “เอเจนต์ต้องเป็นคนรันทุกอย่าง” มากเกินไป จนมองไม่เห็นคุณค่าของการใส่ความ deterministic เข้าไปนิดหน่อยในจุดที่เหมาะสม
เพราะมันทำให้คำกล่าวอ้างว่าเทคโนโลยีนี้จะมาแทนทั้งคน ทั้ง workflow หรือทั้งโปรเจ็กต์ดูแผ่วลง ผมคิดว่ามันยังเพิ่ม productivity ได้มากจนส่งผลเสียอย่างหนักต่อตลาดจ้างนักพัฒนาและค่าจ้างได้ แต่เวอร์ชันปัจจุบันของเทคโนโลยีนี้ไม่น่าจะไปถึงระดับที่พวกเขาพูดกัน ถ้าวางตำแหน่งมันว่าเป็น “เครื่องมือที่มีประโยชน์มากซึ่งช่วยลดงานจุกจิกจำนวนมากของทีมพัฒนาที่เป็นมนุษย์” นักพัฒนาคงอยากได้ แต่ผู้บริหารคงอยากได้น้อยลง และนักลงทุนก็คงไม่ยอมปล่อยผ่าน
อีกอย่าง ขั้นตอนที่ถูกควบคุมละเอียดและเข้มงวดนั้นเหมาะกับการเอาโมเดลที่เล็กกว่า ถูกกว่า และเชี่ยวชาญเฉพาะทางมาเสียบมากกว่าจะใช้โมเดลยักษ์ที่เอาไปทั้งทำ test automation หรือเขียนแฟนฟิก CSI 5 เล่มรวดเดียวได้
benchmark บางอันไม่ใช่ว่าเปิดให้ลองหลายครั้งกับปัญหาเดียว แล้วไม่สนใจอัตราล้มเหลว ขอแค่มีผลสำเร็จออกมาสักครั้งก็หยิบผลนั้นมาใช่หรือ?
apply_patchไปรวมกับcheck_compilationและrun_unit_testsแล้วประสิทธิภาพดีขึ้นมาก เครื่องมือยังชื่อapply_patchเหมือนเดิม แต่ตอนนี้ถ้า patch สำเร็จ มันจะคืนข้อมูลเพิ่มเรื่อง build และ test มาด้วยอัตราความสำเร็จของเอเจนต์จากราว 80% ขึ้นไปถึงระดับที่จนถึงตอนนี้ดูแทบจะ deterministic แล้ว ทุกวันนี้ไม่จำเป็นต้องอธิบายขั้นตอน compile กับ unit test ใน prompt ด้วยซ้ำ แค่รันตาม dependency ที่กำหนดแล้วส่งผลลัพธ์กลับมาก็พอ
ช่วงนี้ยังรู้สึกเหมือนตัวเองสวนกระแสด้วย ผมใช้ token แบบจ่ายล่วงหน้าและ custom harness มานานแล้ว และมันก็ใช้ได้ดีจริง ๆ ข่าวส่วนใหญ่เลยมองข้ามได้เลย ในปัญหาที่เล็งไว้ชัดเจน เครื่องมือแนว Copilot ใช้ประโยชน์ไม่ได้อีกต่อไป และในบาง codebase ต่อให้ใช้โมเดลฐาน GPT 5.4 เหมือนกัน ระดับผลงานก็ต่างกันคนละมิติ
ทุกคนพลาดแพตเทิร์นนี้ใน skill ถ้ามีโค้ดวางคู่กับ
SKILL.mdก็รับประกันพฤติกรรมบางอย่างได้ แต่ทุกคนกลับติดการเขียน prompt กันอย่างประหลาด ไม่ต้องถึงกับสร้าง CLI หรอก แค่มีskill.pyง่าย ๆ ที่มีงานอยู่ข้างในก็พอ จะมี helper สำหรับเรียกclaude -pไว้ด้วยก็ได้อีกไม่กี่ปีข้างหน้า ถ้าผู้คนยังใช้ LLM กันอยู่ แต่สุดท้ายต้องใช้มันผ่าน คำศัพท์และไวยากรณ์ที่ควบคุมได้ ซึ่งทุกคนต้องเรียนรู้ ก็คงน่าขำดี เหมือนเมื่อ 15 ปีก่อนที่ทุกคนย้ายไป NoSQL แล้วอีกไม่นานก็กลับไปสร้าง schema ไว้ใน JSON กันใหม่
ผมว่าส่วนหนึ่งของปัญหาอาจเป็นเพราะตั้งแต่แรกเรานำ LLM ไปใช้ผิดงานหรือเปล่า อย่างที่มีคนพูดไว้ที่อื่น prompt ของเอเจนต์อาจควรเป็นให้มัน เขียนโค้ด ที่ทำงานให้ได้แบบทำซ้ำได้ ตรวจสอบได้ และ deterministic มากที่สุดเท่าที่จะทำได้
และควรมีการตรวจสอบผลลัพธ์ของเอเจนต์ด้วย เป้าหมายรวมคือดึง LLM ออกจากงานที่โปรแกรมจัดการได้มีประสิทธิภาพกว่า และบ่อยครั้งก็แม่นยำกว่าด้วย
การเอา AI ไปผูกเข้ากับ production แล้วให้มันทำอะไรผ่าน API call โดยตรงเป็นความคิดที่ไม่ดี ผมมองว่าหน้าที่เดียวที่ AI ควรทำในแอปคืออ่าน จัดหมวดหมู่ อะไรทำนองนั้น เทียบได้กับการมาแทน “R” ใน CRUD app แบบสมัยก่อน
ถ้าจะใช้ endpoint “R” ที่ขับด้วย AI แบบเดียวกันมาเติมฟอร์ม “C”, “U”, “D” ให้อัตโนมัติตาม prompt ก็โอเค แต่ห้ามไปเปลี่ยนอะไรให้ลูกค้าก่อนที่คนจะตรวจทาน CRUD app ก็ยังเป็น CRUD app อยู่ดีและจะเป็นแบบนั้นต่อไป เพียงแต่ตอนนี้มี endpoint “R” ที่ฉลาดมาก ซึ่งช่วย autocomplete ฟอร์มหรือเสนอการกระทำให้ลูกค้า เครื่องมือภายใน หรือ Jenkins pipeline ได้ มันเสนอการกระทำได้ แต่ไม่ควรลงมือทำเอง
llm -> prompt -> result, ไปเป็นllm -> prompt + prompt encoded as skill -> result, แล้วไปเป็นllm -> prompt + deterministic code encoded as skill -> resultช่วงแรกการให้มัน generate โค้ดผ่าน prompt อาจช่วยลัดไปสู่ deterministic code ได้ แต่สุดท้ายก็ยังเป็นการเอา deterministic code ไปห่อไว้ใน wrapper ที่ไม่ deterministic อยู่ดี ถ้าจะทำงานระยะยาวให้สำเร็จ หลายกรณียังต้องมีชั้น determinism ที่ตอนนี้ขาดอยู่
ต้องวาง deterministic code ไว้นอกขอบเขตที่ไม่ deterministic ผ่าน agent loop หรือ framework แบบนั้นภาพจะกลายเป็น
agent flow แบบ deterministic -> การตัดสินใจแบบไม่ deterministic -> เครื่องมือแบบ deterministicคือให้การตัดสินใจที่ไม่ deterministic ถูกคั่นอยู่ระหว่างชั้น deterministic จากการทดลอง มันเป็นแพตเทิร์นที่ทรงพลังมาก และถ้าเอเจนต์สร้าง determinism ให้ตัวเองได้ผ่านเครื่องมืออย่าง auto-researcher มันยิ่งแรงขึ้นไปอีกตอนนี้เราใช้ ภาษาเฉพาะโดเมน ขนาดเล็กกับเครื่องมือเดียว โดยให้เอเจนต์ป้อนสคริปต์ที่เขียนด้วยภาษานั้นเข้ามา มันรองรับ use case ที่ dynamic กว่าได้ และถ้า syntax ผิด parser ก็จับได้ง่ายแล้วส่งกลับไปให้เอเจนต์
ทีมควบคุมฮาร์ดแวร์ส่งสเปกมาเป็นเอกสารกับสเปรดชีต ส่วนทีมมือถือก็ดูจากนั้นแล้วเขียน interface library พร้อมตรวจสอบให้ตรงกับเซิร์ฟเวอร์ ผมแปลงเอกสารเป็น TSV แล้วส่งบางส่วนให้ Claude เพื่อให้มันช่วยเขียน TSV parser ที่ยังรักษาความละเอียดอ่อนของสเปกที่มนุษย์เขียนไว้
ผมต้องวนซ้ำเกิน 150 รอบกว่าจะจัดการเคสก้ำกึ่งทั้งหมดและสร้างผลลัพธ์ขั้นกลางเป็น JSON ได้ หลังจากนั้น Claude ก็ช่วยเขียน code generator ที่วาง custom glue code บน Apollo เพื่อสร้างโค้ดที่แอปมือถือจะนำไปใช้
pipeline ทั้งชุดนี้รันเป็นส่วนหนึ่งของ Github Actions และจะเรียก Claude เฉพาะตอนที่ตัวตรวจสอบ library ล้มเหลวเท่านั้น ตอนล้มเหลวจะมีไฟล์ md ที่ใส่ไว้ในคำขอเพื่อให้มันหาว่าอะไรผิด เสนอวิธีแก้ และสร้าง PR หลังจากนั้นมนุษย์จะมาตรวจ แก้ และ merge รวมค่าเครดิตทั้งหมดที่ใช้ไปยังไม่ถึง 350 ดอลลาร์
ผมเห็นด้วยกับเจตนา แต่คิดว่าข้อสรุปควรเปลี่ยนไป ถ้าคุณชนเพดานของ prompt แล้ว สิ่งที่ควรทำคือให้ LLM เขียนซอฟต์แวร์ที่จะทำงานนั้น แทนที่จะพยายามให้ LLM มาทำงานนั้นเองตอน runtime
บทบาทของ LLM ตอน runtime โดยทั่วไปน่าจะเหลือแค่ช่วยให้ผู้ใช้เลือก input ที่เข้ากับระบบซอฟต์แวร์ที่ฝังกฎธุรกิจที่เข้มงวดไว้
สัปดาห์แรก prompt ยาวขึ้นเรื่อย ๆ แต่ประสิทธิภาพกลับแย่ลง สัปดาห์ที่สองผมหันไปโฟกัสกับการนิยาม object อย่างโน้ต งาน โปรเจ็กต์ คน ให้ชัดเจน รวมถึงนิยาม method ที่ทำงานกับ object เหล่านั้นอย่างชัดเจน อย่างที่คุณว่าไว้ ผิวหน้าของเอเจนต์จะยุบเหลือเป็น ชั้นแปลภาษา ที่แปลงภาษาธรรมชาติให้เป็นคำสั่งและอาร์กิวเมนต์ซึ่งผ่านตัวตรวจสอบ input
ถ้าเป็น LLM แบบนั้น มันอาจทำ strawberry test ได้ดีกว่านี้
ผมให้ Claude เขียน shell script ไม่กี่ตัวเองเพื่อจัดการเคสที่เจอบ่อยใน workflow ของผม เช่นการรันทดสอบ ตอนนี้มันไม่วนไปวนมาครึ่งชั่วโมงแล้ว แต่เรียกใช้เครื่องมือพวกนั้นเพื่อจัดการการตั้งค่าให้เสร็จ
ทุกครั้งที่มันขออนุญาตรัน one-liner แปลก ๆ ใน shell หรือ Python เพื่อทำอะไรครั้งเดียว ผมก็จะนึกว่าควรบังคับให้มันไปใช้เครื่องมือที่อนุมัติอัตโนมัติได้แทนหรือเปล่า
นี่แหละว่าทำไมผมถึงชอบใช้คำว่า “AI รุ่นถัดไป” บ่อย ๆ เพราะมันไม่ได้หมายถึงแค่ LLM อย่างเดียว LLM เองก็เจ๋งมาก และถึงจะไม่มีความก้าวหน้าพื้นฐานเพิ่ม ผมก็ยังคิดว่ามันจะสร้างคุณค่าได้ต่อ ผ่านการนำไปใช้และปรับให้เหมาะในรูปแบบที่น่าสนใจยิ่งขึ้น
แต่บางส่วนดูเหมือนต้องการ การปรับปรุงพื้นฐานระดับรุ่นถัดไป ไม่ว่าจะออกมาในรูปไหนก็ตาม ปรากฏการณ์ที่ LLM ทำให้คำสั่งอย่าง “ห้ามทำ X เด็ดขาด” เบลอหายไป และหลังทำงานหลายขั้นตอนกลับเหมือนตีความเป็น “ช่วยทำ X ให้ที” ดูจะใกล้เคียงกับข้อจำกัดระดับรากฐานของวิธีทำงานมันมาก เราอยู่ในช่วงตื่นเต้นแรกเริ่มของการค้นหาว่ามันทำอะไรได้บ้าง เลยลืมได้ง่ายว่า LLM ไม่ใช่ทุกอย่างที่เราตามหาใน AI
ต้องมีโครงสร้างที่จัดการ “ห้ามทำ X เด็ดขาด” ได้แบบเดียวกับมนุษย์ และต้องมีโครงสร้างที่มีลำดับชั้นความจำคล้ายมนุษย์แทน “context window” ด้วย ต่อให้เริ่มจาก AI แบบเดียวกัน ถ้าสองคนคุยกันนานพอ สุดท้าย AI สองตัวนั้นก็ควรกลายเป็นคนละตัวจริง ๆ ไม่ใช่แค่ตัวเดียวกันแต่มี context window ต่างกัน
แน่นอนว่าไม่มีใครรู้ว่าหน้าตามันจะเป็นอย่างไร แต่ก็ไม่มีเหตุผลจะคิดว่า LLM คือคำตอบสุดท้ายของ AI
ในฐานะคนที่วนมาครบรอบจาก prompt enforcement → deterministic flow → prompt enforcement อีกที ผมไม่เห็นด้วย
เหตุผลที่ “อย่าข้าม” ใช้ไม่ได้ผล ก็เพราะเอเจนต์กำลังแบกงานมากเกินไป และเนื้อหาอื่น ๆ ใน context ก็ดึงความสนใจออกจากคำสั่งนี้
แต่ก็ไม่มีใครบอกว่าเอเจนต์ที่คอย enforce ต้องเป็นตัวเดียวกับเอเจนต์ที่คอยสร้างอะไรบางอย่าง คุณเข้ารหัสตรรกะการตัดสินใจที่ฉลาดพอสมควรไว้ใน deterministic control flow ได้ แต่ถ้าทำแข็งเกินไปมันก็ทำงานไม่ดี และถ้าทำซับซ้อนเกินไป ต้นทุนการตั้งค่าและบำรุงรักษาก็อาจแพงกว่าการใช้เอเจนต์เสียอีก
โดยพื้นฐานแล้วสิ่งที่ต้องมีคือเอเจนต์สามประเภท: supervisor ที่ดูแลลูปและคอยเปิดสิ่งที่เหมาะสมเมื่อมีปัญหา, orchestrator ที่มอบหมายให้เอเจนต์ที่เหมาะสมและบังคับใช้ guardrail ในจุดที่จำเป็น, และ worker ที่ลงมือทำงานเป็นหน่วย ๆ
จากมุมผม harness ทุกตัวกำลังทำเรื่องนี้ผิด และบางตัวก็ผิดหนักมาก
ยกตัวอย่างเช่น slash command เป็นฟีเจอร์ที่ผิดทาง เราไม่ควรต้องรอให้แชตบอตจบหนึ่ง turn ก่อน ถึงจะเช็กสถานะ context window หรือดูว่า session นี้ใช้เงินไปเท่าไรได้ การควบคุมควรตั้งฉากกับ chat loop
มีหลายอย่างที่ไม่เกี่ยวอะไรเลยกับการควบคุม input/output ของ text generator แต่กลับถูกผูกไว้กับพฤติกรรมการแชต เพียงเพราะคิดว่า “ในเมื่อเป็นแชต ก็ทำให้มันเหมือน IRC bot ไปสิ”
ตอนนี้มี LLM agent เยอะมาก แต่แทบไม่มีตัวไหนแยก control, agent loop และ representation layer ออกจากกันอย่างถูกต้อง มีไม่กี่ตัวที่อย่างน้อยก็มี headless mode ซึ่งก็ยังดี
/statusได้ดีนะอย่างอื่นอาจไม่เป็นแบบนั้น
มันยังสะดวกกว่ามากเวลาสลับไปมาระหว่างบทสนทนาและดูอัปเดตด้วย บางครั้งผมใช้ Claude Code หรือ opencode ในเทอร์มินัล แต่ประสบการณ์เทียบกับแอปเดสก์ท็อป Codex แล้วแย่กว่ามาก
คำพูดที่ว่า “ลองจินตนาการถึงภาษาการเขียนโปรแกรมที่ statement เป็นเพียงข้อเสนอ และ function หลอนแล้วคืนค่า ‘Success’ กลับมา การให้เหตุผลจะเป็นไปไม่ได้ และความน่าเชื่อถือจะพังลงตามความซับซ้อนที่เพิ่มขึ้น” โดยแก่นแล้วค่อนข้างใกล้กับ declarative programming
การเขียนโปรแกรมแบบดั้งเดิมส่วนใหญ่อยู่ในโลก imperative ที่คุ้นมือสำหรับนักพัฒนา คือให้ชุดคำสั่งที่แม่นยำและคาดหวังว่ามันจะทำตามที่เราเขียน เอเจนต์กลับใกล้กับ declarative มากกว่า คือคุณให้ผลลัพธ์มา แล้วมันค่อยทำงานเพื่อไปให้ถึงผลนั้น
แน่นอนว่าโลก declarative อย่าง SQL มีผลลัพธ์ที่ค่อนข้างสม่ำเสมอและนิยามไว้ชัด แต่ถึงอย่างนั้นคุณก็ยังเชื่อใจ internal engine ว่าจะจัดการอย่างไร การคิดถึงเอเจนต์ในฐานะสิ่ง declarative ช่วยผมมากกว่าการพยายามออกแบบระบบ “ควบคุม” แบบ Rube Goldberg ถ้ามันไม่ตรง ก็แค่ตรวจสอบ รายงานว่าผิด แล้วลองใหม่หรือเปลี่ยนแนวทาง
ถ้าคุณต้องการ imperative จริง ๆ ก็เขียนแบบ imperative ไปเลย หรือให้เอเจนต์เขียนแบบนั้นให้ก็ได้ มันอ่านแล้วเหมือนกำลังพยายามใช้เครื่องมือผิดงาน
มันอาจดูเหมือน declarative แต่ก็เป็นแค่ภาพลวงตาภายในนั้น สิ่งที่เราทำจริง ๆ ไม่ใช่อธิบายเป้าหมายให้ AI เข้าใจและตีความ แต่เป็นการมีเอกสารเรื่องเล่าที่ตัวละครตัวแทนมนุษย์คุยกับตัวละครคอมพิวเตอร์ แล้วพวกเราในโลกจริงก็หวังว่า LLM จะเอาเรื่องราวด้านหลังมาปะติดปะต่อให้แน่นพอจนดึงสิ่งที่มีประโยชน์ออกมาได้
นี่ไม่ใช่แค่การแบ่งประเภทเชิงวิชาการนะ การรู้ว่ามันมีลักษณะเป็นเรื่องเล่าช่วยให้เราเข้าใจความสัมพันธ์ระหว่าง input กับ output และวางกลยุทธ์ได้ดีขึ้น เช่นช่วยให้เข้าใจความเสี่ยงอย่าง prompt injection และยังเป็นแนวทางว่าเราควรใส่หรือไม่ใส่ข้อมูลฝึกแบบไหน
ซึ่งพอเป็นแบบนั้นก็เจอปัญหาคล้าย LLM คือถ้าไม่ระวังมาก ๆ ก็จะล้มเหลวแบบเงียบ ๆ วนซ้ำ หรือขัดแย้งกัน แก่นของปัญหาอาจเป็นเรื่องสมมติฐานโลกปิดแบบเดียวกันก็ได้ ใน LLM มันแสดงออกมาเป็นการหลอนแทนที่จะยอมรับว่าไม่รู้
และอย่างที่คุณว่า ถ้าสั่ง LLM ที่ไม่ deterministic แบบ declarative ว่า “พาไปสู่สถานะสุดท้ายนี้” โอกาสหลุด轨ก็ยิ่งสูงขึ้น
แต่ตัว query เองไม่ได้เปลี่ยนไปแบบ LLM
ผมคิดเรื่องนี้มาเยอะพอสมควร มันอาจโยงกับเรื่อง specialization ได้ด้วย ยิ่งโมเดลเฉพาะทางมากขึ้นเท่าไร ความสามารถพื้นฐานระดับฐานก็ดูเหมือนยิ่งลดลง แต่ถ้าเล็งไปที่การ abstraction เพิ่มขึ้นแค่นิดเดียว อาจได้ข้อดีของทั้งสองฝั่ง
เป็นตัวอย่างที่ค่อนข้างเฉพาะ แต่ก็น่าคิด
สรุป podcast 20 นาที: https://pub-6333550e348d4a5abe6f40ae47d2925c.r2.dev/EP008.ht...
งานวิจัย: https://arxiv.org/abs/2605.00225
เรื่องนี้เห็นกันมาตั้งแต่ยุค Auto-GPT ในปี 2023 แล้ว ผู้คนปล่อยให้ GPT “ขับรถ” แต่ในกรณีส่วนใหญ่ สิ่งที่ต้องการจริง ๆ มีแค่ Python สิบบรรทัดกับการเรียก
llm()สักไม่กี่ครั้งเท่านั้นทางเลือกอีกแบบคือรัน Python สิบบรรทัดนั้นด้วยวิธีที่แพงที่สุด ช้าที่สุด และเชื่อถือได้น้อยที่สุดเท่าที่จะเป็นไปได้ ซึ่งแน่นอนว่ามันฮิตมาก
ตัวอย่างเช่น คนส่วนใหญ่ใช้เอเจนต์ไปทำ internet research มันจะรันอยู่หลายชั่วโมงแล้วค่อย ๆ วอกแวกหรือไม่ก็ลืมสิ่งที่กำลังทำอยู่ตั้งแต่แรก
ในทางกลับกัน คุณเขียนโค้ดสิบบรรทัดที่ใช้
import duckduckgoกับimport llmเพื่อทำเรื่องเดียวกันให้เสร็จใน 20 วินาทีได้ แถมรันได้แบบ deterministic จริง ๆ และค่าใช้จ่ายน้อยกว่าถึง 50 เท่าโมเดลปัจจุบันดีขึ้นมาก และดีพอแล้วที่ Auto-GPT จะเริ่มเป็นจริงได้ แต่การไปรัน control flow ที่สเปกหละหลวม ด้วยวิธีที่แพงที่สุดเท่าที่ทำได้ ก็ยังเป็นความคิดที่แย่อยู่ดี