ai-agents-for-beginners

วิศวกรรมบริบทสำหรับเอเย่นต์ AI

Context Engineering

(คลิกที่ภาพด้านบนเพื่อชมวิดีโอบทเรียนนี้)

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

ในบทเรียนนี้ เราจะมาดูว่า วิศวกรรมบริบทคืออะไรและบทบาทของมันในการสร้างเอเย่นต์ AI

บทนำ

บทเรียนนี้จะครอบคลุม:

วิศวกรรมบริบทคืออะไร และทำไมมันจึงแตกต่างจากวิศวกรรมพรอมต์

กลยุทธ์สำหรับวิศวกรรมบริบทที่มีประสิทธิภาพ รวมถึงวิธีการเขียน การเลือก การบีบอัด และการแยกข้อมูล

ความล้มเหลวในบริบทที่พบบ่อย ที่อาจทำให้เอเย่นต์ AI ของคุณล้มเหลว และวิธีแก้ไข

เป้าหมายการเรียนรู้

หลังจากเรียนจบบทเรียนนี้ คุณจะเข้าใจวิธี:

กำหนดวิศวกรรมบริบท และแยกแยะจากวิศวกรรมพรอมต์

ระบุองค์ประกอบสำคัญของบริบท ในแอปพลิเคชันโมเดลภาษาขนาดใหญ่ (LLM)

ประยุกต์กลยุทธ์ในการเขียน การเลือก การบีบอัด และการแยกบริบท เพื่อปรับปรุงประสิทธิภาพของเอเย่นต์

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

วิศวกรรมบริบทคืออะไร?

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

วิศวกรรมพรอมต์และวิศวกรรมบริบท

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

ประเภทของบริบท

Types of Context

สำคัญที่ต้องจำไว้ว่าบริบทไม่ใช่แค่สิ่งเดียว ข้อมูลที่เอเย่นต์ AI ต้องการสามารถมาจากแหล่งหลายแบบและขึ้นอยู่กับเราที่จะมั่นใจว่าเอเย่นต์เข้าถึงแหล่งเหล่านี้ได้:

ประเภทของบริบทที่เอเย่นต์ AI อาจต้องจัดการ ได้แก่:

คำสั่ง: เหมือนเป็น “กฎ” ของเอเย่นต์ – พรอมต์ ข้อความระบบ ตัวอย่างแบบ few-shot (แสดงให้ AI เห็นวิธีทำบางอย่าง) และคำอธิบายเครื่องมือที่ใช้ได้ นี่คือจุดที่วิศวกรรมพรอมต์รวมกับวิศวกรรมบริบท

ความรู้: ครอบคลุมข้อเท็จจริง ข้อมูลที่ดึงมาจากฐานข้อมูล หรือความทรงจำระยะยาวที่เอเย่นต์สะสม รวมถึงการรวมระบบ Retrieval Augmented Generation (RAG) หากเอเย่นต์ต้องการเข้าถึงคลังความรู้และฐานข้อมูลต่างๆ

เครื่องมือ: คือคำนิยามของฟังก์ชันภายนอก API และ MCP Servers ที่เอเย่นต์เรียกใช้ พร้อมผลตอบกลับ (ผลลัพธ์) จากการใช้

ประวัติการสนทนา: การสนทนาอย่างต่อเนื่องกับผู้ใช้ เมื่อเวลาผ่านไป การสนทนาเหล่านี้จะยาวขึ้นและซับซ้อนมากขึ้น ซึ่งจะใช้พื้นที่ในหน้าต่างบริบท

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

กลยุทธ์สำหรับวิศวกรรมบริบทที่มีประสิทธิภาพ

กลยุทธ์การวางแผน

Context Engineering Best Practices

