ai-agents-for-beginners

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

Context Engineering

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

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

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

บทนำ

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

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

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

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

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

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

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

ระบุส่วนประกอบหลักของบริบท ในแอปพลิเคชัน Large Language Model (LLM)

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

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

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

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

การวิศวกรรมพรอมต์กับการวิศวกรรมบริบท

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

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

Types of Context

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

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

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

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

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

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

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

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

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

Context Engineering Best Practices

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

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

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

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

กลยุทธ์ในทางปฏิบัติ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  ◦ ระบุเครื่องมือที่ใช้จองตั๋วและโรงแรมได้

ความล้มเหลวของบริบทที่พบบ่อย

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

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

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

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

วิธีแก้: เพิ่มขั้นตอนที่ ตรวจสอบความมีอยู่ของเที่ยวบินและเส้นทางด้วย 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 ขึ้นมาให้ LLM พร้อมกับชุดเครื่องมือที่เน้นเฉพาะเจาะจง

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

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

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

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

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

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

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


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