7 เทคนิคเขียน Prompt ให้ AI เข้าใจตรงจุด — จัดการ Context อย่างมือโปร

Context Length หรือ Context Window เปรียบเสมือน "ความจำระยะสั้น" ของ AI ครับ มันคือปริมาณข้อมูลทั้งหมด (ทั้งคำถามของคุณ, คำตอบก่อนหน้าของ AI, และโค้ดที่อ้างอิง) ที่ AI สามารถ "จดจำ" ได้ในบทสนทนาหนึ่งๆ เมื่อบทสนทนายาวเกินไป หรือคุณให้ข้อมูลที่เยอะเกินขีดจำกัดนี้ AI จะเริ่ม "ลืม" สิ่งที่คุยกันไปตอนต้นๆ ทำให้คำตอบที่ได้อาจไม่ตรงประเด็น, สับสน, หรือเพิกเฉยต่อคำสั่งใหม่ๆ ของคุณ
มาดูวิธีการ Prompt ที่ดีเพื่อจัดการกับปัญหานี้กันครับ
หลักการสำคัญ "คิดเหมือนกำลังคุยกับโปรแกรมเมอร์รุ่นน้องที่เก่งมาก... แต่ขี้ลืมสุดๆ"
คุณต้องคอยบอกเขาเสมอว่ากำลังคุยเรื่องอะไร, ให้ข้อมูลที่จำเป็นให้ครบถ้วนในแต่ละครั้ง, และอย่าคาดหวังว่าเขาจะจำรายละเอียดจากเมื่อ 20 ข้อความที่แล้วได้
7 เทคนิคการ Prompt เพื่อควบคุม Context และได้ผลลัพธ์ที่ดีที่สุด
1. ความเฉพาะเจาะจง (Be Specific and Explicit)
นี่คือกฎข้อแรกและสำคัญที่สุด ยิ่งคำสั่งของคุณชัดเจนและมีรายละเอียดครบถ้วนเท่าไหร่ AI ก็ยิ่งต้องการ "เดา" น้อยลงเท่านั้น
-
Prompt ที่ไม่ดี (คลุมเครือ)
"สร้างฟังก์ชันให้หน่อย"
"แก้บั๊กในโค้ดนี้" -
Prompt ที่ดี (เฉพาะเจาะจง)
"ช่วยสร้างฟังก์ชัน Python ชื่อ calculate_shipping_cost ที่รับ parameter 3 ตัว คือ weight (float), distance (int), และ is_express (boolean) โดยให้คืนค่าเป็นราคาส่ง (float)"
"ในโค้ด JavaScript ที่เลือกไว้นี้, ช่วยหาและแก้ไขปัญหา NullPointerException ที่อาจเกิดขึ้นเมื่อตัวแปร user.profile เป็น null"
2. ให้บริบทที่จำเป็นและโฟกัส (Provide Focused Context)
แทนที่จะให้ AI อ่านทั้งโปรเจกต์, ให้คุณเป็นคน "ชี้เป้า" ไปยังส่วนที่เกี่ยวข้อง วิธีนี้ช่วยลดขนาด Context ที่ไม่จำเป็นได้อย่างมหาศาล
-
วิธีให้ Context ใน VS Code
-
เลือกโค้ด (Select Code) ลากคลุมโค้ดส่วนที่ต้องการให้ AI วิเคราะห์ก่อนถามใน Chat
-
ใช้ @workspace เมื่อต้องการให้ AI เข้าใจภาพรวมของโปรเจกต์ แต่ควรตามด้วยคำสั่งที่เฉพาะเจาะจงเพื่อจำกัดขอบเขตการค้นหา
-
ใช้ @file อ้างอิงถึงไฟล์เฉพาะที่เกี่ยวข้องโดยตรง
-
-
Prompt ที่ไม่ดี (บริบทกว้างไป)
@workspace รีวิวโค้ดให้หน่อย (AI จะพยายามอ่านทุกไฟล์และอาจจะสับสน) -
Prompt ที่ดี (โฟกัสบริบท)
@workspace ช่วยอธิบายการทำงานร่วมกันระหว่างไฟล์ auth.controller.jsและuser.model.js หน่อย
"ฉันเลือกฟังก์ชัน getUser ในไฟล์ api.js ไว้แล้ว (@file:src/api.js) ช่วยเพิ่มการจัดการ error handling สำหรับกรณีที่ API error status 500"
3. แบ่งปัญหาที่ซับซ้อนออกเป็นส่วนย่อยๆ (Break Down Complex Problems)
อย่าพยายามสั่งให้ AI สร้างระบบที่ซับซ้อนทั้งหมดใน Prompt เดียว เพราะจะทำให้ Context ยาวเกินไปและผลลัพธ์มักจะออกมาไม่ดี ให้แบ่งงานเป็นชิ้นเล็กๆ ที่จัดการได้
-
โจทย์ สร้างระบบล็อกอิน
-
Prompt ที่ไม่ดี (ทำทีเดียว)
"สร้างหน้าล็อกอินด้วย React ที่มีฟอร์ม username, password, มีการ validate ข้อมูลฝั่ง client และส่ง request ไปที่ endpoint /api/login พร้อมจัดการ state loading และ error" -
Prompt ที่ดี (แบ่งทำทีละขั้น)
-
Prompt 1 "ช่วยสร้าง React component สำหรับ UI ของฟอร์มล็อกอินให้หน่อย มี input สำหรับ username และ password และปุ่ม submit โดยใช้ Tailwind CSS"
-
Prompt 2 (หลังจากได้โค้ด) "โอเค ต่อไปช่วยเพิ่ม state management ด้วย useState สำหรับ username และ password ในฟังก์ชันนี้"
-
Prompt 3 "ต่อไป เพิ่มฟังก์ชัน handleSubmit ที่จะทำงานเมื่อกดปุ่ม submit โดยให้ log ค่า username กับ password ออกมาที่ console ก่อน"
-
Prompt 4 "เยี่ยมมาก! ตอนนี้แก้ handleSubmit ให้ส่ง POST request ไปที่ /api/login โดยใช้ axios"
-
4. ใช้เทคนิค "Few-Shot Prompting" (ให้ตัวอย่างชี้นำ)
หากคุณต้องการผลลัพธ์ในรูปแบบ (Format) ที่เฉพาะเจาะจง ให้คุณ "สอน" AI ด้วยการให้ตัวอย่าง Input และ Output ที่คุณต้องการ
-
Prompt ที่ดี (ให้ตัวอย่าง)
"ฉันมีข้อมูลแบบนี้
[{ "id": 1, "name": "Product A", "tags": "tech,gadget" }]ช่วยแปลงให้เป็นรูปแบบนี้หน่อย
[{ "productId": 1, "productName": "Product A", "categories": ["tech", "gadget"] }]ตอนนี้ช่วยแปลงข้อมูลชุดนี้ให้หน่อย
Generated json[{ "id": 2, "name": "Book B", "tags": "reading,fiction,novel" }] ```"
5. กำหนดบทบาทและข้อจำกัด (Define Persona and Constraints)
บอกให้ AI รู้ว่าคุณต้องการให้มันสวมบทบาทอะไร และมีข้อจำกัดอะไรบ้าง จะช่วยให้คำตอบตรงตามสไตล์ที่คุณต้องการ
-
Prompt ที่ดี (กำหนดบทบาท)
"ในฐานะที่คุณเป็น Senior Go Developer ที่เชี่ยวชาญด้าน Concurrency, ช่วยรีวิวโค้ด Go ที่ฉันเลือกไว้นี้ และแนะนำวิธีปรับปรุงการใช้ Goroutines ให้มีประสิทธิภาพมากขึ้น"
"อธิบายโค้ดนี้เหมือนฉันเป็นนักเรียนที่เพิ่งเริ่มเขียนโปรแกรม, หลีกเลี่ยงศัพท์เทคนิคที่ซับซ้อน"
6. ถามต่อและปรับปรุง (Iterate and Refine)
อย่าคาดหวังว่าคำตอบแรกจะสมบูรณ์แบบ 100% ให้ใช้บทสนทนาเพื่อค่อยๆ ปรับแก้ผลลัพธ์ให้ดีขึ้น
-
ตัวอย่างการถามต่อ
"โค้ดที่ให้มาทำงานได้ดี, แต่ช่วยเพิ่ม comment อธิบายลอจิกในส่วนที่ซับซ้อนให้หน่อย"
"ดีมาก! แต่จะดีกว่านี้ถ้าใช้ async/await แทน Promise.then()"
"โค้ดนี้ยังขาด error handling, ช่วยเพิ่ม try-catch block ให้หน่อย"
7. รู้ว่าเมื่อไหร่ควร "เริ่มต้นใหม่" (Know When to Reset)
ถ้าคุณรู้สึกว่า AI เริ่มตอบไม่ตรงคำถาม, วกวน, หรือเพิกเฉยต่อคำสั่งใหม่ๆ แสดงว่า Context ของมันอาจจะ "สกปรก" หรือเต็มแล้ว วิธีที่ดีที่สุดคือการเริ่มต้นใหม่
-
วิธี Reset
-
คลิกปุ่ม "Clear Chat" หรือ "New Chat" ในหน้าต่าง Copilot Chat
-
การทำแบบนี้จะล้าง "ความจำระยะสั้น" ทั้งหมดของ AI และเริ่มต้นบทสนทนาใหม่ด้วย Context ที่ว่างเปล่า
-
สรุปตาราง ปัญหาที่พบบ่อยและวิธีแก้ด้วยการ Prompt
ปัญหา | สาเหตุ (เกี่ยวกับ Context) | วิธีแก้ด้วยการ Prompt |
AI ตอบไม่ตรงคำถาม | Context เดิมทำให้ AI สับสน หรือคำถามคลุมเครือเกินไป | ทำให้เฉพาะเจาะจง และ เริ่มต้นแชทใหม่ หากจำเป็น |
AI ลืมคำสั่งก่อนหน้า | บทสนทนายาวเกิน Context Window | แบ่งปัญหาย่อย แล้วถามทีละขั้น, สรุปใจความสำคัญ ใน Prompt ใหม่ |
โค้ดที่ได้ไม่สมบูรณ์/ผิด | AI ขาดบริบทที่สำคัญ (ไม่รู้ว่าโค้ดส่วนอื่นหน้าตาเป็นยังไง) | ใช้ @file หรือ เลือกโค้ด ที่เกี่ยวข้องเพื่อให้บริบทที่โฟกัส |
AI สร้างโค้ดไม่ตรงตามสไตล์ | AI ไม่รู้ว่าคุณต้องการสไตล์แบบไหน (เช่น performance, อ่านง่าย) | กำหนดบทบาท (e.g., "Act as a senior dev...") และ ให้ตัวอย่าง (Few-shot) |
AI ใช้เวลานานในการตอบ | คุณให้บริบทที่กว้างเกินไป (e.g., @workspace กับโปรเจกต์ใหญ่ๆ) | จำกัดขอบเขต ให้แคบลง (e.g., "in this function...", "in this file...") |
การฝึกฝนทักษะการ Prompt ก็เหมือนการเรียนรู้ภาษาโปรแกรมมิ่งใหม่ๆ ยิ่งคุณฝึกใช้บ่อยๆ คุณจะยิ่งเข้าใจ "วิธีคิด" ของ AI และสามารถดึงศักยภาพของมันออกมาใช้ได้อย่างเต็มที่ครับ