- นี่คือสรุปคำแปลของ Effective context engineering for AI agents ที่ Anthropic เผยแพร่เมื่อวันที่ 29 กันยายน โดยในบทความบล็อกได้พยายามคงรูปภาพและลิงก์จากต้นฉบับไว้ให้มากที่สุด
Prompt Engineering vs Context Engineering
- Prompt engineering คือการทำให้ single query ทำงานได้ดีขึ้น
- ส่วน context engineering (โดยเฉพาะสำหรับ agent) คือการคัดสรรเฉพาะสิ่งที่จำเป็นจริง ๆ จาก context ที่หลากหลาย
ทำไม Context Engineering จึงสำคัญต่อการสร้าง Agent
- ปัจจุบัน agent ถูกพัฒนาให้ใช้งาน "ได้นานขึ้น และใช้เครื่องมือได้มากขึ้น"
- เมื่อเป็นเช่นนั้น context ก็ย่อมยาวขึ้น และ LLM ก็คล้ายมนุษย์ตรงที่เมื่อ context อัดแน่นไปด้วยข้อมูลจำนวนมาก จะสูญเสียความสามารถในการโฟกัสและดึงข้อมูลที่ต้องการออกมาได้ยากขึ้น
- ดังนั้นการควบคุม context อย่างมีประสิทธิภาพจึงสำคัญมากต่อการพัฒนา agent
กายวิภาคของ Context ที่มีประสิทธิภาพ
Context engineering ที่ดี หมายถึงการค้นหา ชุดโทเค็นสัญญาณสูงที่เล็กที่สุดเท่าที่เป็นไปได้ ซึ่งเพิ่มโอกาสให้ได้ผลลัพธ์ที่ต้องการสูงสุด
> Smallest possible set of high-signal tokens that maximize the likelihood of some desired outcome
1) System Prompt
- System prompt ควรเขียนด้วยภาษาที่ชัดเจน เรียบง่าย และตรงไปตรงมา ในระดับที่พอดี ถ้าเฉพาะเจาะจงเกินไปจะรองรับกรณีที่หลากหลายไม่ได้ แต่ถ้านามธรรมเกินไป LLM ก็ต้องคาดเดาเองมากเกินไป
- ควรเริ่มจากคำอธิบายขั้นต่ำเกี่ยวกับพฤติกรรมที่คาดหวัง แล้วค่อยปรับปรุงด้วยการเพิ่มคำสั่งและตัวอย่างที่ชัดเจนเฉพาะในกรณีที่ frontier model ยังล้มเหลว
- อาจใช้ XML หรือวิธีคล้าย Markdown เพื่อแบ่ง section แต่ไม่จำเป็นต้องเคร่งครัดกับไวยากรณ์มากเกินไป
2) Tools
- Tools ควรส่งคืนข้อมูลอย่างมีประสิทธิภาพด้านโทเค็น และในขณะเดียวกันก็ควรชี้นำให้ agent ทำงานอย่างมีประสิทธิภาพด้านโทเค็นด้วย ควรอยู่ในรูปแบบที่ LLM เข้าใจได้ดี และมีความซ้ำซ้อนของความสามารถระหว่างกันให้น้อยที่สุด
- ความผิดพลาดที่พบบ่อยที่สุดคือเครื่องมือหนึ่งครอบคลุมความสามารถมากเกินไป หรือทำให้ LLM ตัดสินใจได้ยากว่าควรใช้เครื่องมือใด หากวิศวกรมนุษย์ยังตัดสินใจได้ยากว่าเมื่อใดควรใช้อะไร ก็ย่อมยากสำหรับ AI agent เช่นกัน
- การทำ few-shot prompting โดยยกตัวอย่างให้ดูนั้นแนะนำอย่างยิ่งเสมอ แต่การใส่ edge case มากเกินไปจะลดความเป็นสากล ควรใส่ตัวอย่างที่หลากหลายซึ่งแสดงพฤติกรรมที่คาดหวังและถูกคัดมาอย่างรอบคอบ
การดึง Context และการค้นหาแบบ Agentic
- Agent คือ สิ่งที่ทำงานเป็นลูปและรันเครื่องมืออย่างอิสระเพื่อบรรลุเป้าหมาย ยิ่งโมเดลมีความสามารถมากขึ้น ก็ยิ่งมอบสิทธิ์และความเป็นอิสระให้ agent ได้มากขึ้น
- เมื่อแนวทางแบบ agentic พัฒนาขึ้น กลยุทธ์ที่เห็นมากขึ้นเรื่อย ๆ คือการให้ context แบบ JIT (Just in Time) ซึ่ง Claude Code ใช้แนวทางนี้ได้ดีมาก เช่น ดูจาก path ของไฟล์และลิงก์ใน prompt แล้วดึงสิ่งนั้นมา ณ จุดนั้นทันที
- การเรียกใช้ context ที่ดีแบบ JIT ต้องเริ่มจากการจัดเก็บข้อมูลให้มีโครงสร้างที่ดีตั้งแต่แรก ซึ่งรวมถึงการคิดด้วยว่าจะเก็บ metadata ที่ช่วยการดึงข้อมูลไว้อย่างไร ไม่ว่าจะเป็นโครงสร้างโฟลเดอร์ naming convention หรือ timestamp รวมถึงสัญญาณที่สำคัญและมีความหมายสำหรับมนุษย์ สิ่งเหล่านี้ก็ช่วยให้ agent ใช้ข้อมูลได้ดีขึ้นมากเช่นกัน
Context Engineering สำหรับงานระยะยาว (long-horizon tasks)
งานที่ใช้เวลานานมักเกิน context window ของ LLM ได้อย่างง่ายดาย ดังนั้นการทำให้ agent รักษา context ที่ดีไว้ได้และค่อย ๆ เดินหน้าไปสู่เป้าหมายอย่างต่อเนื่องจึงเป็นเรื่องสำคัญมาก
สามารถใช้เทคนิคหลักได้ 3 แบบตามลักษณะของงาน
- การบีบอัด เหมาะกับงานที่ต้องมีการสื่อสารสองทางอย่างกว้างขวาง และช่วยรักษากระแสของบทสนทนา
- การจดบันทึกแบบมีโครงสร้าง เหมาะกับการพัฒนาแบบ iterative สำหรับงานที่มี milestone ชัดเจน
- สถาปัตยกรรม sub-agent เหมาะกับงานวิจัยและการวิเคราะห์ที่ซับซ้อน ซึ่งการสำรวจแบบขนานให้ผลดี
1) การบีบอัด
- เมื่อใกล้ถึงข้อจำกัดของ context window ให้สรุปเนื้อหาสำคัญแล้วส่งต่อไปยังหน้าต่างใหม่ ใน Claude Code จะส่ง message history ไปเพื่อให้สรุป เช่น การตัดสินใจด้านสถาปัตยกรรม บั๊กที่ยังไม่ถูกแก้ หรือรายละเอียดการ implement
- หัวใจของการบีบอัดคือจะเก็บอะไรไว้และจะทิ้งอะไร สิ่งที่ทิ้งได้ง่ายที่สุดมักเป็นการเรียกใช้เครื่องมือและผลลัพธ์ของมัน หากอยู่ใน message history แล้ว ก็มักแทบไม่จำเป็นต้องเก็บไว้อีก
- ตั้งแต่ Sonnet 4.5 เป็นต้นมา memory tool ทำให้ทำ Context Editing ได้: https://www.anthropic.com/news/context-management
2) การจดบันทึกแบบมีโครงสร้าง
- เรียกอีกอย่างว่า agentic memory เป็นเทคนิคที่เขียนโน้ตไว้นอก context window เป็นระยะ ๆ (เช่น ใน file system) แล้วค่อยดึงกลับมาใช้ภายหลัง
- เช่นเดียวกัน ตั้งแต่ Sonnet 4.5 เป็นต้นมา การใช้เทคนิคนี้ง่ายขึ้นด้วย memory tool
3) สถาปัตยกรรม Sub-agent
- Agent หลักทำหน้าที่วางแผนและประสานงานในภาพรวม ขณะที่ sub-agent จะทำงานเชิงเทคนิคเชิงลึก หรือใช้เครื่องมือเพื่อค้นหาข้อมูลที่เกี่ยวข้อง
- ดูบทความ เราสร้างระบบวิจัยแบบมัลติเอเจนต์อย่างไร ประกอบ
บทสรุป
- เมื่อโมเดลมีความสามารถมากขึ้น งานสำคัญจึงไม่ใช่แค่การเขียน prompt ให้ดีเท่านั้น แต่ยังรวมถึงการคัดเลือกด้วยว่าในแต่ละขั้นตอนข้อมูลใดควรได้อยู่ภายใน "งบประมาณด้านความสนใจ"
- ไม่ว่าจะเป็นการทำ compression สำหรับงานระยะยาว การออกแบบเครื่องมือที่มีประสิทธิภาพด้านโทเค็น หรือการทำให้ agent สำรวจสภาพแวดล้อมได้ในเวลาที่เหมาะสม หลักชี้นำเหล่านี้ยังคงเหมือนเดิม: ค้นหาชุดโทเค็นสัญญาณสูงที่เล็กที่สุด ซึ่งเพิ่มโอกาสให้ได้ผลลัพธ์ที่ต้องการสูงสุด
- แม้เทคนิคในบทความนี้จะพัฒนาอย่างต่อเนื่องไปพร้อมกับการปรับปรุงโมเดลและความเป็นอิสระที่มากขึ้น แต่มุมมองที่ว่า "context คือทรัพยากรที่มีค่าและมีจำกัด" ก็ยังคงเป็นหลักสำคัญในการสร้าง agent ที่เชื่อถือได้และมีประสิทธิภาพ
- หากต้องการรายละเอียดเพิ่มเติม ดูได้จาก Memory and Context Management Cookbook
ยังไม่มีความคิดเห็น