ทีม Qwen กลับด้านไปป์ไลน์เทรนเอเจนต์ — ถอดสภาพแวดล้อมที่รันได้ 37,273 ชุดออกจาก trajectory เก่า 359,593 เส้น ดัน Qwen3.5-27B บน Terminal-Bench 2.1 ขึ้น 11.9 จุด แต่เวิร์กสเปซที่รีเพลย์ได้จริงมีโค้ดมัธยฐาน 0 บรรทัด
เมื่อ 3 กันยายน 2026 ทีมวิจัยจาก Qwen Team, Alibaba Group ร่วมกับ Tsinghua University เผยแพร่ arXiv:2609.04148 — งานชื่อ Terminal-Universe ที่ตั้งคำถามกลับด้านกับวิธีสร้างข้อมูลเทรนเอเจนต์ที่ใช้กันอยู่
ข้อสังเกตตั้งต้นเรียบง่ายจนน่าตกใจว่าทำไมไม่มีใครทำก่อน: trajectory กับสภาพแวดล้อมคือสองมุมมองของเหตุการณ์เดียวกัน ที่ผ่านมาทุกคนสร้างสภาพแวดล้อมก่อนแล้วให้เอเจนต์วิ่งจนได้ trajectory ทีม Qwen กลับทิศ — เพราะบันทึกการเรียกเครื่องมือใน trajectory เปิดเผยเนื้อหาและโครงสร้างของสภาพแวดล้อมที่มันรันอยู่แล้ว เครื่องมือ Read แสดงเนื้อไฟล์ ส่วน Write และ Edit แสดงว่าเวิร์กสเปซเปลี่ยนไปยังไง ข้อมูลเท่านี้พอจะประกอบสำเนาที่รันได้ของเวิร์กสเปซเดิมกลับขึ้นมา
เหตุผลที่เรื่องนี้สำคัญ เปเปอร์อธิบายไว้คมมาก: “trajectory เป็นบันทึกเดี่ยวที่ตายตัว คุณภาพของมันถูกจำกัดด้วยคำตอบของโมเดลที่สร้างมัน และเราตรวจไม่ได้ว่าสิ่งที่มันแก้ในโค้ดเบสถูกจริงหรือเปล่า สภาพแวดล้อมไม่มีข้อจำกัดเหล่านี้ เพราะโจทย์เดิมถูกแก้ใหม่ด้วยโมเดลที่เก่งกว่าได้ ผลลัพธ์ถูกตรวจด้วยเทสต์ของเราเองได้ และตั้งโจทย์ที่ยากกว่าบนเวิร์กสเปซเดิมได้”
รีเพลย์แบบกำหนดแน่นอน แล้วให้เอเจนต์เติมส่วนที่ขาด
ไปป์ไลน์มีสามขั้น
- รีเพลย์ — เล่นซ้ำการกระทำต่อไฟล์ที่บันทึกไว้ตามลำดับเวลา คืนค่าไฟล์แต่ละไฟล์กลับไปเป็นสถานะก่อนที่เอเจนต์จะแก้ โดยกันการแก้ไขของเอเจนต์เอาไว้ เพื่อให้เวิร์กสเปซเริ่มต้นในสภาพ “ยังไม่ถูกแก้”
- เติมด้วยเอเจนต์ — เอเจนต์เติมไฟล์และ dependency ที่หายไปโดยไม่ให้หลุดเฉลย
- ตัดสินความเพียงพอ — เอเจนต์ผู้ตัดสินตรวจว่าเวิร์กสเปซมีบริบทโปรเจกต์พอจะทำโจทย์ได้จริง
แหล่งข้อมูลเป็นคอร์ปัส trajectory สาธารณะทั้งหมด และทุกชุดมีใบอนุญาตแบบเปิด — ประเด็นที่หลายงานสังเคราะห์ข้อมูลตอบไม่ชัด
| คอร์ปัสต้นทาง | ใบอนุญาต | trajectory | สภาพแวดล้อม |
|---|---|---|---|
| LFM2-Terminal | CC-BY-4.0 | 139,841 | 46,037 |
| SWE-smith | MIT | 95,851 | 8,476 |
| SWE-rebench | CC-BY-4.0 | 67,074 | 6,118 |
| CoderForge | Apache-2.0 | 32,964 | 3,978 |
| LiteCoder-Terminal | MIT | 19,711 | 2,725 |
| SWE-Gym | MIT | 4,152 | 929 |
| รวม | 359,593 | 68,263 |
ทีมตัดคอร์ปัสที่มาจาก Terminal-Bench ออก และตัดงานที่มีแต่การอ่านอย่างเดียวหรือรูปแบบแอ็กชันที่ไม่รองรับทิ้ง จาก 68,263 ชุดที่ประกอบได้ หลังกรองการปนเปื้อนและตัดซ้ำระดับรีโป เหลือ 37,273 สภาพแวดล้อมที่เพียงพอต่อการตั้งโจทย์
ตัวเลขที่บอกว่าใครเป็นคนเขียนโค้ดในเวิร์กสเปซจริง ๆ
นี่คือตารางที่สำคัญที่สุดในเปเปอร์ และเป็นตารางที่ไม่มีใครพาดหัว
| สถิติเวิร์กสเปซ (terminal pool) | หลังรีเพลย์ | หลังเอเจนต์เติม |
|---|---|---|
| ไฟล์ต่อเวิร์กสเปซ (มัธยฐาน / เฉลี่ย) | 2 / 2.9 | 13 / 22.4 |
| บรรทัดข้อความทั้งหมด | 60 / 90 | 539 / 5,761 |
| บรรทัดโค้ด (ไฟล์ซอร์ส) | 0 / 43 | 316 / 503 |
อ่านแถวล่างสุดอีกครั้ง: เวิร์กสเปซที่รีเพลย์ออกมาได้ มีบรรทัดโค้ดมัธยฐานเท่ากับศูนย์ โค้ดเกือบทั้งหมดในสภาพแวดล้อมสุดท้ายมาจากขั้นที่สอง — เอเจนต์เขียนขึ้นใหม่
เรื่องนี้ย้อนกลับมาที่คำวิจารณ์ที่เปเปอร์ตั้งไว้กับงานคู่แข่งเอง ในบทนำทีมวิจารณ์วิธี task-conditioned synthesis ว่า “สภาพแวดล้อมไม่ได้ผูกกับโปรเจกต์จริง ความสมจริงของมันจึงขึ้นกับตัวสร้างทั้งหมด ซึ่งมักผลิตเวิร์กสเปซที่เล็กและเรียบร้อยมากกว่าโค้ดจริง” — แต่ในไปป์ไลน์ของทีมเอง สิ่งที่ผูกกับโปรเจกต์จริงคือโครงกระดูก 2.9 ไฟล์ ส่วนอีกราว 19.5 ไฟล์เป็นของที่ตัวสร้างผลิต ข้ออ้างเรื่องความสมจริงจึงตั้งอยู่บนสมมติฐานว่าโครงกระดูกเล็ก ๆ นั้นเป็นส่วนที่รับน้ำหนัก ไม่ใช่ปริมาณไฟล์
ตัวเลขที่การเติมช่วยได้จริงคืออัตราความเพียงพอ: terminal pool ขึ้นจาก 40.2% เป็น 93.5% และ SWE pool จาก 20.1% เป็น 77.1% ส่วนการกระจายของภาษาค่อนข้างแคบ — Python 84.7% ตามด้วย C++ และ C ขณะที่งานประมวลผลข้อมูล DevOps และความปลอดภัยรวมกันเกิน 80% ของโดเมน
ผลลัพธ์: +11.9 จุด แต่ยังห่างครูอยู่ 16.4 จุด
ทีมสร้างโจทย์ใหม่บนสภาพแวดล้อมเหล่านี้สี่แบบ — Intent Recovery (กู้โจทย์เดิม), Single-WS (โจทย์ใหม่ในรีโปเดียว), Cross-WS (โจทย์ข้ามหลายโค้ดเบส) และ Multi-Round (ต่อเป็นเซสชันที่ผู้ใช้ให้ฟีดแบ็กซ้ำ) โดยใช้ Qwen3.7-Max เป็นครูทั้งตั้งโจทย์ เขียนเฉลย และเขียนตัวตรวจในคอนเทนเนอร์ แล้วเก็บเฉพาะ trajectory ที่เทสต์ผ่านหมด ได้ 31,977 ตัวอย่าง ≈ 1.42 พันล้านโทเคน
จากนั้น SFT บน Qwen3.5-27B สองอีพอก LR คงที่ 7×10⁻⁶ batch รวม 256 ความยาวลำดับ 256k โดยรันตรวจการปนเปื้อนแบบ 13-gram กับโจทย์ Terminal-Bench ก่อนเทรน
| โมเดล | TB 2.0 | TB 2.1 | EvoCode-Bench v2 MT@4 |
|---|---|---|---|
| Qwen3.5-27B (ฐาน) | 41.6 | 46.2 | 6.3 |
| + Terminal-Universe (32k) | 52.8 | 58.1 | 20.1 |
| ส่วนต่าง | +11.2 | +11.9 | +13.8 |
| Qwen3.7-Max (ครู) | 69.7 | 74.5 | 39.8 |
| TMax-27B (วิธีสังเคราะห์ที่ดีที่สุดก่อนหน้า) | 42.7 | 44.9 | 17.1 |
ภายใต้ฮาร์เนส Claude Code (เวอร์ชัน 2.1.126) โมเดลได้ 58.2 บน TB 2.1 (+10.4) ตัวเลขทั้งหมดเป็นค่าเฉลี่ยจากหกรอบอิสระ โดยปิดเครื่องมือ WebFetch, WebSearch, AskUserQuestion, EnterPlanMode, ExitPlanMode และให้คอนเทนเนอร์ละ 12 คอร์ 32 GiB
แถวที่ควรอ่านเป็นคำเตือนอยู่ในตารางเปรียบเทียบวิธีอื่น: Nemotron-Terminal-32B ใช้ข้อมูล 490k ได้ 27.4 บน TB 2.0 ขณะที่ OpenThinker-Agent-32B ใช้ 100k ได้ 26.2 — คือปริมาณข้อมูลไม่ได้แปลว่าคะแนน และหลายวิธีที่พอใช้ได้บน Terminal-Bench ได้ 0.0 บน EvoCode-Bench v2 MT@4 ซึ่งวัดการทำงานหลายรอบต่อเนื่องด้วยการให้คะแนนแบบ fail-stop (ได้เครดิตเฉพาะรอบที่ผ่านติดต่อกันก่อนพลาดครั้งแรก) การเทรนบนงานรอบเดียวไม่ถ่ายทอดไปยังงานหลายรอบโดยอัตโนมัติ
สิ่งที่ยังไม่มีในเปเปอร์
ครูตัวเดียวเขียนทั้งโจทย์ เฉลย และตัวตรวจ — ทีมเขียนไว้ในข้อจำกัดเองว่า “ช่องว่างความสามารถของมันอาจจำกัดความครอบคลุมของโจทย์ ขณะที่ข้อผิดพลาดที่มันทำในเฉลยก็อาจถูกเทสต์ของมันเองมองข้ามไปด้วย” และเสนอว่างานอนาคตควรใช้ครูหลายตัวกับโมเดลอิสระสำหรับสร้างตัวตรวจ นี่คือปัญหาชั้นเดียวกับที่ฝูงเอเจนต์ของ DeepMind หาช่องโหว่ในตัวตรวจของตัวเองเจอเมื่อวานนี้ — เมื่อคนออกข้อสอบกับคนตรวจข้อสอบเป็นคนเดียวกัน ความผิดพลาดที่ตรงกันทั้งสองฝั่งจะผ่านไปเงียบ ๆ
การมีส่วนร่วมหลักสองข้อคิดเป็นแค่ห้าส่วนของคอร์ปัส — Cross-WS ได้ 3,512 และ Multi-Round ได้ 3,079 จาก 31,977 รวมกันราว 21% ที่เหลือ 25,386 เป็น Single-WS แบบธรรมดา ส่วนขยาย “ความกว้าง” และ “ความลึก” ที่เป็นจุดขายจึงเป็นส่วนน้อยของข้อมูลที่ใช้เทรนจริง
ทุกเวิร์กสเปซใช้คอนเทนเนอร์ Ubuntu 24.04 มาตรฐาน ไม่ได้สร้างสภาพแวดล้อมเฉพาะรีโปแบบ SWE-Factory หรือ RepoLaunch ทีมยอมรับว่ากรณีที่ต้องการ system dependency พิเศษหรือขั้นตอนคอมไพล์ซับซ้อนจะมีความเที่ยงตรงลดลง
และที่สำคัญที่สุดสำหรับคนที่อยากเอาไปใช้ — เปเปอร์ไม่ได้ระบุ URL ปล่อยโค้ดหรือชุดข้อมูล และเผยแพร่ภายใต้ arXiv perpetual non-exclusive license ไม่ใช่ CC BY สภาพแวดล้อม 37.3k ชุดที่เป็นผลผลิตหลักของงานนี้ ยังดาวน์โหลดไม่ได้ ณ วันที่เขียน
มุมมอง AI Curator
ประโยคที่ควรจำจากงานนี้คือ “สำหรับ post-training สภาพแวดล้อมคือทรัพยากรที่ควรค่าแก่การสเกล” ซึ่งเป็นการจัดลำดับความสำคัญที่ต่างจากที่วงการทำมาสองปี ตลาดทุ่มเงินไปกับการเก็บ trajectory เพราะมันเก็บง่าย แต่ trajectory คือคำตอบที่แช่แข็ง ส่วนสภาพแวดล้อมคือโจทย์ที่ยังเปิดอยู่ — และโจทย์ที่เปิดอยู่หนึ่งข้อสร้างคำตอบได้ไม่จำกัดจากโมเดลรุ่นถัดไปที่เก่งกว่า
ถ้าข้อสังเกตตั้งต้นถูก มันเปลี่ยนมูลค่าของสิ่งที่หลายบริษัทกำลังนั่งทับอยู่โดยไม่รู้ตัว ทุกทีมที่รัน Claude Code, Codex หรือเอเจนต์เทอร์มินัลตัวอื่นในองค์กร มีล็อกการเรียกเครื่องมือกองอยู่ และตามงานนี้ ล็อกเหล่านั้นไม่ใช่แค่บันทึกการใช้งาน แต่เป็นสำเนาบางส่วนของโค้ดเบสในเวลานั้นที่ประกอบกลับได้ นี่มีสองด้าน: ด้านหนึ่งคือสินทรัพย์สำหรับเทรนโมเดลภายใน อีกด้านคือความเสี่ยงด้านความปลอดภัยที่ยังไม่มีใครนับ — ถ้า trajectory ของเอเจนต์ถูกส่งไปที่ระบบสังเกตการณ์ของบุคคลที่สาม สิ่งที่ส่งไปด้วยไม่ใช่แค่พรอมป์กับคำตอบ
ในทางปฏิบัติ ผมคิดว่าตัวเลข +11.9 จุดควรถูกอ่านคู่กับช่องว่าง 16.4 จุดที่ยังเหลือระหว่างนักเรียน (58.1) กับครู (74.5) การกลั่นจากครูช่วยได้ระดับหนึ่ง แต่มันไม่ได้พาโมเดล 27B ไปถึงที่ที่โมเดลใหญ่อยู่ และวิธีนี้ยังต้องมีโมเดลใหญ่ที่เก่งกว่าอยู่ก่อน — ซึ่งแปลว่าห้องแล็บที่ไม่มีโมเดลระดับ Qwen3.7-Max ของตัวเอง ก็ทำตามสูตรนี้ไม่ได้เต็มสูตร
สำหรับไทยและอาเซียน มุมที่น่าลองมากกว่าการไล่ตามคะแนน Terminal-Bench คือการเอาหลักการไปใช้กับข้อมูลที่มีอยู่จริง — ทีมที่ดูแลโค้ดเบสภาษาไทยหรือระบบเฉพาะทาง (ระบบธนาคารเก่า ระบบราชการ โค้ดที่คอมเมนต์เป็นภาษาไทย) ไม่มีทางไปโผล่ในคอร์ปัสสาธารณะชุดไหนเลย ทั้งหกชุดในตารางเป็นโปรเจกต์ตะวันตกและจีนแทบทั้งหมด แต่ถ้าองค์กรมีล็อกเอเจนต์ของตัวเองอยู่แล้ว ไปป์ไลน์ “รีเพลย์แล้วเติม” นี้เป็นวิธีที่ทำได้จริงในสเกลที่ทีมสิบคนรับไหว — ไม่ต้องจ้างคนเขียนโจทย์ ไม่ต้องขออนุญาตใช้ข้อมูลจากภายนอก และได้สภาพแวดล้อมที่สะท้อนกองโค้ดจริงขององค์กร ซึ่งเป็นสิ่งที่ซื้อจากใครไม่ได้
แต่ต้องเตือนกันไว้ก่อนว่า ตราบใดที่ยังไม่มีโค้ดปล่อยออกมา งานนี้ยังทำซ้ำไม่ได้ สิ่งที่เรามีคือรายงานผล ไม่ใช่เครื่องมือ ผมจะติดตามว่ามีรีโปตามมาไหม และจะรายงานเมื่อมันปรากฏ
แหล่งข่าว
- arXiv:2609.04148 — Terminal-Universe: Turning Agent Trajectories into Scalable Terminal Environments
- ฉบับ HTML เต็ม (ตารางแหล่งข้อมูล ความซับซ้อนเวิร์กสเปซ และ ablation)
- LFM2-Terminal-SFT-Processed — คอร์ปัสต้นทางที่ใหญ่ที่สุดในงานนี้ บน Hugging Face
- Terminal-Bench 2.1 — ความต่างจาก 2.0 ตาม PR ที่เปเปอร์อ้างอิง
อ่านเพิ่มในหมวด งานวิจัย
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