FACET: สังเคราะห์โจทย์เทอร์มินัลจาก state ของคอนเทนเนอร์จริง — เทรน Qwen3.5-27B ด้วย trajectory แค่ 1.2K แล้วไล่ตามโมเดล 397B บน Terminal-Bench 2.1 เหลือห่าง 1.49 แต้ม
ถ้าคุณเคยพยายามเทรน coding agent ให้ทำงานบนเทอร์มินัลได้ดีขึ้น คุณน่าจะเจอกำแพงเดียวกัน — ไม่ใช่โมเดล แต่เป็นโจทย์ การจะได้โจทย์เทอร์มินัลหนึ่งข้อที่ใช้เทรนได้จริง คุณต้องมีของสี่อย่างที่สอดคล้องกัน: คำสั่งที่ชัดเจน, สภาพแวดล้อมตั้งต้นที่ถูกต้อง, เฉลยที่รันแล้วผ่าน และ verifier ที่ตรวจได้จริงว่าผ่านหรือไม่ผ่าน
เปเปอร์ FACET: Preserving Source Intent and Executable State in Terminal Task Synthesis (arXiv 2608.18580 ส่งขึ้นเมื่อ 19 สิงหาคม 2026 และขึ้น Hugging Face Daily Papers เมื่อ 21 ส.ค. ด้วยยอดโหวต 112) ชี้ตรงไปที่ต้นตอของปัญหา: ถ้าของสี่อย่างนั้นถูก generate ขึ้นมาจาก สมมติฐานคนละชุด ผลลัพธ์คือโจทย์ที่ แก้ไม่ได้ หรือแย่กว่านั้นคือ ตรวจผิด — และคุณจะไม่รู้เลยจนกว่าจะเทรนเสร็จ
ปัญหาคือ “state” ไม่ใช่ “prompt”
วิธีสังเคราะห์โจทย์แบบเดิมมักให้ LLM เขียนคำสั่งขึ้นมาก่อน แล้วค่อยให้เขียน Dockerfile ตาม แล้วค่อยให้เขียนเฉลย แล้วค่อยให้เขียนเทสต์ ทุกขั้นเป็นการเดาว่าขั้นก่อนหน้า “น่าจะ” ทำอะไรไว้ ผลคือความไม่ตรงกันสะสม: เทสต์อ้างถึงไฟล์ที่สภาพแวดล้อมไม่ได้สร้าง, เฉลยสมมติว่ามีแพ็กเกจที่ไม่ได้ติดตั้ง, คำสั่งบอกให้แก้บั๊กที่ไม่มีอยู่จริง
FACET เปลี่ยนลำดับ: มันประกอบ skill ของ agent ให้เป็นสถานการณ์ที่สอดคล้องกันก่อน แล้วจึงสร้างสภาพแวดล้อมให้เป็นจริงขึ้นมา จากนั้นค่อย generate ทั้งคำสั่ง เฉลย และ verifier โดย อ้างอิงจาก state ของคอนเทนเนอร์เดียวกัน ที่ทุกส่วนมองเห็นร่วมกัน
จุดที่ทำให้ประหยัดขึ้นมากคือขั้น validate แล้วซ่อมเฉพาะจุด — เมื่อโจทย์ข้อหนึ่งไม่ผ่านการตรวจ ระบบไม่ทิ้งทั้งข้อแล้ว generate ใหม่ทั้งชุด แต่ระบุว่า artifact ตัวไหนพัง (เฉลย? เทสต์? environment?) แล้วซ่อมเฉพาะตัวนั้น ส่วนที่ยังดีอยู่ถูกเก็บไว้
ตัวเลขจากท่อผลิต
ตัวเลขจากเปเปอร์บอกว่า “ซ่อมเฉพาะจุด” คุ้มแค่ไหน:
| ขั้น | จำนวน |
|---|---|
| seed ตั้งต้น (scenario × skill) | 7,852 |
| ผ่าน validate ก่อน ซ่อม | 2,856 จาก 7,446 (38.35%) |
| ผ่าน validate หลัง ซ่อม (สูงสุด 5 รอบ) | 6,078 (81.63%) |
พูดอีกอย่าง: ถ้าไม่มีขั้นซ่อม ต้องทิ้งโจทย์ไปเกือบสองในสาม การซ่อมแบบเจาะจุดดึงกลับมาได้อีกกว่าเท่าตัว
ที่น่าสนใจกว่าคือเมื่อเทียบคุณภาพชุดข้อมูลกับของที่มีอยู่แล้ว:
| ชุดข้อมูล | trajectory | เทสต์ต่อโจทย์ | P@1 | P@3 |
|---|---|---|---|---|
| FACET | 1.2K | 22.77 | 27.00 | 35.00 |
| Terminal-Lego | 32K | 16.60 | 47.00 | 49.00 |
| Nemotron-Terminal | 5K | 6.18 | 40.67 | 48.00 |
ต้องอ่านตารางนี้ให้ถูก — P@1 และ P@3 ของ FACET ต่ำกว่า ไม่ใช่เพราะข้อมูลแย่ แต่เพราะโจทย์ยากและตรวจเข้มกว่า ค่า 22.77 เทสต์ต่อโจทย์คือสูงที่สุดในตาราง สูงกว่า Nemotron-Terminal เกือบ 4 เท่า ยิ่งมีเทสต์ต่อโจทย์มาก โอกาสที่ agent จะ “ผ่าน” ด้วยการเดาหรือทำครึ่ง ๆ กลาง ๆ ก็ยิ่งน้อย
ผลบน Terminal-Bench 2.1
ทีมวิจัย fine-tune Qwen3.5 สามขนาดด้วย trajectory ที่สำเร็จเพียง 1.2K เส้น แล้ววัดบน Terminal-Bench 2.1:
| โมเดล | ก่อน | หลัง | เพิ่มขึ้น |
|---|---|---|---|
| Qwen3.5-4B | 17.60 | 24.72 | +7.12 |
| Qwen3.5-9B | 27.34 | 35.58 | +8.24 |
| Qwen3.5-27B | 40.82 | 47.57 | +6.75 |
บรรทัดที่ควรจำคือบรรทัดสุดท้าย: 27B ที่ผ่าน FACET ทำได้ 47.57 ขณะที่ Qwen3.5-397B ทำได้ 49.06 — ห่างกัน 1.49 แต้ม จากโมเดลที่ใหญ่กว่าราว 15 เท่า
เปเปอร์เผยแพร่ภายใต้ CC BY 4.0 และมีหน้าโปรเจกต์แยกที่ stokou.github.io/FACET-Terminal
มุมมอง AI Curator
ผลนี้ไม่ได้บอกว่า “โมเดลเล็กแทนโมเดลใหญ่ได้” — มันบอกอย่างอื่นที่ตรงประเด็นกว่าสำหรับคนที่ต้อง deploy จริง: สำหรับงานเทอร์มินัลที่มีขอบเขตชัด ช่องว่างระหว่าง 27B กับ 397B ส่วนใหญ่เป็นช่องว่างของข้อมูลเทรน ไม่ใช่ของพารามิเตอร์ และช่องว่างของข้อมูลนั้นปิดได้ด้วย trajectory 1.2K เส้น ซึ่งเป็นปริมาณที่ทีมขนาด 3-5 คนผลิตเองได้ในเวลาไม่กี่สัปดาห์
สำหรับไทยและอาเซียน นี่คือประเด็นที่มีน้ำหนักกว่าข่าวโมเดลใหม่รายวัน เพราะข้อจำกัดที่แท้จริงของทีมในภูมิภาคไม่เคยเป็นเรื่อง “หาโมเดลเก่ง ๆ ไม่ได้” — โมเดล open-weight ระดับ 27B หาได้ฟรี รันบนการ์ดใบเดียวได้ ข้อจำกัดจริงคือ ไม่มีชุดโจทย์ที่สะท้อนงานจริงของตัวเอง ธนาคารไทยที่อยากได้ agent จัดการ pipeline ภายใน หรือทีม DevOps ที่อยากได้ agent แก้ปัญหาบนเซิร์ฟเวอร์ในองค์กร ไม่มีทางไปหยิบ Terminal-Bench มาใช้ตรง ๆ ได้ เพราะสภาพแวดล้อม เครื่องมือ และรูปแบบความล้มเหลวเป็นคนละชุดกันสิ้นเชิง
สิ่งที่ FACET เสนอจริง ๆ จึงไม่ใช่ชุดข้อมูล แต่เป็น สูตรการผลิตชุดข้อมูล ที่ทำซ้ำได้ในโดเมนของตัวเอง และหัวใจของสูตรคือข้อสังเกตที่ควรถูกยกไปใช้กับงานสังเคราะห์ข้อมูลทุกประเภท: อย่าให้ LLM เดาต่อกันเป็นทอด ๆ ให้มันเขียนทุกอย่างโดยอ้างอิง state ที่ตรวจสอบได้จริงชุดเดียวกัน ตัวเลข 38.35% → 81.63% คือราคาของข้อสังเกตนี้ในรูปตัวเลข
จุดที่ยังต้องระวัง: เปเปอร์นี้ยังไม่มีการทำซ้ำโดยบุคคลที่สาม และผลทั้งหมดวัดบนตระกูล Qwen3.5 ตระกูลเดียว จะรู้ว่าวิธีนี้ทั่วไปแค่ไหนก็ต่อเมื่อมีคนเอาไปลองกับ Llama, GLM หรือโมเดลไทยอย่าง Typhoon แล้วเห็นการเพิ่มขึ้นในระดับใกล้เคียงกัน — และนั่นคือการทดลองที่ทีมในไทยทำได้เอง ไม่ต้องรอใคร
แหล่งข่าว
อ่านเพิ่มในหมวด งานวิจัย
Anthropic ให้ Claude สร้างชุดข้อมูลที่ดูไร้พิษภัยแต่ทำโมเดลเบี้ยว ซ่อนในเรื่องเลี้ยงผึ้งและมวยปล้ำ จนผ่านระบบตรวจที่คล้ายของจริง
ทีม Alignment ของ Anthropic ให้ Claude ปีนหาชุดข้อมูล fine-tune ที่หลบ monitor ได้ ผลคือซ่อนพฤติกรรมในงานเขียนแนวบทบาทสมมติ และโมเดลที่เทรนแล้วนำไปใช้ในบุคลิกตัวเอง ผลซ้ำได้บน Qwen 3.6 27B แต่การทดลองเอื้อฝ่ายโจมตีมากและไม่ได้สะท้อนโมเดลที่ใช้งานจริง
Memdoor ทำซ้ำ GVS5H ได้: ทีม Qwen3.8-27B ห้าตัวตามทัน Fable 5 บนโจทย์ LiveCodeBench Hard แต่ผู้ทำบอกเองว่า 'เท่า' ไม่ใช่ 'ชนะ'
Memdoor ปล่อย workflow team-solve ที่เขียนวิธี GVS5H เป็น YAML ล้วนและทำคะแนน 9.8/10 บน LiveCodeBench Hard 10 ข้อ เทียบกับ 8.0 ของ Fable 5 แบบเรียกครั้งเดียว แต่ตัวอย่างเล็กและมีข้อจำกัด ส่วนงานวิจัยต้นฉบับชี้ว่าวิธีนี้ไม่ได้ช่วยทุกโมเดล
QwenPU รัน LLM ซ้อนใน LLM ด้วยหน่วยเวกเตอร์ที่คอมไพล์ลงในน้ำหนัก Qwen3.5-4B ส่วน bootgpt ทำให้เครื่อง 386 บูตเข้าโมเดลภาษาโดยไม่มี OS
ผู้สร้าง Qwenputer ปล่อย QwenPU เมื่อ 31 ต.ค. รัน stories260K ของ Karpathy บนหน่วยเวกเตอร์ที่คอมไพล์ลงในน้ำหนัก Qwen3.5-4B ลดเหลือ 53,000 trace token ต่อหนึ่ง token เรื่องเล่า วันเดียวกัน bootgpt ใส่โมเดล int8 ขนาด 11.5KB ให้บูตบนเครื่อง 386 โดยไม่มี OS