เขียนไว้ก่อน

  • ขีดจำกัดของตัวแทน AI ไม่ได้ขึ้นอยู่กับขนาดของโมเดลเพียงอย่างเดียว แต่ยังขึ้นอยู่กับ “ทักษะการจัดการบริบท” ด้วย มันเหมือนกับการตั้งค่าหน่วยความจำสำหรับ CPU ซึ่งกำหนดความลึกและประสิทธิภาพในการคิดของตัวแทน
  • หน้าต่างบริบทไม่ใช่ถังขยะ: การเกินข้อมูลจะทำให้เกิด “การปนเปื้อน” รบกวนและทำให้การตัดสินของ AI สับสน ความแม่นยำสำคัญมากกว่าปริมาณข้อมูลมหาศาล
  • ผู้เชี่ยวชาญใช้การจัดการ AI บริบทด้วยคำว่า “เขียน คัดเลือก บีบอัด และแยกแยะ” เพื่อใช้หน่วยความจำที่มีอยู่ให้เป็นประโยชน์ที่สุด ทำให้ต้นทุนลดลงและประสิทธิภาพเพิ่มขึ้น
  • การแข่งขันในอนาคตคือการแข่งขันด้านประสิทธิภาพของระบบ การแยกงานด้วยโครงสร้างตัวแทนหลายตัว ให้แต่ละตัวแทนทำงานได้อย่างเต็มที่ในหน้าต่างเล็กของตน เป็นกุญแจสำคัญในการสร้างระบบงานที่ซับซ้อน

สรุปแกนหลัก

ตัวแทน (Agent) ที่ทำภารกิจไม่สามารถหลีกเลี่ยงการใช้บริบท (Context) ได้ โดย “การจัดการบริบท” เป็นศิลปะและวิทยาศาสตร์ในการเติมข้อมูลที่เหมาะสมลงในหน้าต่างบริบทของตัวแทนในทุกขั้นตอนของการทำภารกิจ บทความนี้จะสรุปกลยุทธ์การจัดการบริบทที่ตัวแทนหลัก ๆ ใช้ในปัจจุบันให้อยู่ในรูปแบบที่เข้าใจง่าย

Context Engineering

การจัดการบริบท (Context Engineering)

ตามที่ Andrej Karpathy ได้กล่าวไว้ โมเดลภาษาใหญ่ (LLM) เปรียบเสมือน “ระบบปฏิบัติการรูปแบบใหม่” LLM คือ CPU และ “หน้าต่างบริบท” ของมันเปรียบเสมือน RAM เป็นหน่วยความจำทำงานของโมเดล ซึ่งเช่นเดียวกับที่ RAM มีขนาดจำกัด หน้าต่างบริบทของ LLM ก็มีการจำกัดเมื่อจัดการกับแหล่งข้อมูลต่างๆ หนึ่งในงานที่สำคัญที่สุดของระบบปฏิบัติการคือการจัดการการใช้ RAM ของ CPU อย่างมีประสิทธิภาพ และ “การจัดการบริบท” ก็มีบทบาทที่คล้ายกัน Karpathy สรุปไว้ได้อย่างเหมาะสมว่า:

การจัดการบริบทคือ“…… ศิลปะและวิทยาศาสตร์ในการเติมข้อมูลบริบทที่แม่นยำสำหรับการคำนวณถัดไป”

Context Engineering

เมื่อสร้างโปรแกรม LLM เราต้องจัดการกับบริบทประเภทไหนกันบ้าง? แนวคิดเกี่ยวกับการจัดการบริบทนี้ครอบคลุมประเภทบริบทที่แตกต่างกันดังนี้:

  • • คำสั่ง (Instructions) – คำแนะนำ, ความทรงจำ, ตัวอย่างน้อย, คำอธิบายเครื่องมือ ฯลฯ
  • • ความรู้ (Knowledge) – ข้อเท็จจริง, ความทรงจำ ฯลฯ
  • • เครื่องมือ (Tools) – ข้อมูลนำกลับจากการเรียกเครื่องมือ

การจัดการบริบทสำหรับตัวแทน

