รูปแบบการเรียงแบบหลายตัวแทนและแนวทางปฏิบัติที่ดีที่สุด

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

ตัวแทนอินไลน์

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

แนวทางปฏิบัติที่ดีที่สุด: ควรให้เอเจนต์แบบอินไลน์ทำหน้าที่เพียงอย่างเดียวและทดสอบอย่างรอบคอบ

เอเจนต์ที่เชื่อมต่อ

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

อย่างไรก็ตาม การใช้เอเจนต์ที่เชื่อมต่อจําเป็นต้องมีการกํากับดูแลอย่างระมัดระวัง:

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

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

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

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

เมื่อใดควรแยกตัวแทน

อย่าสร้างตัวแทนแยกต่างหากสําหรับงานย่อยทุกงาน ใช้ตัวแทนเฉพาะถ้ามีงานย่อย

  • ซับซ้อนพอที่จะมีชุดเครื่องมือหรือความรู้ของตัวเอง (ขอบเขตความเชี่ยวชาญที่แตกต่างกัน)
  • ต้องใช้กฎการกํากับดูแลหรือการควบคุมการเข้าถึงที่แตกต่างจากเอเจนต์หลัก
  • สามารถนํากลับมาใช้ใหม่ได้ในตัวแทนหลักต่าง ๆ มากมาย (จึงเหมือนกับตัวแทนบริการ)

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

แนวทางปฏิบัติที่ดีที่สุดสำหรับการประสานการทำงานของหลายเอเจนต์

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

1.หลักการตอบสนองเดียว

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

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

Note

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

2. คำสั่งของ Subagent ต้องระบุบทบาทของตน

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

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

3. ใช้ภาษาที่ชัดเจนและตรงไปตรงมาในคำแนะนำ

ใช้ภาษาคําสั่งเสมอ หลีกเลี่ยงการใช้ถ้อยคําที่นุ่มนวลหรือสุภาพ แพลตฟอร์มจะฉีดคําแนะนําระดับระบบโดยใช้ภาษาที่คาดเดายาก (MUST, DO NOT, NEVER) คําแนะนําที่เขียนด้วยภาษานุ่ม ("โปรดพยายามที่จะ" "คุณควร" "มันจะดีที่จะ") สูญเสียลําดับความสําคัญเมื่อพวกเขาขัดแย้ง

  • ทํา: "อย่าตอบกลับผู้ใช้โดยตรง ส่งกลับผลลัพธ์ของคุณเท่านั้น"
  • ทํา: "ต้องมีการตอบสนองขั้นสุดท้ายหนึ่งข้อต่อคําถามของผู้ใช้"
  • อย่า: "โปรดพยายามหลีกเลี่ยงการส่งข้อความถึงผู้ใช้และส่งผลลัพธ์กลับ"
  • อย่า: "ในอุดมคติ เราต้องการคําตอบรวมคําตอบเดียว"

4. ใช้แหล่งความรู้หนึ่งแหล่งต่อซับเจนต์ (ไม่มีการทับซ้อนกัน)

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

  • Do: CA-1 จะค้นหาแหล่งความรู้ A (ตัวอย่างเช่น นโยบาย HR) CA-2 จะค้นหาแหล่งความรู้ B (ตัวอย่างเช่น เอกสารประกอบ IT)
  • Don't: ให้ตัวแทนย่อยทั้งสองเข้าถึงเอกสารเดียวกัน ตาราง Dataverse เดียวกัน หรือไซต์ SharePoint เดียวกัน
  • หมายเหตุ: ถ้าคุณมีแหล่งความรู้เดียวเท่านั้น ให้ใช้ตัวแทนเดียวที่มีความรู้แทนที่จะแยกออกเป็นสองส่วนย่อย ตัวแทนหลายรายจะเพิ่มมูลค่าเฉพาะเมื่อแหล่งที่มามีความแตกต่างกันอย่างแท้จริง

5. ใช้คําอธิบายที่ถูกต้องและแตกต่างกันสําหรับสารย่อย

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

  • ทํา: CA-1: "ค้นหาเอกสารนโยบาย HR สําหรับคําถามที่เกี่ยวข้องกับพนักงาน" CA-2: "ค้นหาฐานความรู้ด้าน IT สําหรับคําถามเกี่ยวกับการสนับสนุนด้านเทคนิค"
  • ไม่: ให้คําอธิบายเดียวกันแก่ตัวแทนทั้งสองเมื่อทําหน้าที่ในโดเมนที่แตกต่างกัน
  • อย่า: ใช้คําอธิบายทั่วไปเช่น "ตัวแทนนี้สามารถช่วยตอบคําถามได้"

