Prompt and context — พรอมต์และบริบท
Prompt และ Context (บริบท) เป็นแนวคิดพื้นฐานในการทำ prompt engineering สำหรับโมเดลภาษาขนาดใหญ่ (LLM)
บริบทเป็นองค์ประกอบที่สำคัญยิ่งของ prompt ซึ่งกำหนดความสามารถของ LLM ในการสร้างคำตอบที่แม่นยำ ตรงประเด็น และเป็นประโยชน์ การทำ prompt engineering ที่มีประสิทธิภาพนั้น โดยส่วนใหญ่คือศิลปะของการรวบรวม กรอง จัดโครงสร้าง และนำเสนอบริบทที่ถูกต้องให้แก่โมเดลในช่วงเวลาที่เหมาะสม ขณะเดียวกันก็ต้องเอาชนะข้อจำกัดของ LLM ในปัจจุบัน
Prompt - คำนิยามของพรอมต์
Prompt — คือชุดข้อมูลอินพุตทั้งหมดที่ส่งให้ LLM เพื่อสร้างคำตอบ ไม่ใช่แค่คำถามหรือคำสั่ง แต่เป็นข้อความที่มีโครงสร้างซึ่งอาจประกอบด้วย:
- คำสั่ง (Instructions): คำชี้แนะตรงๆ ที่บอกโมเดลว่าต้องทำอะไร ในรูปแบบ สไตล์ หรือน้ำเสียงใด
- คำขอหลัก (Query): คำถามโดยตรงของผู้ใช้ หรือคำอธิบายงานหลัก
- บริบท (Context): ข้อมูลเพิ่มเติมที่จำเป็นสำหรับการดำเนินการตามคำขออย่างถูกต้อง
- ตัวอย่าง (Few-shot examples): การสาธิตรูปแบบหรือสไตล์คำตอบที่ต้องการในงานที่คล้ายคลึงกัน
คุณภาพและความสมบูรณ์ของ prompt ส่งผลโดยตรงต่อความตรงประเด็น ความแม่นยำ และประโยชน์ของคำตอบจาก LLM
Context - คำนิยามของบริบท
บริบท ในกรอบของ prompt engineering คือข้อมูลใดก็ตามภายใน prompt ที่ช่วยให้โมเดลเข้าใจงาน ลักษณะเฉพาะของสถานการณ์ หรือความคาดหวังของผู้ใช้ได้ดียิ่งขึ้น แต่ไม่ใช่ส่วนหนึ่งของข้อมูลการฝึกอบรมเดิมของโมเดล บริบทให้รายละเอียดเชิงสถานการณ์ที่จำเป็นสำหรับการสร้างคำตอบที่เหมาะสม
บริบทอาจรวมถึง:
- ประวัติการสนทนาก่อนหน้า (ในแชทบอต)
- ข้อมูลที่ดึงมาจากแหล่งภายนอก (เอกสาร ฐานข้อมูล หน้าเว็บ) — ซึ่งเป็นพื้นฐานของ RAG
- ข้อมูลเกี่ยวกับผู้ใช้ (โปรไฟล์ ความชอบ)
- รายละเอียดเฉพาะของงานหรือสถานการณ์ปัจจุบัน
- ตัวอย่างการทำงานที่คล้ายกัน (ในฐานะส่วนหนึ่งของ few-shot prompting)
สิ่งสำคัญคือต้องแยกแยะบริบทที่ให้ไว้ใน prompt ออกจากความรู้ทั่วไปที่โมเดลได้รับในระหว่างการฝึกอบรมล่วงหน้า prompt engineering มุ่งเน้นที่การให้บริบทเชิงสถานการณ์อย่างมีประสิทธิภาพ
ความสัมพันธ์และอิทธิพล
Prompt และบริบท เป็นแนวคิดพื้นฐานในการทำงานของ transformer ซึ่งกำหนดว่าโมเดลรับรู้ข้อมูลอินพุตอย่างไร และอะไรเป็นพื้นฐานในการสร้างผลลัพธ์ ในเชิงสถาปัตยกรรม transformer ไม่ได้แยกแยะ "prompt" และ "บริบท" โดยเฉพาะ — ทั้งสองเป็นส่วนหนึ่งของลำดับ token อินพุตที่ถูกแปลงเป็น embedding เสริมด้วยข้อมูลตำแหน่ง และถูกประมวลผลร่วมกันโดยเลเยอร์ self-attention
Prompt และบริบทมีความเชื่อมโยงกันอย่างแยกไม่ออก: บริบทเป็นส่วนประกอบหนึ่งของ prompt
- บริบทกำหนดรูปร่าง prompt: วิศวกรคัดสรรและจัดโครงสร้างบริบทที่เกี่ยวข้องเพื่อรวมไว้ใน prompt
- บริบทชี้นำโมเดล: ข้อมูลที่ให้ไว้ช่วยให้ LLM จำกัดพื้นที่คำตอบที่เป็นไปได้ มุ่งเน้นด้านที่เกี่ยวข้อง และหลีกเลี่ยง hallucination
- คุณภาพบริบทกำหนดคุณภาพคำตอบ: บริบทที่ไม่เพียงพอ ไม่เกี่ยวข้อง หรือขัดแย้งกัน นำไปสู่คำตอบที่ไม่แม่นยำ ทั่วไป หรือผิดพลาด บริบทที่แม่นยำและสมบูรณ์จะเพิ่มความจำเพาะและประโยชน์ของการสร้างข้อความ
- อิทธิพลต่อการตีความคำสั่ง: บริบทสามารถชี้แจงหรือเปลี่ยนแปลงการตีความคำสั่งทั่วไปใน prompt ได้
ประสิทธิภาพของ prompt ส่วนใหญ่ขึ้นอยู่กับว่าวิศวกรสามารถรวบรวม กรอง และนำเสนอบริบทที่เกี่ยวข้องให้กับโมเดลได้ดีเพียงใด
ประเภทของบริบท
บริบทสามารถจำแนกได้ตามเกณฑ์ต่างๆ:
จำแนกตามแหล่งที่มา:
- บริบทจากผู้ใช้: ข้อมูลที่ผู้ใช้ป้อนเข้ามาโดยตรง คำถาม หรือคำอธิบายงาน
- จากประวัติการสนทนา: ข้อความก่อนหน้าของผู้ใช้และผู้ช่วย (หน่วยความจำระยะสั้น)
- ที่ดึงมา (Retrieved): ข้อมูลจากแหล่งภายนอก (เอกสาร ฐานข้อมูล เว็บ) โดยใช้ RAG
- จากโปรไฟล์/ฐานความรู้: ข้อมูลระยะยาวเกี่ยวกับผู้ใช้หรือโดเมน
- แบบคงที่/เชิงคำสั่ง: ข้อมูลที่วิศวกรฝังไว้ในเทมเพลต prompt (คำสั่ง ตัวอย่าง การกำหนดบทบาท)
จำแนกตามความเปลี่ยนแปลง:
- บริบทคงที่: ส่วนที่ไม่เปลี่ยนแปลงของ prompt (คำสั่ง นิยาม ตัวอย่าง) กำหนดงานโดยรวม
- บริบทไดนามิก: ข้อมูลที่เปลี่ยนแปลงในแต่ละคำขอ (ข้อมูลผู้ใช้ ผลลัพธ์ RAG เวลาปัจจุบัน) ให้รายละเอียดเฉพาะ
จำแนกตามระยะเวลาการจัดเก็บ (หน่วยความจำ):
- บริบทระยะสั้น: ประวัติเซสชันการสนทนาปัจจุบัน
- บริบทระยะยาว: ข้อมูลที่บันทึกเกี่ยวกับผู้ใช้หรือการโต้ตอบก่อนหน้า ซึ่งต้องการกลไกการจัดเก็บและดึงข้อมูล
การจัดการบริบท
การจัดการบริบทอย่างมีประสิทธิภาพเป็นงานสำคัญของ prompt engineering โดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงข้อจำกัดของ context window ใน LLM วิธีการหลักได้แก่:
- RAG: วิธีที่แพร่หลายที่สุดสำหรับการทำงานกับข้อมูลจำนวนมาก ช่วยให้ค้นหาและรวมเฉพาะส่วนที่เกี่ยวข้องมากที่สุดจากฐานความรู้ขนาดใหญ่เข้าสู่ prompt ได้แบบไดนามิก ต้องมีฐานข้อมูลเวกเตอร์และกลไกการค้นหาที่มีประสิทธิภาพ (แบบ lexical หรือ semantic)
- Chunking (การแบ่งส่วน): การแบ่งเอกสารขนาดใหญ่ออกเป็นส่วนที่เชื่อมโยงกันเชิงความหมายหรือขนาดคงที่ เพื่อทำดัชนีและดึงข้อมูลผ่าน RAG ในภายหลัง
- การสรุป (Summarization): การบีบอัดประวัติการสนทนาที่ยาวหรือเอกสารขนาดใหญ่เพื่อถ่ายทอดความหมายหลักภายใน context window ที่จำกัด
- การจัดการหน่วยความจำ (Memory Management): การใช้กลยุทธ์ต่างๆ เพื่อจัดเก็บและดึงประวัติการสนทนาในแชทบอตและ agent (เช่น ConversationBufferMemory, ConversationSummaryBufferMemory ใน LangChain)
- Sliding Window (หน้าต่างเลื่อน): การเก็บเฉพาะข้อความ N รายการล่าสุดของการสนทนาไว้ในบริบท
- การกรองและจัดลำดับความสำคัญ: การคัดสรรส่วนบริบทที่เกี่ยวข้องมากที่สุดตามความสำคัญ (เช่น โดยใช้คะแนนความเกี่ยวข้องที่ได้จากการค้นหา) ก่อนการประกอบ prompt ขั้นสุดท้าย
บทบาทของบริบทใน Prompt Engineering
- การเพิ่มความตรงประเด็น: บริบทช่วยให้โมเดลสร้างคำตอบที่ตรงกับคำขอและสถานการณ์ของผู้ใช้อย่างแม่นยำ
- การลด Hallucination: การให้ข้อมูลเชิงข้อเท็จจริง (ผ่าน RAG) บังคับให้โมเดลอ้างอิงข้อมูลนั้น แทนที่จะสร้างข้อเท็จจริงขึ้นมาเอง
- การปรับแต่งเฉพาะบุคคล: บริบทเกี่ยวกับผู้ใช้ (ความชอบ ประวัติ) ช่วยให้ปรับแต่งคำตอบได้
- การจัดการสถานะ: ในการสนทนาและกระบวนการหลายขั้นตอน บริบท (ประวัติ) ช่วยให้มีความต่อเนื่องและให้โมเดลรับรู้ขั้นตอนก่อนหน้า
- การเอาชนะข้อจำกัดของความรู้โมเดล: RAG ช่วยให้โมเดลตอบคำถามเกี่ยวกับเหตุการณ์ที่เกิดขึ้นหลังจากการฝึกอบรม หรือเกี่ยวกับข้อมูลเฉพาะ/ข้อมูลส่วนตัวได้
ข้อจำกัด
- ขีดจำกัดของ Context Window: แม้ว่าโมเดลปัจจุบันจะขยายขึ้นถึง 1-2 ล้าน token แต่การประมวลผลในปริมาณดังกล่าวอาจมีค่าใช้จ่ายสูงและช้า ต้องการกลยุทธ์การบีบอัดและคัดสรรที่มีประสิทธิภาพ (RAG, การสรุป)
- การค้นหาบริบทที่เกี่ยวข้อง: ประสิทธิภาพของ RAG ขึ้นอยู่กับคุณภาพของการค้นหา บริบทที่ดึงมาไม่ถูกต้องอาจทำให้โมเดลสับสน ("ขยะเข้า ขยะออก")
- "ช่องว่างแห่งความเฉยเมย" (Valley of Meh): ข้อมูลที่อยู่กลาง prompt ที่ยาวมากอาจถูกโมเดลเพิกเฉย ต้องการการจัดโครงสร้าง prompt (เช่น เทคนิค "แซนด์วิช")
- ความเสี่ยงของ Context Injection: หากบริบทถูกดึงมาจากแหล่งที่ไม่น่าเชื่อถือ (เช่น หน้าเว็บ) อาจมีคำสั่งที่เป็นอันตราย (prompt injection)
เอกสารอ้างอิง
- Lewis, P. et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv:2005.11401.
- Wei, J. et al. (2022). Chain of Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903.
- Wang, X. et al. (2022). Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171.
- Kojima, T. et al. (2022). Large Language Models are Zero-Shot Reasoners. arXiv:2205.11916.
- Chen, S. et al. (2023). Extending Context Window of Large Language Models via Positional Interpolation. arXiv:2306.15595.
- Schick, T. et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. arXiv:2302.04761.
- Besta, M. et al. (2023). Graph of Thoughts: Solving Elaborate Problems with Large Language Models. arXiv:2308.09687.
- Packer, C. et al. (2023). MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560.
- Wang, Y. et al. (2023). Self-Instruct: Aligning Language Models with Self-Generated Instructions. arXiv:2212.10560.
- Sahoo, P. et al. (2024). A Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applications. arXiv:2402.07927.
- Kim, S. H. et al. (2024). Theanine: Revisiting Memory Management in Long-term Conversations with Timeline-augmented Response Generation. arXiv:2406.10996.
- Chen, S. et al. (2024). StruQ: Defending Against Prompt Injection with Structured Queries. arXiv:2402.06363.
- Zhong, M. et al. (2024). Understanding the RoPE Extensions of Long-Context LLMs: An Attention Perspective. arXiv:2406.13282.
- Han, H. et al. (2025). Retrieval-Augmented Generation with Graphs (GraphRAG). arXiv:2501.00309.
- Self-Instruct (2025). Aligning Language Models with Self-Generated Instructions. arXiv:2212.10560.
ดูเพิ่มเติม
- โมเดลภาษาขนาดใหญ่
- Context Window
- ฐานข้อมูลเวกเตอร์
- LangChain