ในปีนี้ ด้วยความสามารถที่เพิ่มขึ้นของ LLM ในด้านการอนุมานและการเรียกเครื่องมือ ความสนใจในตัวแทนก็เพิ่มขึ้นอย่างมาก ตัวแทนใช้การเรียก LLM และเครื่องมือสลับกันเพื่อทำภารกิจ โดยเฉพาะอย่างยิ่งในการจัดการกับภารกิจที่ซับซ้อนที่ต้องใช้เวลานาน

Context Engineering for Agents

อย่างไรก็ตาม ภารกิจที่ใช้เวลานานและการตอบกลับจากการเรียกเครื่องมือที่สะสมจะทำให้ตัวแทนใช้ token อย่างมาก ซึ่งอาจก่อให้เกิดปัญหาหลายประการ เช่น การเกินขีดจำกัดของหน้าต่างบริบท ทำให้ต้นทุนและความล่าช้าสูงขึ้น ลดประสิทธิภาพของตัวแทนได้ Drew Breunig ได้ชี้ให้เห็นอย่างชัดเจนว่า บริบทที่ยาวเกินไปอาจทำให้เกิดปัญหาด้านประสิทธิภาพในหลายทางดังนี้:

  • • การปนเปื้อนบริบท (Context Poisoning): เมื่อข้อมูลที่ผิดพลาดเข้าสู่บริบท
  • • การรบกวนบริบท (Context Distraction): เมื่อข้อมูลบริบทมากเกินไปทำให้โมเดลสูญเสียความรู้ที่ได้จากการฝึกอบรม
  • • การสับสนบริบท (Context Confusion): เมื่อข้อมูลบริบทที่ไม่เกี่ยวข้องส่งผลกระทบต่อการตอบสนองของโมเดล
  • • ความขัดแย้งในบริบท (Context Clash): เมื่อส่วนต่าง ๆ ของบริบทขัดแย้งกันเอง

ด้วยเหตุผลเหล่านี้ Cognition AI ได้เน้นย้ำถึงความสำคัญของการจัดการบริบทดังนี้:

“การจัดการบริบท” …… เป็นหน้าที่หลักของวิศวกรที่สร้างตัวแทน AI

บริษัท Anthropic ก็ได้เน้นถึงจุดนี้ว่า:

ตัวแทนมักต้องมีการสนทนาเป็นร้อย ๆ รอบ ซึ่งต้องการให้เรามีกลยุทธ์การจัดการบริบทที่รอบคอบ

แล้วนักพัฒนายุคนี้จัดการกับความท้าทายนี้อย่างไร? ฉันได้ทำการสรุปวิธีการที่มีอยู่เป็นสี่กลุ่ม ได้แก่ การเขียน (Write), การคัดเลือก (Select), การบีบอัด (Compress) และการแยกแยะ (Isolate) พร้อมตัวอย่างแต่ละข้อ

Memory Type

การเขียนข้อมูลบริบท (Write Context)

การเขียนข้อมูลบริบทหมายถึงการเก็บข้อมูลไว้ภายนอกหน้าต่างบริบทเพื่อใช้ในขณะที่ตัวแทนทำภารกิจ

พื้นที่ชั่วคราว (Scratchpads)

เมื่อมนุษย์แก้ปัญหา พวกเขามักจะจดบันทึกและจดจำสิ่งต่าง ๆ เพื่อใช้ในอนาคต ตัวแทนก็เริ่มได้รับความสามารถเหล่านี้เช่นกัน! การจดบันทึกด้วย “พื้นที่ชั่วคราว” เป็นวิธีการหนึ่งในการทำให้ข้อมูลคงอยู่ระหว่างที่ตัวแทนทำภารกิจ แนวคิดหลักคือการเก็บข้อมูลไว้ข้างนอกหน้าต่างบริบท แต่สามารถให้ตัวแทนเข้าถึงได้ทุกเมื่อ ระบบวิจัยตัวแทนหลายตัวของ Anthropic มีตัวอย่างที่ชัดเจน:

