- ในการประเมินที่มุ่งเป้าไปยัง Next.js 16 API พบว่า ดัชนีเอกสาร
AGENTS.md ที่อยู่ในรูทของโปรเจ็กต์ทำคะแนนความแม่นยำได้สูงกว่าแนวทางแบบ skills
- skills เป็นแพ็กเกจ องค์ความรู้เฉพาะโดเมน ในรูปแบบที่เอเจนต์จะเรียกใช้เมื่อจำเป็น แต่เนื่องจากการเรียกใช้ไม่เสถียร จึงมี อัตราผ่านเพียง 53% ในการตั้งค่าพื้นฐาน
- ขณะที่ ดัชนี
AGENTS.md ที่บีบอัดเหลือ 8KB ทำ อัตราผ่าน 100% ได้ในทุกการทดสอบ (Build, Lint, Test)
- วิธีนี้ให้ผลลัพธ์ที่เสถียรกว่าการเรียกใช้เชิงรุก เพราะ ตัดจุดตัดสินใจออก, พร้อมใช้งานเสมอ, และแก้ปัญหาเรื่องลำดับ
- ผู้ดูแลเฟรมเวิร์กสามารถ ใส่ดัชนีเอกสารที่ตรงกับเวอร์ชันไว้ใน AGENTS.md เพื่อเพิ่มความแม่นยำของการสร้างโค้ดได้
ที่มาของปัญหา
- เอเจนต์เขียนโค้ดด้วย AI มีข้อจำกัดตรงที่ ข้อมูลฝึกมักอิงกับ API เวอร์ชันเก่า จึงจัดการกับเฟรมเวิร์กรุ่นใหม่ได้ไม่แม่นยำ
- เช่น
'use cache', connection(), forbidden() ของ Next.js 16 ไม่มีอยู่ในข้อมูลฝึกเดิมของโมเดล
- ในทางกลับกัน สำหรับโปรเจ็กต์เวอร์ชันเก่า โมเดลก็อาจ เสนอ API รุ่นใหม่ที่ไม่มีอยู่จริง ได้เช่นกัน
- เพื่อแก้ปัญหานี้ จึงมีการทดลองแนวทาง เข้าถึงเอกสารที่ตรงกับเวอร์ชัน
สองแนวทาง
- Skills: แพ็กเกจ มาตรฐานเปิด ที่รวมพรอมป์ต์ เครื่องมือ และเอกสารไว้ด้วยกัน โดยเอเจนต์จะเรียกใช้เมื่อจำเป็น
AGENTS.md : ไฟล์คอนเท็กซ์แบบต่อเนื่องที่อยู่ในรูทของโปรเจ็กต์ และอ้างอิงได้เสมอในทุกเทิร์นของบทสนทนา
- มีการประเมินเปรียบเทียบทั้งสองวิธีโดยอิงจากเอกสาร Next.js ชุดเดียวกัน
ข้อจำกัดของแนวทาง Skills
- ผลการประเมินพบว่า 56% ของการทดสอบไม่มีการเรียกใช้ skill และอัตราผ่านพื้นฐานอยู่ที่ 53% โดยแทบไม่ดีขึ้น
- ในบางหัวข้อกลับทำคะแนน ต่ำกว่าค่าพื้นฐานด้วยซ้ำ (เช่น ทดสอบได้ 58% เทียบกับ 63%)
- สิ่งนี้ถูกชี้ว่าเป็นข้อจำกัดที่โมเดลปัจจุบันยัง ใช้งานเครื่องมือได้ไม่เสถียรพอ
การทดลองเพิ่มคำสั่งแบบชัดเจน
- เมื่อลองเพิ่ม คำสั่งแบบชัดเจน ใน
AGENTS.md ว่า “ให้เรียกใช้ skill ก่อนเขียนโค้ด” พบว่า อัตราผ่านเพิ่มเป็น 79%
- แต่ ความต่างเพียงเล็กน้อยของถ้อยคำในคำสั่ง กลับส่งผลต่อผลลัพธ์อย่างมาก
- “เรียกใช้ skill ก่อน” → โมเดลยึดติดกับรูปแบบในเอกสารและพลาดบริบทของโปรเจ็กต์
- “สำรวจโปรเจ็กต์ก่อนแล้วค่อยเรียก skill” → ให้ผลลัพธ์ดีกว่า
- ด้วย ความเปราะบางด้านภาษา แบบนี้ จึงทำให้ความน่าเชื่อถือในการใช้งานจริงต่ำ
การสร้างการประเมินที่เชื่อถือได้
- การทดสอบระยะแรกมีความน่าเชื่อถือต่ำ เพราะมีปัญหาเรื่องพรอมป์ต์ที่กำกวมและการตรวจสอบซ้ำซ้อน
- จึงมีการปรับปรุงโดยเสริม การตรวจสอบตามพฤติกรรม และเน้นการทดสอบ API ของ Next.js 16 ที่ไม่ได้อยู่ในข้อมูลฝึก
- API หลักที่ใช้ทดสอบ ได้แก่
connection(), 'use cache', cacheLife(), forbidden(), proxy.ts, cookies(), headers(), after(), refresh() เป็นต้น
การทดลองแนวทาง AGENTS.md
- ตัดกระบวนการให้เอเจนต์ต้องเลือกเองออก แล้ว ฝังดัชนีเอกสารลงใน AGENTS.md โดยตรง
- ดัชนีนี้ไม่ได้เก็บเอกสารทั้งหมด แต่เป็น รายการพาธเอกสารแยกตามเวอร์ชัน
- มีคำสั่งเพิ่มเติมว่า
IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning for any Next.js tasks.
- เพื่อชี้นำให้โมเดล ให้ความสำคัญกับการให้เหตุผลจากเอกสารมากกว่าการอิงข้อมูลที่ฝึกมาก่อน
ผลการประเมิน
- เมื่อฝังดัชนีไว้ใน AGENTS.md ได้อัตราผ่าน 100%
- ทั้ง Build, Lint และ Test ให้ผลสมบูรณ์ทั้งหมด
- สถิติเปรียบเทียบ:
- Baseline 53%, Skill แบบพื้นฐาน 53%, Skill+คำสั่ง 79%, AGENTS.md 100%
- เหตุผลที่ แนวทางคอนเท็กซ์แบบพาสซีฟเหนือกว่าการเรียกใช้เชิงรุก
- ไม่มีจุดตัดสินใจ — ข้อมูลมีอยู่เสมอ
- พร้อมใช้งานอย่างสม่ำเสมอ — ถูกรวมอยู่ใน system prompt ทุกเทิร์น
- ตัดปัญหาเรื่องลำดับ — ไม่ต้องพึ่งลำดับในการสำรวจเอกสาร
การแก้ปัญหาความจุของคอนเท็กซ์
- ดัชนีเริ่มต้นมีขนาด 40KB แต่ ย่อเหลือ 8KB ด้วยการบีบอัด (ลดลง 80%)
- ใช้โครงสร้างคั่นด้วยไปป์ (
|) เพื่อ เก็บพาธเอกสารและชื่อไฟล์ด้วยพื้นที่น้อยที่สุด
- เอเจนต์จะอ่านเฉพาะไฟล์ที่จำเป็นจากไดเรกทอรี
.next-docs/ เพื่อใช้ ข้อมูลเวอร์ชันที่แม่นยำ
วิธีนำไปใช้
ข้อสื่อถึงนักพัฒนาเฟรมเวิร์ก
- แม้ว่า Skills ยังมีประโยชน์ แต่หากต้องการเพิ่มความแม่นยำของการสร้างโค้ดโดยทั่วไป แนวทาง AGENTS.md มีประสิทธิภาพกว่า
- Skills เหมาะกับเวิร์กโฟลว์ที่เน้นงานเฉพาะ เช่น การอัปเกรดเวอร์ชัน, การย้ายไป App Router
- ข้อแนะนำคือ
- อย่ารอให้ skills ดีขึ้น แต่ เริ่มใช้ AGENTS.md ได้ทันที
- ใส่เฉพาะดัชนีเอกสาร เพื่อลดคอนเท็กซ์ให้เล็กที่สุด
- ตรวจสอบด้วย การประเมินที่เน้น API ซึ่งไม่มีอยู่ในข้อมูลฝึก
- ออกแบบเอกสารให้มี โครงสร้างการค้นหาแบบละเอียด
- เป้าหมายคือ เปลี่ยนจากการให้เหตุผลที่ยึดข้อมูลฝึกล่วงหน้า ไปสู่การให้เหตุผลแบบอิงการค้นคืนข้อมูล และ
AGENTS.md คือวิธีที่ทำสิ่งนี้ได้อย่างเสถียรที่สุด
4 ความคิดเห็น
> เอเจนต์เขียนโค้ด AI มีข้อจำกัดตรงที่ข้อมูลฝึกสอนอิงกับ API เวอร์ชันเก่า จึงจัดการเฟรมเวิร์กล่าสุดได้ไม่แม่นยำนัก
พอใช้ Context7 แล้ว ปัญหาข้างต้นก็พอแก้ได้ในระดับหนึ่งครับ
https://context7.com
เป็นเพราะ context7 ไม่มีประสิทธิภาพ จึงใช้สองวิธีข้างต้น...
ผมเข้าใจว่าคุณต้องการจะสื่ออะไร แต่ถึงอย่างนั้น การไปไล่รวบรวมลิงก์เอกสารล่าสุดของทุกเฟรมเวิร์ก/ไลบรารีที่ใช้อยู่ในตอนนี้ใส่ไว้ใน AGENTS.md หรือ Skills ทุกครั้งทีละอัน ผมว่าการใช้ context7 เป็นตัวช่วยเสริมก็ไม่ได้เป็นตัวเลือกที่แย่อะไรนัก
อีกอย่าง ทั้งในบทความของ GeekNews และต้นฉบับของ Vercel ก็ไม่ได้มีการพูดถึง context7 เลย ผมเลยขอฝากความเห็นไว้ เพราะรู้สึกว่าคุณตีความเนื้อหาไปล่วงหน้าประมาณครึ่งก้าว
(ขอเสริมไว้เป็นข้อมูลว่า เรื่องที่ Skills หรือ AGENTS.md ที่เขียนมาดีสามารถช่วยประหยัดโทเคนได้ เป็นสิ่งที่ทราบกันดีอยู่แล้ว และผมเองก็ทราบเรื่องนี้ดีเช่นกัน)
ความเห็นบน Hacker News
โมเดลไม่ใช่ AGI แค่เป็น เครื่องสร้างข้อความ ที่ถูกฝึกให้ก่อให้เกิดผลอย่างการแก้ไขไฟล์หรือเรียกใช้เครื่องมือได้
โมเดลไม่ได้ "เข้าใจ" สกิลของผู้ใช้แล้วนำไปใช้ แต่สร้างข้อความแบบนั้นได้เพราะ reinforcement learning (RL) จากตัวอย่างที่มนุษย์สร้างและบันทึกการใช้งาน
เหตุผลที่มันไม่ใช้สกิลเสมอไปก็เพราะยังไม่ได้เรียนรู้เคสแบบนั้นมากพอ ถ้าบังคับด้วย RL มากเกินไป โมเดลอาจยิ่งโง่ลงได้
ตอนนี้เรากำลังสะสมบันทึกการใช้สกิล เพื่อให้โมเดลในอนาคตเรียนรู้ได้ดีขึ้นว่าควรใช้สกิลเมื่อไร
AGENTS.md ก็เป็นแค่ context อย่างหนึ่ง โมเดลถูกฝึกให้ทำตาม context มาตั้งแต่แรกแล้ว
frontmatter ของสกิลก็ถูกรวมอยู่ใน context เหมือนกัน ดังนั้นถ้า AGENTS.md ทำงานดีกว่า ก็เป็นเพราะวิธีดึงและใส่ข้อมูลของสกิลต่างกัน
เอเจนต์บางตัวอาจใช้โมเดลเล็กกว่า (เช่น Haiku) เพื่อตัดสินใจว่าจะส่งข้อมูลสกิลอะไรไปให้โมเดลใหญ่กว่า (เช่น Sonnet, Opus)
สุดท้ายประเด็นหลักก็คือข้อมูลอะไรได้เข้าไปอยู่ใน “พรอมป์ต์ดิบ”
มีประโยชน์ แต่ไม่สมบูรณ์แบบ และดูเหมือนเทคโนโลยี GPT เองจะเข้าสู่ช่วง ประสิทธิภาพเริ่มนิ่ง แล้ว
ส่วนที่จะพัฒนาต่อจากนี้คือระบบเสริมอย่างสกิล แต่ฟีเจอร์สกิลที่มีอยู่ตอนนี้ยังสู้การเขียน AGENTS.md ตรง ๆ ไม่ได้
ในการประเมินพบว่า 56% ของกรณี สกิลไม่ถูกเรียกใช้เลยแม้แต่ครั้งเดียว หมายความว่ามีเอกสารอยู่แต่ไม่ถูกใช้ เลยมีมุกว่า “อย่างน้อยก็ผ่าน Turing test นะ..."
ความต่างคือ AI ยอมรับคำสั่งให้แก้โดยไม่มีอีโก้
ยังไม่ถึงระดับ senior developer แต่ทำตามคำสั่งได้ดีกว่า junior
ข้อค้นพบสำคัญคือ compression ของ document pointer ได้ผลดี
ถึงมนุษย์จะอ่านยาก แต่สำหรับ LLM มันเป็นโครงสร้างอ้างอิงที่ตรงและมีประสิทธิภาพ
ต่อไป แทนที่จะใช้ heuristic อย่าง agents.md/claude.md/skills.md ก็มีโอกาสสูงที่จะมีการทำมาตรฐานเป็น compressed index format ที่โหลดตลอดเวลา
ชุดทดสอบ API ก็อาจถูกนำกลับมาใช้ตรวจสอบประสิทธิภาพโค้ดของ LLM ได้ด้วย
ยิ่งการใช้งาน LLM แพร่หลายมากขึ้น ไลบรารีและ API ก็ต้องพัฒนาให้สอดคล้องกัน
ใน Antigravity (= อิงจาก GEMINI.md) มีการตั้งให้ทำตามกฎของ AGENTS.md แต่ถูกเมิน
แต่พรอมป์ต์ที่ว่า “ตรวจดูว่ามี AGENTS.md ในโปรเจกต์หรือไม่” กลับใช้ได้ผลทุกครั้ง
เป็นปรากฏการณ์ที่ชวนทึ่ง คล้ายสมัยที่ “let’s think step by step” ช่วยชักนำ chain of thought
ถ้าใส่ AGENTS.md เข้าไปใน system prompt โดยตรง มันก็จะอยู่ใน context ตลอด
แต่การใส่ทุกสกิลทุกครั้งก็สิ้นเปลือง จึงต้องมีแนวทางแบบ advanced tool use ของ Anthropic ที่ค่อยเรียกเมื่อจำเป็น
ท้ายที่สุดมันคือปัญหาเรื่อง สมดุลระหว่าง context กับต้นทุน ถ้ามีงบพอ การบีบอัดแล้วใส่ไว้ใน AGENTS.md ก็มีประสิทธิภาพดี
เอเจนต์แบบ จัดการ context ของตัวเอง น่าจะพัฒนาไปมากในปีนี้
Claude ทำตามสกิลได้ไม่ค่อยดี
ฉันก็กำลังทำงานในพื้นที่ใกล้เคียงกัน พยายามประเมินว่า โครงสร้าง project scaffolding มีผลต่อผลลัพธ์ของ Claude Code/Opencode อย่างไร
แต่เพราะวิธีทดสอบของ Vercel ไม่ชัดเจน จึงเปรียบเทียบกันได้ยาก
AGENTS.md ไม่ได้ต่างจากสกิลแบบสิ้นเชิง แต่มันคือ รูปแบบที่เรียบง่ายกว่าของสกิล
แก่นสำคัญคือคุณภาพของการออกแบบสกิล หรือก็คือการลด จำนวนขั้นตอน ที่ AI ต้องผ่านเพื่อไปเจอข้อมูลที่ถูกต้องให้น้อยที่สุด
ยิ่งขั้นตอนน้อย ก็ยิ่งลดการสะสมของความผิดพลาด
และเพื่อลดการเปลืองโทเค็น ไฟล์ใหญ่จะใส่ไว้ใน system prompt แค่ครั้งเดียว
เวลาเห็นบล็อกเปรียบเทียบ prompt engineering ฉันมักสงสัยเสมอว่า รันครั้งเดียวหรือรันหลายครั้ง
เพราะ LLM ให้ผลไม่คงที่แม้ใช้อินพุตเดียวกัน
ส่วนใหญ่ให้ความรู้สึกเหมือนเอา ข้อมูลระดับเกร็ดเล็กเกร็ดน้อย มาห่อเป็นงานวิทยาศาสตร์
แต่พอทำ benchmark อย่างตั้งใจกลับมีคนอ่านน้อย ขณะที่ทำแบบหยาบ ๆ แล้วทราฟฟิกบล็อกเพิ่มขึ้น 9 เท่า
ปัญหาคือ โครงสร้างแรงจูงใจที่บิดเบี้ยว
ยังมีวิธีที่อาจดีกว่า AGENTS.md
คือสร้างโฟลเดอร์
.contextแล้วใส่ symbolic link ไปยังเอกสารที่เกี่ยวกับโปรเจกต์ (README, เอกสาร dependency ฯลฯ) เพื่อให้โหลดเข้า context ตลอดเวลาวิธีนี้ทำให้ LLM มีข้อมูลที่ต้องใช้ครบตั้งแต่แรก จึงช่วย เพิ่มประสิทธิภาพและลดต้นทุน ได้
_vendorมีประโยชน์กว่ามากเพราะ LLM วิเคราะห์โค้ดโดยตรงเพื่อเข้าใจการทำงานได้
นี่คือประสบการณ์จากการสร้างเอเจนต์แบบคัสตอมของฉันเอง
พอเปลี่ยนให้ read/write_file เข้าไปอยู่ใน state และแสดงใน system prompt มันทำงานดีขึ้นมาก
ตอนนี้กำลังพยายามพิสูจน์เรื่องนี้ด้วย การประเมินเชิงปริมาณ (evals) ซึ่งจากความรู้สึกแล้วประสิทธิภาพดีมาก