วิศวกรรมบริบทที่ดีเริ่มจากการวางแผนที่ดี นี่คือวิธีการที่จะช่วยคุณเริ่มคิดเกี่ยวกับการประยุกต์ใช้แนวคิดวิศวกรรมบริบท:

  1. กำหนดผลลัพธ์ที่ชัดเจน - ผลลัพธ์ของงานที่เอเย่นต์ AI จะได้รับมอบหมายควรกำหนดอย่างชัดเจน ตอบคำถามว่า - “โลกจะเป็นอย่างไรเมื่เอเย่นต์ AI ทำงานเสร็จ?” หรือพูดอีกอย่างว่า การเปลี่ยนแปลง ข้อมูล หรือการตอบสนองใดที่ผู้ใช้ควรได้รับหลังจากโต้ตอบกับเอเย่นต์ AI
  2. ทำแผนที่บริบท - เมื่อคุณกำหนดผลลัพธ์ของเอเย่นต์ AI ได้แล้ว คุณต้องตอบคำถามว่า “เอเย่นต์ AI ต้องการข้อมูลอะไรเพื่อทำงานนี้ให้เสร็จ?” ด้วยวิธีนี้คุณจะเริ่มทำแผนที่บริบทของที่มาของข้อมูลนั้น
  3. สร้างสายงานบริบท - เมื่อคุณรู้ว่าข้อมูลอยู่ที่ไหน คุณต้องตอบคำถามว่า “เอเย่นต์จะได้ข้อมูลนี้อย่างไร?” ซึ่งสามารถทำได้หลายวิธี รวมถึง RAG การใช้ MCP servers และเครื่องมืออื่นๆ

กลยุทธ์เชิงปฏิบัติ

การวางแผนสำคัญ แต่เมื่อข้อมูลเริ่มไหลเข้าสู่หน้าต่างบริบทของเอเย่นต์ เราต้องมีกลยุทธ์เชิงปฏิบัติเพื่อจัดการ

การจัดการบริบท

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

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

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

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

  4. ระบบมัลติเอเย่นต์ การพัฒนาระบบมัลติเอเย่นต์เป็นรูปแบบหนึ่งของวิศวกรรมบริบทเพราะเอเย่นต์แต่ละตัวมีหน้าต่างบริบทของตัวเอง วิธีที่บริบทนั้นถูกแชร์และส่งต่อไปยังเอเย่นต์ต่างๆ เป็นสิ่งที่ต้องวางแผนเมื่อสร้างระบบเหล่านี้

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

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

การตรวจสอบบริบท

หลังจากคุณใช้หนึ่งในกลยุทธ์เหล่านี้แล้ว ควรตรวจสอบว่าวิศวกรรมบริบทจริง ๆ ได้ส่งผลอะไรต่อการเรียกโมเดลครั้งต่อไป คำถามสำหรับการดีบักที่มีประโยชน์คือ:

เอเย่นต์โหลดบริบทมากเกินไป บริบทผิด หรือขาดบริบทที่ต้องการหรือไม่?

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

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

ตัวอย่างวิศวกรรมบริบท

สมมติว่าเราต้องการเอเย่นต์ AI ที่จะ “จองทริปไปปารีสให้ฉัน”

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

• เอเย่นต์ที่ใช้กลยุทธ์วิศวกรรมบริบทที่กล่าวมาจะทำมากกว่านั้น ก่อนตอบ ระบบอาจจะ:

  ◦ ตรวจสอบปฏิทินของคุณ เพื่อดูวันที่ว่าง (ดึงข้อมูลเรียลไทม์)

 ◦ เรียกความชอบการเดินทางที่ผ่านมา (จากความทรงจำระยะยาว) เช่น สายการบินที่คุณชอบ งบประมาณ หรือว่าคุณชอบเที่ยวบินตรงหรือไม่

 ◦ ระบุเครื่องมือที่ใช้ได้ สำหรับการจองเที่ยวบินและโรงแรม

ความล้มเหลวทั่วไปของบริบท

การปนเปื้อนบริบท

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

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

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

วิธีแก้: เพิ่มขั้นตอนที่ ตรวจสอบความถูกต้องของเที่ยวบินและเส้นทางด้วย API เรียลไทม์ ก่อน เพิ่มรายละเอียดเที่ยวบินลงในบริบททำงานของเอเย่นต์ หากตรวจสอบไม่ผ่าน ข้อมูลผิดจะถูก “กักกัน” และไม่ถูกใช้งานต่อ

การเบี่ยงเบนบริบท

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

ทำอย่างไร: ใช้ การสรุปบริบท บีบอัดข้อมูลที่สะสมเป็นสรุปสั้นๆ เป็นระยะ ๆ เก็บรายละเอียดสำคัญ และลบประวัติซ้ำซ้อน ช่วย “รีเซ็ต” การโฟกัส

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