“หัวหน้าฝ่ายวิจัย” จะคิดหาวิธีในการแก้ปัญหา และบันทึกแผนไว้ใน “ความทรงจำ” เพื่อเก็บรักษาบริบท เนื่องจากเมื่อหน้าต่างบริบทเกิน 200,000 token อาจถูกตัดขาด แผนการนี้จึงมีความสำคัญมาก

การสร้างพื้นที่ชั่วคราวมีหลายวิธี สามารถเป็นการเรียกเครื่องมือที่ง่าย เช่น การเขียนไฟล์ หรืออาจเป็นฟิลด์ในวัตถุสถานะของการทำงานในระหว่างเซสชัน ไม่ว่าจะเป็นวิธีใด พื้นที่ชั่วคราวทำให้ตัวแทนสามารถเก็บข้อมูลที่มีประโยชน์ไว้เพื่อลงมือทำภารกิจได้ดียิ่งขึ้น

ความทรงจำ (Memories)

พื้นที่ชั่วคราวช่วยให้ตัวแทนแก้ปัญหาในเซสชันเดียวยังไม่เพียงพอ บางครั้งตัวแทนต้องจดจำสิ่งต่าง ๆ ข้ามเซสชัน Reflexion model ได้นำเสนอแนวคิดในการสะท้อนความคิดหลังจากการกระทำของตัวแทนแต่ละรอบ และมีการใช้ความทรงจำที่สร้างขึ้นเองซ้ำไปซ้ำมา รุ่น Generative Agents ยังสามารถสังเคราะห์ความทรงจำจากการตอบกลับในอดีตของตัวแทนในบางช่วงเวลา

แนวคิดเหล่านี้ได้ถูกนำไปใช้อย่างแพร่หลายในผลิตภัณฑ์ต่าง ๆ อย่าง ChatGPT, Cursor และ Windsurf ทั้งหมดมีระบบที่สามารถสร้างความทรงจำระยะยาวโดยอัตโนมัติตามการติดต่อของผู้ใช้กับตัวแทน

Memories

การคัดเลือกรายละเอียดบริบท (Select Context)

การคัดเลือกบริบทหมายถึงการนำข้อมูลที่จำเป็นเข้าสู่หน้าต่างบริบท เพื่อช่วยให้ตัวแทนทำภารกิจได้

พื้นที่ชั่วคราว (Scratchpad)

กลไกการคัดเลือกบริบทจากพื้นที่ชั่วคราวขึ้นอยู่กับวิธีที่มันถูกสร้างขึ้น หากเป็นเครื่องมือ ตัวแทนสามารถเรียกอ่านได้ง่าย ๆ หากเป็นส่วนหนึ่งของสถานะการทำงาน แต่ผู้พัฒนาสามารถเลือกที่จะเปิดเผยบางส่วนของสถานะไปยังตัวแทนในแต่ละขั้นตอน การนี้ทำให้สามารถควบคุมได้อย่างประณีตในการให้ข้อมูลบริบทจากพื้นที่ชั่วคราวต่อไปยัง LLM

ความทรงจำ (Memories)

หากตัวแทนสามารถรักษาความทรงจำได้ พวกเขาก็ต้องมีความสามารถในการคัดเลือกความทรงจำที่เกี่ยวข้องกับภารกิจปัจจุบันให้ได้ การคัดเลือกถูกต้องสำคัญมาก ตัวแทนสามารถเลือกตัวอย่างจำนวนไม่มาก (ความทรงจำจากเหตุการณ์) เพื่อเรียนรู้รูปแบบพฤติกรรมที่ต้องการ; หรือเลือกคำสั่ง (ความทรงจำจากโปรแกรม) เพื่อชี้แนะพฤติกรรมของตนเอง; หรือเลือกข้อเท็จจริง (ความทรงจำจากความหมาย) เพื่อให้ข้อมูลพื้นฐานที่เกี่ยวข้องกับภารกิจ

Memory Type

