Context คือทุกอย่าง: ส่งข้อมูลโปรเจกต์ให้ AI อย่างพอดี

เคยไหมที่ขอให้ AI เพิ่มฟีเจอร์เล็ก ๆ แล้วได้โค้ดที่เรียก method ที่ไม่มีในโปรเจกต์ ใช้ชื่อคอลัมน์ผิด หรือเขียนแบบ Laravel ทั้งที่เราใช้ Yii2 ปัญหานี้ส่วนใหญ่ไม่ได้มาจาก AI "โง่" แต่มาจาก AI "ไม่รู้" เพราะเราไม่ได้ให้บริบทที่พอ ในทางกลับกัน การโยนทั้งโปรเจกต์ใส่ AI ก็ไม่ได้ช่วยเสมอไป บทความนี้จะอธิบายว่าทำไม AI เดาผิดเมื่อขาดบริบท ควรแนบไฟล์ไหน วิธีเขียนไฟล์แนวทางโปรเจกต์อย่าง AGENTS.md หรือ CLAUDE.md และวิธีตัดสิ่งที่ไม่จำเป็นออกเพื่อให้ได้คำตอบที่แม่นขึ้น
ทำไม AI เดาผิดเมื่อขาดบริบท
LLM ทำงานโดยสร้างข้อความที่ "น่าจะเป็นที่สุด" จากสิ่งที่อยู่ใน context window ตอนนั้น บวกกับรูปแบบที่เรียนรู้มาจากข้อมูลฝึกจำนวนมหาศาล มันไม่ได้มองเห็นโปรเจกต์ของเราเว้นแต่เราส่งให้ หรือเครื่องมือ agent อ่านไฟล์ให้
เมื่อข้อมูลไม่พอ AI จะเติมช่องว่างด้วยสิ่งที่พบบ่อยในโลกภายนอก ตัวอย่างเช่น
- เราขอ "เพิ่มฟิลด์เบอร์โทรใน User" AI ไม่เห็นตาราง
userจริง จึงเดาชื่อคอลัมน์เป็นphoneทั้งที่ของเราใช้mobile_no - AI ไม่รู้ว่าเราใช้ RBAC ผ่าน
authManagerจึงเขียนเช็กสิทธิ์แบบif ($user->role == 'admin') - AI ไม่รู้ว่าทีมใช้ PostgreSQL จึงใช้ backtick หรือฟังก์ชันเฉพาะ MySQL ใน SQL
สิ่งที่น่ากลัวคือ AI ไม่บอกว่ามัน "เดา" โค้ดจะดูมั่นใจเหมือนรู้จริง เราจึงต้องให้บริบทที่จำเป็นตั้งแต่ต้น
ไฟล์ไหนควรแนบ ไฟล์ไหนไม่ควร
หลักง่าย ๆ คือ แนบสิ่งที่ AI ต้อง "อ้างอิง" เพื่อเขียนโค้ดให้ถูก ไม่ใช่ทุกอย่างที่เกี่ยวข้องแบบหลวม ๆ
| ควรแนบ | เหตุผล |
|---|---|
| ไฟล์ที่จะถูกแก้ | AI ต้องเห็นโค้ดเดิมจึงแก้ได้ตรงจุด |
| Model / migration ของตารางที่เกี่ยวข้อง | ชื่อคอลัมน์ ชนิดข้อมูล relation และ rules |
| Interface หรือ class ที่โค้ดใหม่ต้องเรียก | ป้องกันการแต่ง method ที่ไม่มีอยู่ |
| ตัวอย่างโค้ดแบบเดียวกันที่มีอยู่แล้ว | ให้ AI เลียนแบบ style ของทีม |
| Error message และ stack trace เต็ม | สำหรับงาน debug |
composer.json (ส่วน require) | บอกเวอร์ชัน framework และ library |
สิ่งที่ไม่ควรแนบ
- ไฟล์
.env,*-local.php, key, certificate หรือ dump ฐานข้อมูลจริง - ข้อมูลส่วนบุคคลของลูกค้า ถ้าต้องใช้ตัวอย่างข้อมูล ให้สร้างข้อมูลปลอม
- โฟลเดอร์
vendor/,node_modules/,runtime/, ไฟล์ build และ log ขนาดใหญ่ - ไฟล์ที่ไม่เกี่ยวกับงาน ซึ่งทำให้ AI สับสนว่าควรโฟกัสตรงไหน
ไฟล์แนวทางโปรเจกต์: AGENTS.md / CLAUDE.md
เครื่องมือ AI coding หลายตัวรองรับการอ่านไฟล์คำแนะนำประจำโปรเจกต์โดยอัตโนมัติ ชื่อไฟล์ขึ้นกับเครื่องมือ เช่น AGENTS.md หรือ CLAUDE.md ควรตรวจเอกสารของเครื่องมือที่ใช้ว่ารองรับชื่อไหน ไฟล์นี้ทำหน้าที่เหมือน "คู่มือพนักงานใหม่" ที่ AI อ่านก่อนเริ่มงานทุกครั้ง ทำให้เราไม่ต้องพิมพ์บริบทซ้ำทุก prompt
ตัวอย่างสำหรับโปรเจกต์ Yii2
# Project Guide
## Stack
- PHP 8.x, Yii2 advanced template (frontend, backend, console, common)
- PostgreSQL ผ่าน yii\db\Connection
- เทสต์ด้วย Codeception: vendor/bin/codecept run
## Conventions
- Business logic อยู่ใน common/services ไม่ใส่ใน controller
- Query ใช้ ActiveRecord หรือ Query Builder เท่านั้น ห้ามต่อ string เป็น SQL
- Output ใน view ต้องผ่าน Html::encode() ยกเว้นผ่าน HtmlPurifier แล้ว
- สิทธิ์ใช้ RBAC (Yii::$app->user->can()) ไม่เช็ก role ด้วย if
- ชื่อตารางเป็น snake_case เอกพจน์ เช่น order, order_item
## Commands
- รันเทสต์: vendor/bin/codecept run unit
- migration: php yii migrate (อย่ารันเองโดยไม่ถาม)
## ห้าม
- ห้ามอ่านหรือแก้ไฟล์ .env และ */config/*-local.php
- ห้ามเพิ่ม dependency โดยไม่ถาม
- ห้ามแก้ไฟล์ใน vendor/
หลักการเขียนไฟล์นี้ให้ได้ผล
- สั้นและเจาะจง เขียนเฉพาะสิ่งที่ AI ไม่สามารถรู้เองจากโค้ด เช่น กติกาทีม คำสั่งรันเทสต์ ข้อห้าม
- เป็นคำสั่งที่ตรวจได้ "ใช้ Html::encode" ดีกว่า "เขียนโค้ดให้ปลอดภัย"
- อัปเดตเมื่อเจอปัญหาซ้ำ ถ้า AI ทำผิดแบบเดิมสองครั้ง ให้เพิ่มกติกาลงไฟล์นี้
- commit เข้า repository ให้ทั้งทีมและทุกเครื่องมือใช้มาตรฐานเดียวกัน
- ไม่ใส่ secret เพราะไฟล์นี้จะถูกส่งเข้า AI ทุกครั้ง
ขนาด context: มากไปก็ไม่ดี
โมเดลแต่ละตัวมีขีดจำกัดว่ารับข้อความได้เท่าไรในหนึ่งครั้ง เรียกว่า context window วัดเป็น token ถึงแม้หลายโมเดลจะรับได้มาก แต่การใส่ข้อมูลเยอะเกินมีผลเสีย
- ความแม่นยำลดลง ข้อมูลสำคัญถูกกลบด้วยข้อมูลที่ไม่เกี่ยว AI อาจหยิบตัวอย่างผิดไฟล์มาใช้
- ช้าขึ้นและแพงขึ้น ทุก token ที่ส่งมีค่าใช้จ่ายและเวลาประมวลผล
- บทสนทนายาวเกินไปทำให้ AI "ลืม" กติกาที่บอกไว้ตอนต้น เมื่อ session ยาวมาก เครื่องมือบางตัวจะสรุปหรือตัดข้อความเก่าทิ้ง
ข้อควรรู้สำหรับคนไทย: ข้อความภาษาไทยมักใช้จำนวน token มากกว่าข้อความภาษาอังกฤษที่มีความหมายเท่ากัน การเขียนคำสั่งเทคนิคเป็นภาษาอังกฤษสั้น ๆ ปนไทยจึงช่วยประหยัดได้บ้าง แต่ความชัดเจนสำคัญกว่าการประหยัด
เทคนิคตัดสิ่งไม่จำเป็น
- ส่งเฉพาะฟังก์ชันที่เกี่ยว ไม่ต้องส่ง controller ทั้งไฟล์ 800 บรรทัด ถ้างานแก้แค่ action เดียว แต่บอกว่ามี method อื่นอยู่ด้วย
- ใช้ schema แทนข้อมูล ส่งโครงสร้างตาราง (
\d orderใน psql หรือ migration) แทนข้อมูลจริงหลายพันแถว - ตัด log ให้เหลือส่วนสำคัญ error message, stack trace ส่วนที่เป็นโค้ดของเรา และ request ที่ทำให้เกิดปัญหา
- เริ่ม session ใหม่เมื่อเปลี่ยนเรื่อง ไม่ลากบทสนทนาเรื่อง A ยาว ๆ แล้วมาทำเรื่อง B ต่อ
- สรุปก่อนเริ่มใหม่ ถ้างานยาว ให้ AI สรุปสิ่งที่ตัดสินใจไปแล้วเป็นข้อ ๆ แล้วใช้สรุปนั้นเปิด session ใหม่
ตัวอย่างดึง schema จาก PostgreSQL แบบไม่มีข้อมูลจริง เพื่อแนบให้ AI
pg_dump --schema-only --no-owner --table=public.order --table=public.order_item mydb > schema.sql
ให้ agent หาบริบทเอง แต่ต้องคุม
เครื่องมือแบบ agent สามารถค้นและเปิดไฟล์ในโปรเจกต์ได้เอง ฟังดูสะดวก แต่ไม่ได้แปลว่าเราไม่ต้องคิดเรื่องบริบท agent อาจอ่านไฟล์ที่ไม่เกี่ยวจนเปลือง context หรือเลือกตัวอย่างโค้ดเก่าที่ทีมเลิกใช้แล้วมาเลียนแบบ วิธีคุมที่ได้ผลคือ
- ชี้จุดเริ่มต้นให้ เช่น "เริ่มอ่านจาก
backend/controllers/OrderController.phpและcommon/models/Order.php" - บอกตัวอย่างที่ต้องการให้เลียนแบบ เช่น "ใช้รูปแบบเดียวกับ
InvoiceService" - บอกสิ่งที่ไม่ต้องอ่าน เช่น โฟลเดอร์โมดูลเก่าที่รอลบ
- ให้ agent สรุปก่อนว่าเข้าใจโครงสร้างอย่างไร แล้วเราแก้ความเข้าใจผิดก่อนเริ่มเขียนโค้ด
ขั้นตอนสุดท้ายนี้สำคัญมาก การแก้ความเข้าใจผิดตั้งแต่ระดับแผนเสียเวลาไม่กี่วินาที แต่ถ้าปล่อยให้ไปเจอในโค้ดที่เขียนเสร็จแล้ว อาจต้องรื้อทั้งชุด
เช็กลิสต์ก่อนส่ง prompt
- AI รู้ stack และเวอร์ชันหรือยัง (จากไฟล์แนวทางหรือใน prompt)
- แนบไฟล์ที่จะแก้ และ model/schema ที่เกี่ยวข้องแล้วหรือยัง
- มีตัวอย่างโค้ดของทีมให้ AI เลียนแบบหรือไม่
- ตรวจแล้วว่าไม่มี secret หรือข้อมูลส่วนบุคคลติดไป
- ตัดไฟล์และ log ที่ไม่เกี่ยวออกแล้ว
- บทสนทนานี้ยังอยู่ในเรื่องเดียวกัน ไม่ยาวจนควรเริ่มใหม่
สรุป
- AI เห็นเฉพาะสิ่งที่อยู่ใน context เมื่อข้อมูลขาด มันจะเดาจากสิ่งที่พบบ่อยและไม่บอกว่าเดา
- แนบไฟล์ที่จะแก้ schema interface และตัวอย่างโค้ดของทีม ไม่แนบ secret และข้อมูลจริง
- ไฟล์แนวทางโปรเจกต์อย่าง AGENTS.md หรือ CLAUDE.md ช่วยให้ไม่ต้องพิมพ์บริบทซ้ำ และควรอัปเดตเมื่อเจอปัญหาซ้ำ
- context มากเกินไปทำให้แม่นยำน้อยลง ช้าลง และแพงขึ้น
- เริ่ม session ใหม่เมื่อเปลี่ยนเรื่อง และใช้สรุปแทนประวัติแชตยาว ๆ
ลองทำ
สร้างไฟล์แนวทางโปรเจกต์ให้โปรเจกต์ที่คุณทำอยู่
- เขียนหัวข้อ Stack, Conventions, Commands และ ห้าม อย่างละ 3–5 บรรทัด ความยาวรวมไม่เกินหนึ่งหน้าจอ
- ขอให้ AI ทำงานเล็ก ๆ หนึ่งงานโดยยังไม่มีไฟล์นี้ แล้วจดว่ามันเดาผิดอะไรบ้าง
- ใส่ไฟล์แนวทางแล้วสั่งงานเดิมใน session ใหม่ เทียบผล
- เพิ่มกติกาสำหรับข้อผิดพลาดที่ยังเหลืออยู่ แล้ว commit ไฟล์เข้า repository
ความคิดเห็น (0)
ยังไม่มีความคิดเห็น — เริ่มคุยเป็นคนแรก ถามสิ่งที่สงสัย หรือแชร์ประสบการณ์ของคุณ