วิธีแก้: หลังจากผ่านรอบจำนวนหนึ่งหรือเมื่อบริบทใหญ่เกินไป เอเย่นต์ควร สรุปส่วนสนทนาที่เกี่ยวข้องและล่าสุด — โฟกัสที่วันที่เดินทางและจุดหมายปัจจุบัน — และใช้สรุปนี้สำหรับการเรียก LLM ครั้งต่อไป ทิ้งการสนทนาเก่าที่ไม่เกี่ยวข้องออกไป

ความสับสนในบริบท

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

ทำอย่างไร: ใช้ การจัดการโหลดเครื่องมือ โดยใช้เทคนิค RAG เก็บคำอธิบายเครื่องมือในฐานข้อมูลเวกเตอร์และเลือก เฉพาะ เครื่องมือที่เกี่ยวข้องกับงานแต่ละงาน งานวิจัยแสดงว่าจำกัดการเลือกเครื่องมือไม่เกิน 30 ตัว

ตัวอย่างการจองทริป: เอเย่นต์ของคุณมีเครื่องมือหลายสิบตัว: book_flight, book_hotel, rent_car, find_tours, currency_converter, weather_forecast, restaurant_reservations เป็นต้น คุณถามว่า “วิธีที่ดีที่สุดในการเดินทางในปารีสคืออะไร?” ด้วยจำนวนเครื่องมือมากมาย เอเย่นต์เกิดความสับสนและพยายามเรียกใช้ book_flight ภายใน ปารีส หรือ rent_car แม้ว่าคุณจะชอบขนส่งสาธารณะ เพราะคำอธิบายเครื่องมืออาจทับซ้อนกันหรือมันแยกแยะไม่ได้ว่าสิ่งใดดีที่สุด

วิธีแก้: ใช้ RAG กับคำอธิบายเครื่องมือ เมื่อคุณถามเกี่ยวกับการเดินทางในปารีส ระบบจะดึง เฉพาะ เครื่องมือที่เกี่ยวข้องมากที่สุดอย่าง rent_car หรือ public_transport_info ตามคำถามของคุณ เสนอชุดเครื่องมือที่มุ่งเน้นให้โมเดล

ความขัดแย้งในบริบท

คืออะไร: เมื่อมีข้อมูลขัดแย้งกันในบริบท นำไปสู่การเหตุผลที่ไม่สอดคล้องกันหรือคำตอบสุดท้ายที่ไม่ดี ซึ่งมักเกิดเมื่อข้อมูลถูกส่งมาเป็นขั้นตอนและสมมติฐานที่ผิดในช่วงแรกยังคงอยู่ในบริบท

ทำอย่างไร: ใช้ การตัดแต่งบริบท และ การถ่ายโอนข้อมูล การตัดแต่งหมายถึงการลบข้อมูลล้าสมัยหรือขัดแย้งเมื่อมีรายละเอียดใหม่เข้ามา การถ่ายโอนให้โมเดลมี “สมุดบันทึก” แยกต่างหากสำหรับประมวลผลข้อมูลโดยไม่รบกวนบริบทหลัก

ตัวอย่างการจองท่องเที่ยว: คุณบอกตัวแทนของคุณในตอนแรกว่า, “ฉันต้องการบินชั้นประหยัด.” ต่อมาระหว่างการสนทนา คุณเปลี่ยนใจและบอกว่า, “จริงๆ แล้ว สำหรับทริปนี้ไปชั้นธุรกิจดีกว่า.” หากคำสั่งทั้งสองยังคงอยู่ในบริบท ตัวแทนอาจได้รับผลการค้นหาที่ขัดแย้งกันหรือสับสนเกี่ยวกับว่าควรให้ความสำคัญกับความชอบใดก่อน

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

มีคำถามเพิ่มเติมเกี่ยวกับวิศวกรรมบริบทไหม?

เข้าร่วม Microsoft Foundry Discord เพื่อพบปะกับผู้เรียนคนอื่น ๆ เข้าร่วมชั่วโมงทำงาน และรับคำตอบสำหรับคำถามเกี่ยวกับ AI Agents ของคุณ

บทเรียนก่อนหน้า

Agentic Protocols

บทเรียนถัดไป

Memory for AI Agents


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