ความท้าทายใหญ่คือการรับประกันว่าความทรงจำที่คัดเลือกจะต้องเกี่ยวข้อง ตัวแทนบางตัวใช้เพียงไฟล์ฟิกแบบตายตัวเพียงไม่กี่ไฟล์ ซึ่งจะถูกโหลดลงในบริบทเสมอ ตัวอย่างเช่น ตัวแทนที่มีการเขียนโค้ดหลายตัวใช้ไฟล์ในการบันทึกคำสั่ง ( “ความทรงจำจากโปรแกรม”) หรือในบางกรณีเก็บตัวอย่าง (“ความทรงจำจากเหตุการณ์”) Claude Code ใช้ CLAUDE.md ในขณะที่ Cursor และ Windsurf ใช้ไฟล์กฎ

แต่ถ้า ตัวแทนเก็บข้อเท็จจริงหรือความสัมพันธ์ในจำนวนมาก (เช่น “ความทรงจำจากความหมาย”) การคัดเลือกก็เป็นเรื่องที่ยากขึ้น ChatGPT เป็นตัวอย่างที่ดี มันเก็บข้อมูลแล้วคัดเลือกจากความทรงจำที่เก็บไว้เฉพาะผู้ใช้

เทคนิคการดึงข้อมูลที่ใช้กันทั่วไปเพื่อช่วยในการคัดเลือกคือ การฝังเวกเตอร์และ/หรือแผนที่ความรู้ แม้ว่าการคัดเลือกความทรงจำยังเต็มไปด้วยความท้าทาย ในงาน AI Engineer World Expo Simon Willison ได้แบ่งปันตัวอย่างปัญหาในการคัดเลือก โดย ChatGPT ได้รับข้อมูลเกี่ยวกับตำแหน่งของเขา และดำเนินการแทรกลงไปในรูปภาพที่เขาขอ ซึ่งความค้นหาในความทรงจำที่ไม่คาดคิดหรือไม่พึงประสงค์นี้ทำให้ผู้ใช้บางคนรู้สึกว่าหน้าต่างบริบท “ไม่ใช่ของตนเองอีกต่อไป”!

เครื่องมือ (Tools)

ตัวแทนจำเป็นต้องใช้เครื่องมือ แต่ถ้ามีเครื่องมือมากเกินไป ตัวแทนอาจไม่สามารถจัดการได้ นี่มักเกิดจากการอธิบายเครื่องมืออาจทับซ้อนกัน ทำให้โมเดลรู้สึกสับสนในการเลือกเครื่องมือวิธีการหนึ่งที่ใช้คือการใช้ RAG (การสร้างข้อมูลเพิ่มเติม) เพื่อค้นหาเครื่องมือที่เกี่ยวข้องที่สุดสำหรับภารกิจตามความคล้ายคลึงเชิงสัญญะ งานวิจัยล่าสุดบางชิ้นพบว่าการใช้วิธีนี้สามารถเพิ่มความแม่นยำในการเลือกเครื่องมือได้ 3 เท่า

ความรู้ (Knowledge)

การสร้างข้อมูลเพิ่มเติม (RAG) เป็นหัวข้อที่ใหญ่และสามารถเป็นความท้าทายหลักของการจัดการบริบท ตัวแทนเขียนโค้ดเป็นตัวอย่างที่ดีที่สุดของ RAG ในแอปพลิเคชันที่ผลิตในขนาดใหญ่ Varun จาก Windsurf ได้สรุปความท้าทายเหล่านี้ได้ดี:

การทำดัชนีโค้ด ≠ การค้นหาบริบท ……สิ่งที่เรากำลังทำคือการวิเคราะห์โค้ดด้วย AST (ต้นไม้ไวยากรณ์นามธรรม) และแบ่งออกตามขอบเขตที่มีความหมาย… แต่เมื่อขนาดของโค้ดอูนเพิ่มขึ้น การค้นหาโดยการฝังแทรก (vector embedding search) ในน้ำนามธรรมจึงไม่เชื่อถือได้ เราต้องพึ่งพาการรวมกันของเทคนิคหลายอย่าง เช่น grep/การค้นหาไฟล์, การค้นหาตามแผนที่ความรู้ และ… กระบวนการรีสั่งที่บริบทจะถูกจัดระเบียบตามความเกี่ยวข้อง

การบีบอัดบริบท (Compress Context)

การบีบอัดบริบทหมายถึงการเก็บเฉพาะ token ที่จำเป็นต่อการทำภารกิจ

