• นี่คือสรุปคำแปลของ 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

บทสรุป

  • เมื่อโมเดลมีความสามารถมากขึ้น งานสำคัญจึงไม่ใช่แค่การเขียน prompt ให้ดีเท่านั้น แต่ยังรวมถึงการคัดเลือกด้วยว่าในแต่ละขั้นตอนข้อมูลใดควรได้อยู่ภายใน "งบประมาณด้านความสนใจ"
  • ไม่ว่าจะเป็นการทำ compression สำหรับงานระยะยาว การออกแบบเครื่องมือที่มีประสิทธิภาพด้านโทเค็น หรือการทำให้ agent สำรวจสภาพแวดล้อมได้ในเวลาที่เหมาะสม หลักชี้นำเหล่านี้ยังคงเหมือนเดิม: ค้นหาชุดโทเค็นสัญญาณสูงที่เล็กที่สุด ซึ่งเพิ่มโอกาสให้ได้ผลลัพธ์ที่ต้องการสูงสุด
  • แม้เทคนิคในบทความนี้จะพัฒนาอย่างต่อเนื่องไปพร้อมกับการปรับปรุงโมเดลและความเป็นอิสระที่มากขึ้น แต่มุมมองที่ว่า "context คือทรัพยากรที่มีค่าและมีจำกัด" ก็ยังคงเป็นหลักสำคัญในการสร้าง agent ที่เชื่อถือได้และมีประสิทธิภาพ
  • หากต้องการรายละเอียดเพิ่มเติม ดูได้จาก Memory and Context Management Cookbook

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น