6. คำสั่งหลักต้องกำหนดรูปแบบการประสานงาน

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

  • ทํา: "เมื่อผู้ใช้ถามคําถาม: 1 เรียกใช้เอเจนต์ย่อยทั้งสองเพื่อรวบรวมข้อมูล 2 รอให้เอเจนต์ย่อยทั้งสองส่งกลับผลการค้นพบ 3. รวมผลการค้นพบให้เป็นการตอบสนองแบบรวมศูนย์เดียว 4. ส่งคำตอบเพียงหนึ่งคำตอบแก่ผู้ใช้ เอเจนต์ย่อยต้องไม่ตอบกลับผู้ใช้โดยตรง"
  • อย่า: "เมื่อผู้ใช้ถามคําถาม เรียกใช้ตัวแทนลูกและรับคําตอบจากทั้งสองแหล่งที่มาและให้คําตอบรวมเดียว" (คลุมเครือเกินไป. คําแนะนําไม่ได้บอกให้ผู้บรรยายคนอื่นๆ ยังคงเงียบไว้)

7. รวมคําสั่ง "ไม่มีการตอบกลับโดยตรง" ในการรับมอบสิทธิ์งาน

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

  • ทํา: เพิ่มคําแนะนําของผู้ปกครอง: "เมื่อมอบหมายให้กับตัวแทนย่อย ให้รวมไว้ในงานเสมอ: 'ส่งกลับผลลัพธ์ที่พบเท่านั้น อย่าตอบกลับผู้ใช้"
  • อย่า: อาศัยเพียงคำแนะนำของซับเอเจนต์เท่านั้น บริบทของงานให้สัญญาณเพิ่มเติมแก่เอเจนต์ย่อย ซึ่งช่วยตอกย้ำรูปแบบดังกล่าว

8. ทดสอบกับคิวรีที่ไม่ตรงกันของโดเมน

ทดสอบกับคําถามที่ไม่ตรงกับโดเมนของบุคคลย่อยเสมอ การทดสอบนี้เผยให้เห็นว่าเอเจนต์ย่อยสามารถตอบกลับว่า "ไม่พบข้อมูล" ได้อย่างเหมาะสม หรือกลับส่งข้อมูลที่อาจไม่ถูกต้อง ค้าง หรือส่งข้อความที่ทำให้สับสน

  • ทํา: ทดสอบกับคิวรีภายนอกโดเมนย่อยทั้งหมด (ตัวอย่างเช่น ถามเกี่ยวกับสภาพอากาศเมื่อเจ้าหน้าที่จัดการ HR และ IT)
  • ทํา: ตรวจสอบว่าพ่อแม่จัดการ "ตัวแทนทั้งสองไม่พบอะไร" อย่างนุ่มนวล
  • อย่า: ทดสอบเฉพาะด้วยคำค้นกรณีที่ง่ายที่สุดซึ่งตรงกับขอบเขตของเอเจนต์ย่อยเพียงตัวเดียวอย่างสมบูรณ์แบบ

9. ควรถามแทนการแจ้งเมื่อคาดว่าจะมีการติดตามผล

ใช้การโต้ตอบในลักษณะคำถามเมื่อคาดว่าผู้ใช้จะตอบกลับ ใช้ inform/send-style สําหรับข้อความสุดท้ายแบบทางเดียวเท่านั้น ถ้าตัวแทนถามผู้ใช้บางอย่างโดยใช้ข้อความทางเดียว (แจ้ง) การตอบกลับของผู้ใช้จะกลับไปยังตัววางแผนหลักเป็นคิวรีใหม่ ในกรณีนี้ จะเป็นการดีกว่าที่จะสนทนากับเอนทิตีย่อยต่อไป

  • ทํา: เขียนคําแนะนําเช่น: "หากคุณต้องการการชี้แจง ให้ถามคําถามผู้ใช้และรอการตอบกลับ"
  • อย่า: เขียนคําแนะนําเช่น: "แจ้งให้ผู้ใช้ทราบเกี่ยวกับตัวเลือกและปล่อยให้พวกเขาเลือก" "Inform" ส่งสัญญาณทางเดียวในขณะที่ "ask" เป็นสัญญาณการแลกเปลี่ยนแบบสองทาง

รายการตรวจสอบการอ้างอิงด่วน

# เช็ค
1 คําแนะนําหลักระบุไว้อย่างชัดเจนว่า "เฉพาะฉันเท่านั้นที่ตอบสนองต่อผู้ใช้"
2 คําแนะนําส่วนย่อยทุกคําสั่งระบุว่า "ไม่ตอบกลับผู้ใช้โดยตรง"
3 คําแนะนําใช้ภาษาคําสั่งที่เข้มงวด (ต้อง, ไม่, เท่านั้น)
4 แต่ละองค์ประกอบย่อยมีแหล่งความรู้ที่ไม่ซ้ําใครและไม่สามารถวางทับได้
5 คำอธิบายของเอเจนต์ย่อยมีความถูกต้อง แตกต่างกันอย่างชัดเจน และเฉพาะเจาะจง
6 คําแนะนําหลักจะกําหนดรูปแบบการเรียงสตริงแบบเต็ม (เรียกใช้→รอ→รวม→ตอบสนอง)
7 รายการหลักส่งผ่าน "ไม่มีการตอบกลับโดยตรง" ในบริบทของงานที่มอบหมาย
8 ทดสอบแล้วด้วยคิวรีที่ไม่ตรงกันของโดเมน
9 การแยกแยะระหว่างการถามกับการแจ้งในคำสั่งสำหรับซับเอเจนต์นั้นถูกต้อง