การสรุปบริบท (Context Summarization)

การโต้ตอบของตัวแทนอาจมีร้อย ๆ รอบและใช้เครื่องมือที่ใช้ token มาก การสรุปเป็นวิธีการที่ใช้กันทั่วไปเพื่อตอบสนองต่อความท้าทายเหล่านี้ หากคุณเคยใช้ Claude Code คุณอาจพบการประยุกต์ใช้ที่แท้จริง เมื่ออัตราการใช้หน้าต่างบริบทเกิน 95% Claude Code จะทำการ “บีบอัดอัตโนมัติ” สรุปการโต้ตอบทั้งหมดระหว่างผู้ใช้กับตัวแทน การบีบอัดเส้นทางการทำงานของตัวแทนสามารถใช้กลยุทธ์ได้หลากหลาย เช่น การสรุปแบบวนซ้ำหรือการสรุปในระดับชั้น

Context Summarization

การเสริมขั้นตอนการสรุปในการออกแบบตัวแทนในเวลาที่เหมาะสมก็มีประโยชน์ โดยเฉพาะอย่างยิ่งสำหรับการประมวลผลมาตรฐานใหม่หลังจากการเรียกใช้เครื่องมือบางอย่าง (โดยเฉพาะเครื่องมือที่ใช้ token มาก เช่น เครื่องมือค้นหา) นอกจากนี้ Cognition ยังแนะนำให้ทำการสรุปที่จุดเชื่อมต่อระหว่างตัวแทน เพื่อให้ลดการใช้ token ในกระบวนการส่งต่อความรู้ หากต้องการจับเหตุการณ์หรือการตัดสินใจเฉพาะ สรุปอาจเป็นงานที่ไม่ง่าย Cognition ใช้โมเดลการปรับแต่งเพื่อเปล่งเสียง เพื่อให้เห็นถึงการทำงานอย่างมุ่งมั่นในขั้นตอนนี้

การตัดบริบท (Context Trimming)

สรุปมักใช้งาน LLM เพื่อตัดข้อมูลบริบทที่เกี่ยวข้อง ในขณะเดียวกัน การตัดบริบทนั้นเป็นเรื่องที่คล้ายกันมากขึ้น เช่น การกรองหรือตามที่ Drew Breunig อธิบายคือ “การตัด” บริบท ซึ่งสามารถใช้กฎที่กำหนดไว้อย่างเข้มงวด เช่น การลบข้อความที่เก่ากว่าออกจากรายการข้อความ Drew ยังได้แนะนำ Provence ซึ่งเป็นเครื่องตัดบริบทที่ฝึกอบรมสำหรับภารกิจการถาม-ตอบ

การแยกบริบท (Isolating Context)

การแยกบริบทหมายถึงการแบ่งข้อมูลบริบทออกเป็นส่วน ๆ เพื่อตัวแทนสามารถทำงานได้

ตัวแทนหลายตัว (Multi-agent)

หนึ่งในวิธีที่ได้รับความนิยมในการแยกบริบทคือการกระจายไปยังตัวแทนย่อยหลายตัว ไลบรารี Swarm ของ OpenAI มีวัตถุประสงค์หนึ่งคือ “การแยกประเด็น” ให้กลุ่มตัวแทนจัดการกับภารกิจย่อย แต่ละตัวแทนมีชุดเครื่องมือ คำสั่ง และหน้าต่างบริบทที่เป็นอิสระของตน

Multi-agent

ระบบศึกษาตัวแทนหลายตัวของ Anthropic มีการยืนยันที่ชัดเจน: ตัวแทนหลายตัวที่มีบริบทเป็นอิสระนั้นมีประสิทธิภาพดีกว่าตัวแทนคนเดียว เป็นหลักเนื่องจากหน้าต่างบริบทของแต่ละตัวแทนเฉพาะโฟกัสไปที่งานย่อยที่แคบลง อย่างที่กล่าวในบล็อก:

ตัวแทนย่อยทำงานพร้อมกันโดยมีหน้าต่างบริบทของตนเอง ขณะสำรวจด้านต่าง ๆ ของปัญหา

แน่นอนว่า ตัวแทนหลายตัวก็มาท้าทายในเรื่องการใช้ token (เช่น Anthropic รายงานว่าการใช้ token ของพวกเขาคือ 15 เท่าของการสนทนา), ที่ต้องการการออกแบบคำแนะนำที่ประณีตในการวางแผนการทำงาน, และการประสานงานระหว่างตัวแทนย่อย

การแยกบริบทในสภาพแวดล้อม (Context Isolation with Environments)

โครงการ Deep Research ของ HuggingFace แสดงให้เห็นถึงอีกตัวอย่างหนึ่งของการแยกบริบทที่น่าสนใจ ตัวแทนส่วนใหญ่ใช้การเรียก API เครื่องมือซึ่งส่งกลับอ็อบเจ็กต์ JSON (พารามิเตอร์เครื่องมือ) ซึ่งจะถูกส่งไปยังเครื่องมือ (เช่น API การค้นหา) เพื่อรับข้อมูลย้อนกลับ (เช่น ผลลัพธ์การค้นหา) แต่ HuggingFace ใช้ CodeAgent ซึ่งส่งออกโค้ดที่ประกอบไปด้วยการเรียกเครื่องมือที่ต้องการ โค้ดเหล่านี้จะถูกดำเนินการในสภาพแวดล้อมของ sandbox ข้อมูลบริบทเฉพาะที่ส่งกลับ (เช่นค่าที่ส่งคืน) จะถูกส่งกลับไปยัง LLM

Context Isolation with Environments

นี่ทำให้บริบทสามารถแยกออกจาก LLM ได้ในสภาพแวดล้อม Hugging Face กล่าวว่านี่เป็นวิธีที่ยอดเยี่ยมในการแยกอ็อบเจ็กต์ที่ใช้ token อย่างมาก:

Code Agents สามารถจัดการสถานะได้ดีกว่า … ต้องการเก็บภาพ/เสียง/ข้อมูลอื่นๆ ไว้ในภายหลัง? ไม่มีปัญหา เพียงแค่กำหนดให้เป็นตัวแปร คุณก็สามารถใช้มันในภายหลัง

สถานะ (State)

น่าสังเกตว่าสถานะของตัวแทนในการทำงานก็เป็นวิธีที่ดีในการแยกบริบท ซึ่งอาจทำหน้าที่คล้ายกับ sandbox สถานะสามารถออกแบบตามที่เป็นมาตรฐาน (Schema เช่น โมเดล Pydantic) ซึ่งรวมฟิลด์ที่จะเขียนเข้าไปในบริบท ขยายฟิลด์ในมาตรฐาน (เช่น messages) สามารถเปิดเผยให้ LLM ในทุกขั้นตอนการโต้ตอบของตัวแทน แต่แนวทางสามารถแยกข้อมูลในฟิลด์อื่น ๆ เพื่อให้ใช้เลือกสรรโดดเด่นได้ดีขึ้น

สรุป

รูปแบบของการจัดการบริบทสำหรับตัวแทนยังคงพัฒนาไปเรื่อย ๆ แต่เราสามารถสรุปวิธีการทั่วไปได้เป็นสี่ประเภท ได้แก่ การเขียน, การคัดเลือก, การบีบอัด และการแยกแยะ:

  • • การเขียนบริบทหมายถึงการเก็บข้อมูลไว้ภายนอกหน้าต่างบริบทเพื่อให้ตัวแทนใช้ในขณะทำภารกิจ
  • • การคัดเลือกบริบทหมายถึงการนำข้อมูลที่ต้องการเข้าสู่หน้าต่างบริบทเพื่อตัวแทนทำภารกิจได้
  • • การบีบอัดบริบทหมายถึงการเก็บเฉพาะ token ที่จำเป็นสำหรับการทำภารกิจ
  • • การแยกบริบทหมายถึงการแบ่งข้อมูลบริบทออกเป็นส่วน ๆ เพื่อช่วยให้ตัวแทนทำงานได้

การเข้าใจและใช้รูปแบบเหล่านี้เป็นงานหลักในการสร้างตัวแทนที่มีประสิทธิภาพในปัจจุบัน