มีการเปลี่ยนแปลงแพลตฟอร์มที่สำคัญที่คุณควรรู้ก่อนที่จะแก้ไขข้อผิดพลาดในลูปของ AutoGen ณ เดือนกันยายน 2026 คลังเก็บโค้ดอย่างเป็นทางการของ AutoGen อยู่ในโหมดบำรุงรักษา: คาดว่าจะได้รับการบำรุงรักษามากกว่าฟีเจอร์ใหม่ และ Microsoft แนะนำให้ใช้ Microsoft Agent Framework สำหรับโครงการใหม่ คลังเก็บโค้ดอย่างเป็นทางการของ AutoGen ยังคงระบุ Python 0.7.5 เป็นเวอร์ชันเสถียรปัจจุบัน ในขณะที่ Microsoft ได้เผยแพร่คู่มือการย้ายข้อมูลจาก AutoGen ไปยัง Agent Framework ฉบับปรับปรุงเมื่อวันที่ 25 สิงหาคม 2026 อย่างไรก็ตาม หากคุณใช้งาน AutoGen อยู่แล้ว เทคนิคการแก้ไขปัญหาด้านล่างยังคงมีประโยชน์โดยตรง โปรดดูที่คลังเก็บโค้ดอย่างเป็นทางการของ AutoGen , รุ่นต่างๆ ของAutoGen อย่างเป็นทางการ และคู่มือการย้ายข้อมูล AutoGen ของ Microsoft
โดยปกติแล้ว เอเจนต์ AutoGen จะดูเหมือน “ติดอยู่ในวงวนไม่รู้จบ” ด้วยเหตุผล 5 ประการ ได้แก่ การทำงานไม่มีเงื่อนไขการยุติที่เชื่อถือได้ นโยบายผู้พูดคนถัดไปเลือกผู้เข้าร่วมที่ไม่ก่อให้เกิดประโยชน์ การเรียกใช้เครื่องมือไม่สร้างความคืบหน้าที่สังเกตได้ เอเจนต์ทำงานซ้ำไปซ้ำมา หรือแอปพลิเคชันยังคงกลับไปยังสถานะเดิม วิธีแก้ไขที่เร็วที่สุดไม่ใช่การเขียนข้อความแจ้งเตือนใหม่ทั้งหมด ขั้นแรกให้ระบุว่าคุณมีวงวนแบบใด จากนั้นเพิ่มจุดหยุดที่ชัดเจน แล้วแก้ไขการเปลี่ยนสถานะที่ล้มเหลว
มุมมองการวินิจฉัยที่กระชับ: การวางแผนซ้ำๆ การใช้เครื่องมือ การสังเกต และการไตร่ตรอง จะกลายเป็นวงจรเมื่อเกณฑ์การเสร็จสิ้นหรือข้อจำกัดที่เข้มงวดไม่เคยถูกนำมาใช้
วิเคราะห์อย่างรวดเร็ว: คุณเห็นวงจรแบบไหน?
อาการ สาเหตุที่เป็นไปได้ สิ่งแรกที่ต้องตรวจสอบ
ตัวแทนสองคนเดิมจะสลับกันไปเรื่อยๆ อย่างไม่มีกำหนด การกำหนดเส้นทางหรือการส่งต่อแบบปิงปอง การเลือกผู้พูด เป้าหมายการส่งต่อ และขีดจำกัดข้อความสูงสุดหรือจำนวนรอบการสนทนาสูงสุด
เจ้าหน้าที่รายหนึ่งเรียกใช้เครื่องมือเดิมซ้ำๆ โดยใช้พารามิเตอร์ที่แทบจะเหมือนกันทุกประการ ผลลัพธ์จากเครื่องมือไม่ได้พิสูจน์ความก้าวหน้าหรือความล้มเหลว max_tool_iterationsโครงสร้างการส่งคืนเครื่องมือ และตรรกะการลองใหม่
ทีมงานยังคงพูดคุยกันต่อแม้ว่างานจะเสร็จสมบูรณ์อย่างเห็นได้ชัดแล้วก็ตาม ความสมบูรณ์นั้นเป็นเพียงการบอกเป็นนัยในข้อความแจ้งเตือนเท่านั้น เงื่อนไขการยุติที่ชัดเจนและสัญญาณการเสร็จสิ้นที่แน่นอน
ผู้คัดเลือกเลือกผู้เชี่ยวชาญผิดคนซ้ำแล้วซ้ำเล่า คำอธิบายตัวแทนที่ไม่ชัดเจนหรือข้อความแจ้งเตือนตัวเลือก คำอธิบายผู้เข้าร่วม รายชื่อผู้สมัคร และallow_repeated_speaker
งานใหม่ดูเหมือนจะสืบทอดพฤติกรรมจากงานก่อนหน้า รัฐถูกรักษาไว้โดยเจตนา ควรทำการรีเซ็ตทีมหรือเอเจนต์ก่อนเริ่มงานใหม่หรือไม่
กระบวนการทำงานเกี่ยวกับกราฟจะวนซ้ำไปเรื่อยๆ ผ่านขั้นตอนการตรวจสอบ/เขียนใหม่ เงื่อนไขทางออกจะไม่เป็นจริงเลย เงื่อนไขการออกจากวงจรบวกกับการยุติความปลอดภัยแบบอิสระ
1. เพิ่มคำสั่งหยุดการทำงานอย่างเด็ดขาดก่อนที่จะดีบักสิ่งอื่นใด
AutoGen AgentChat มีเงื่อนไขการยุติการสนทนาในตัวโดยเฉพาะเพื่อจำกัดขอบเขตของทีม เอกสารเวอร์ชันเสถียรประกอบด้วยMaxMessageTermination, TextMentionTermination, TokenUsageTermination, TimeoutTermination, HandoffTermination, SourceMatchTermination, ExternalTermination, StopMessageTermination, TextMessageTermination, FunctionCallTermination, และFunctionalTerminationดูเอกสารการยุติการสนทนาอย่างเป็นทางการของAutoGen
สำหรับเวิร์กโฟลว์การผลิตส่วนใหญ่ ให้ใช้เงื่อนไขการเสร็จสิ้นเชิงความหมายและ ขีดจำกัดความปลอดภัยที่เป็นอิสระ ตัวดำเนินการที่สำคัญมักจะเป็น OR เพราะคุณต้องการให้การทำงานหยุดลงเมื่อภารกิจเสร็จสิ้นตามปกติหรือเมื่อถึงขีดจำกัดความปลอดภัย
from autogen_agentchat.conditions import (
MaxMessageTermination,
TextMentionTermination,
)
done = TextMentionTermination("TERMINATE")
safety_cap = MaxMessageTermination(max_messages=25)
termination = done | safety_cap
ข้อผิดพลาดที่พบบ่อยคือการพึ่งพาเพียงแค่ "พูดว่า TERMINATE เมื่อเสร็จสิ้น" ซึ่งทำให้ความถูกต้องขึ้นอยู่กับพฤติกรรมของแบบจำลองเท่านั้น อีกข้อผิดพลาดหนึ่งคือการรวมเงื่อนไขเข้าด้วยกัน&ในขณะที่จริงๆ แล้วคุณต้องการ "หยุดเมื่อเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง" AutoGen รองรับทั้งการประกอบเงื่อนไขแบบ AND และ OR ดังนั้นควรเลือกความหมายอย่างรอบคอบ
การแก้ไขนี้ช่วยอะไร
ทีมที่ไม่สามารถส่งมอบงานได้ตามกำหนดเวลาที่คาดหวังไว้
ตัวเลือกสัญญาณที่ยังคงค้นหาลำโพงตัวอื่นต่อไปแม้ว่าการทำงานที่เป็นประโยชน์จะหยุดลงแล้วก็ตาม
ห่วงโซ่การส่งต่อที่ไม่มีจุดสิ้นสุดตามธรรมชาติ
พฤติกรรมของโมเดลหรือเครื่องมือที่ไม่คาดคิด ซึ่งปกติแล้วจะใช้จำนวนรอบที่ไม่จำกัด
ขีดจำกัดสูงสุด (hard cap) เป็นเพียงตัวตัดวงจร ไม่ใช่หลักฐานว่าขั้นตอนการทำงานถูกต้อง หากการทำงานหยุดลงทุกครั้งเนื่องจากชนกับขีดจำกัดสูงสุด คุณก็ยังคงมีปัญหาด้านตรรกะที่ต้องแก้ไขอยู่ดี
2. ทำให้การดำเนินการเสร็จสมบูรณ์สามารถตรวจจับได้ด้วยเครื่องจักร ไม่ใช่แค่การสนทนาธรรมดา
สัญญาณการยุติที่ชัดเจนที่สุดคือสัญญาณที่แอปพลิเคชันของคุณสามารถรับรู้ได้โดยไม่ต้องตีความข้อความ หากเวิร์กโฟลว์มีเหตุการณ์ความสำเร็จที่ชัดเจน ให้ใช้เงื่อนไขการยุติที่ตรงกันมากที่สุด ตัวอย่างเช่น การส่งต่อเฉพาะสามารถตรวจจับได้ด้วยHandoffTermination, การเสร็จสิ้นของเครื่องมือเฉพาะสามารถตรวจจับได้ด้วยFunctionCallTermination, และตรรกะที่กำหนดเองสามารถแสดงได้FunctionalTerminationด้วย
หากคุณใช้ ให้TextMentionTermination("TERMINATE")ระบุความรับผิดชอบให้ชัดเจน: ตัวแทนใดได้รับอนุญาตให้ประกาศว่างานเสร็จสมบูรณ์ และภายใต้เงื่อนไขใดที่ได้รับการตรวจสอบแล้ว? หลีกเลี่ยงการให้คำแนะนำที่ไม่ชัดเจนแก่ผู้เข้าร่วมทุกคน เช่น “ทำต่อไปจนกว่าจะพอใจ” คำแนะนำประเภทนั้นอาจทำให้เกิดพฤติกรรมการวิจารณ์และการเขียนใหม่ไม่รู้จบ เพราะคำว่า “พอใจ” ไม่มีขอบเขตที่สังเกตได้
สัญญาการทำงานที่สมบูรณ์และมีประโยชน์นั้นจะต้องชัดเจน: “ผู้ตรวจสอบจะยกเลิกสัญญาได้ก็ต่อเมื่อร่างเอกสารมีส่วนประกอบครบทั้งสามส่วนตามที่กำหนด และไม่มีอุปสรรคใดๆ เหลืออยู่” ยิ่งไปกว่านั้น หากทำได้ ควรให้ผู้ตรวจสอบจัดทำเอกสารที่มีโครงสร้างชัดเจนเพื่อให้แอปพลิเคชันสามารถตรวจสอบได้
3. แก้ไขการกำหนดเส้นทาง SelectorGroupChat ก่อนที่จะเขียนข้อความแจ้งเตือนของเอเจนต์ใหม่ทั้งหมด
SelectorGroupChatโปรแกรมนี้ใช้โมเดลในการเลือกผู้พูดคนถัดไปจากบริบทการสนทนาร่วมกัน เอกสารประกอบเวอร์ชันเสถียรระบุว่าชื่อและคำอธิบายของผู้เข้าร่วมมีความสำคัญ เนื่องจากจะถูกนำมาใช้ในการเลือกผู้พูด โดยค่าเริ่มต้น ระบบจะไม่เลือกผู้พูดคนเดิมซ้ำกัน เว้นแต่จะเป็นผู้พูดเพียงคนเดียวที่ว่างอยู่ แม้ว่าallow_repeated_speaker=TrueAutoGen จะสามารถเปลี่ยนแปลงพฤติกรรมนี้ได้ก็ตาม นอกจากนี้ AutoGen ยังมีselector_funcฟังก์ชันcandidate_funcที่ช่วยให้ควบคุมได้อย่างแม่นยำมากขึ้นเมื่อคุณต้องการ โปรดตรวจสอบเอกสาร ประกอบอย่างเป็นทางการของ SelectorGroupChat
หากผู้เข้าร่วมคนเดิมได้รับการเลือกซ้ำ ๆ โปรดตรวจสอบสิ่งเหล่านี้ตามลำดับ:
คำอธิบายเอเจนต์: คำอธิบายแต่ละรายการควรระบุว่าเอเจนต์ทำอะไรและควรเลือกใช้เมื่อใด คำอธิบายที่ซ้ำซ้อนจะทำให้การกำหนดเส้นทางไม่เสถียร
คำแนะนำสำหรับตัวเลือก: ควรกำหนดกฎการกำหนดเส้นทางให้สั้นพอที่โมเดลจะสามารถนำไปใช้ได้อย่างน่าเชื่อถือ เอกสารประกอบของ AutoGen แนะนำอย่างชัดเจนให้พิจารณาใช้ตัวเลือกแบบกำหนดเองเมื่อคำแนะนำเริ่มมีเงื่อนไขจำนวนมาก
การตั้งค่าลำโพงแบบวนซ้ำ: ปิดallow_repeated_speakerใช้งานเว้นแต่จำเป็นจริงๆ ที่จะใช้งานแบบวนซ้ำหลายครั้ง
ข้อจำกัดของผู้สมัคร: หากมีตัวแทนที่ถูกต้องเพียงสองตัวหลังจากสถานะใดสถานะหนึ่ง ให้จำกัดชุดผู้สมัครแทนที่จะขอให้แบบจำลองเลือกจากผู้เข้าร่วมทั้งหมด
การเปลี่ยนสถานะแบบกำหนดได้: ใช้selector_funcเมื่อเวิร์กโฟลว์นั้นแท้จริงแล้วคือเครื่องสถานะที่ปลอมตัวเป็นการสนทนา
ความแตกต่างที่สำคัญนั้นง่ายมาก: ใช้การเลือกผู้พูดตาม LLM เมื่อผู้พูดคนถัดไปต้องการการตัดสินความหมายอย่างแท้จริง ใช้การกำหนดเส้นทางแบบตายตัวเมื่อผู้พูดคนถัดไปถูกกำหนดโดยสถานะของเวิร์กโฟลว์
4. ลดการเรียกใช้เครื่องมือซ้ำซ้อนโดยแสดงความคืบหน้าให้เห็นชัดเจน
ใน AgentChat เวอร์ชันปัจจุบันAssistantAgentมีmax_tool_iterationsพารามิเตอร์หนึ่งตัว เอกสาร API เวอร์ชันเสถียรระบุว่าค่าเริ่มต้นคือ 1 เมื่อเพิ่มค่านี้ เอเจนต์สามารถเรียกใช้เครื่องมือแบบต่อเนื่องเพิ่มเติมได้จนกว่าโมเดลจะส่งการตอบกลับเป็นข้อความหรือจนกว่าจะถึงค่าสูงสุด นั่นหมายความว่าการทำงานของเอเจนต์หนึ่งครั้งจะถูกจำกัดด้วยการตั้งค่านี้ แต่ทีมยังสามารถเลือกเอเจนต์คนเดิมอีกครั้งและทำซ้ำรูปแบบการเรียกใช้เครื่องมือที่ล้มเหลวแบบเดียวกันได้ในแต่ละรอบ ดูข้อมูลอ้างอิง API อย่างเป็นทางการของ AssistantAgent
agent = AssistantAgent(
name="worker",
model_client=model_client,
tools=[lookup_tool],
max_tool_iterations=3,
)
หากคุณพบเครื่องมือและข้อโต้แย้งเดียวกันซ้ำแล้วซ้ำเล่า การลดขีดจำกัดการวนซ้ำจะช่วยแก้ปัญหาได้เพียงชั่วคราวเท่านั้น วิธีแก้ปัญหาที่แท้จริงมักอยู่ในสัญญาของเครื่องมือ โมเดลจำเป็นต้องมีข้อมูลเพียงพอที่จะบอกได้ว่าการเรียกใช้งานสำเร็จ ล้มเหลวอย่างถาวร ล้มเหลวชั่วคราว หรือไม่สร้างข้อมูลใหม่ใดๆ
ควรเลือกผลลัพธ์ที่กระชับและชัดเจน เช่น:
{
"status": "no_new_data",
"query": "customer_123",
"retryable": false,
"reason": "record already checked",
"next_action": "return_to_planner"
}
นั่นมีประโยชน์มากกว่าข้อความทั่วไป เช่น “ไม่มีผลลัพธ์” เพราะโมเดลสามารถเห็นได้ว่าการเรียกซ้ำๆ นั้นไม่ใช่ความคืบหน้า สำหรับเครื่องมือที่มีผลข้างเคียง ควรเพิ่มคุณสมบัติการทำงานซ้ำได้ (idempotency) ในระดับแอปพลิเคชันด้วย เพื่อป้องกันไม่ให้การเรียกซ้ำๆ สร้างตั๋ว การชำระเงิน ข้อความ หรือการเปลี่ยนแปลงฐานข้อมูลแบบเดียวกันซ้ำๆ
ตรวจสอบการเรียกใช้เครื่องมือแบบขนานด้วย
เอกสารอ้างอิง ที่เสถียรAssistantAgentระบุว่า อาจมีการเรียกใช้เครื่องมือหลายรายการพร้อมกัน และสามารถปิดใช้งานการเรียกใช้เครื่องมือแบบขนานได้ในไคลเอนต์โมเดลที่รองรับ นอกจากนี้ยังเตือนว่า หากตรวจพบการส่งต่อหลายรายการ จะมีการดำเนินการเฉพาะรายการแรกเท่านั้น และแนะนำให้ปิดใช้งานการเรียกใช้เครื่องมือแบบขนานเพื่อหลีกเลี่ยงสถานการณ์ดังกล่าว หากเวิร์กโฟลว์ของคุณกำหนดให้มีการเปลี่ยนสถานะทีละหนึ่งการกระทำอย่างเคร่งครัด การเรียกใช้แบบขนานอาจทำให้สถานะที่ได้นั้นยากต่อการทำความเข้าใจ
5. ฝึกการส่งบอลแบบปิงปองในทีมสไตล์ Swarm
โดยทั่วไปแล้ว วงจรการส่งต่องานจะมีลักษณะดังนี้: ตัวแทน A ตัดสินใจว่าตัวแทน B เหมาะสมกว่า ตัวแทน B เห็นบริบทที่ไม่สมบูรณ์และส่งงานกลับมา และทั้งสองตัวเลือกก็ยังคงสมเหตุสมผลในระดับท้องถิ่นไปตลอดกาล ปัญหาไม่ได้อยู่ที่ว่าแบบจำลองใดแบบหนึ่ง "ผิด" แต่เป็นเพราะนโยบายการส่งต่องานขาดความเป็นเจ้าของและสถานะสุดท้าย
แก้ไขปัญหานี้โดยกำหนดเงื่อนไขที่ชัดเจนและกฎเกณฑ์สำหรับสิ่งที่เกิดขึ้นเมื่อเป้าหมายไม่สามารถดำเนินการต่อได้ สำหรับเวิร์กโฟลว์แบบโต้ตอบกับผู้ใช้HandoffTermination(target="user")ออกแบบมาเพื่อหยุดทีมเมื่อควรส่งการควบคุมกลับไปยังแอปพลิเคชันหรือบุคคลนั้น เอกสารประกอบเรื่องมนุษย์ในกระบวนการทำงานของ AutoGen ยังอธิบายด้วยว่าเวิร์กโฟลว์ของ Swarm จำเป็นต้องมีพฤติกรรมการดำเนินการต่อโดยตั้งใจหลังจากส่งต่อผู้ใช้แล้ว โปรดดูเอกสารประกอบเรื่องมนุษย์ในกระบวนการทำงาน อย่างเป็นทางการ
สัญญาส่งมอบงานที่ดีควรประกอบด้วย:
ความสามารถที่เป้าหมายมีอยู่อย่างแท้จริง;
หลักฐานที่สนับสนุนการส่งต่อข้อมูล;
สิ่งที่เป้าหมายควรส่งคืนหากสำเร็จ
สิ่งที่เป้าหมายควรทำหากข้อมูลที่จำเป็นขาดหายไป
ข้อห้ามในการส่งงานกลับโดยไม่เปลี่ยนแปลง
6. พิจารณาวัฏจักรของ GraphFlow เหมือนกับลูปจริงที่ต้องมีการออกจากลูปอย่างชัดเจน
GraphFlowรองรับวงจรการทำงานแบบจงใจ การแยกสาขาแบบมีเงื่อนไข และการออกจากลูป API เวอร์ชันเสถียรระบุว่าลูปจะถูกต้องก็ต่อเมื่อมีเงื่อนไขที่ทำให้ลูปออกจากการทำงานในที่สุด และตัวสร้างจะตรวจสอบโครงสร้างกราฟ นอกจากนี้ยังถูกระบุว่าเป็นเวอร์ชันทดลอง ลูปที่ถูกต้องตามโครงสร้างอาจยังคงทำงานนานเกินไปหากเงื่อนไขการออกจากลูปไม่สามารถเข้าถึงได้ในเชิงตรรกะ ดังนั้นควรมีเงื่อนไขการยุติที่เป็นอิสระหรือกำหนดขีดจำกัดรอบการทำงานไว้ ดูข้อมูลอ้างอิง API อย่างเป็นทางการจากทีม AutoGen
เรื่องนี้สำคัญอย่างยิ่งในการออกแบบกระบวนการทำงานแบบ “ผู้เขียน → ผู้ตรวจทาน → ผู้เขียน” หากผู้ตรวจทานได้รับคำสั่งให้ “ปรับปรุงต่อไปจนกว่าจะสมบูรณ์แบบ” เงื่อนไขการสิ้นสุดอาจไม่มีวันเป็นจริงได้ ควรเปลี่ยนความสมบูรณ์แบบตามความรู้สึกส่วนตัวด้วยเกณฑ์ที่กำหนดไว้ เช่น ส่วนประกอบที่จำเป็นครบถ้วน การตรวจสอบความถูกต้องผ่าน ไม่มีข้อบกพร่องที่สำคัญ และจำนวนการแก้ไขสูงสุดที่กำหนดไว้
7. รีเซ็ตสถานะเมื่อภารกิจถัดไปไม่เกี่ยวข้อง
เอเจนต์และทีมใน AgentChat มีสถานะคงที่ เอกสารประกอบเวอร์ชันเสถียรของ AutoGen ระบุว่าทีมจะเก็บบริบทการสนทนาไว้ระหว่างการทำงานแต่ละครั้ง เพื่อให้งานที่เกี่ยวข้องสามารถดำเนินต่อไปได้ และยังช่วยให้reset()สามารถล้างสถานะของทีมและผู้เข้าร่วมได้ พฤติกรรมนี้มีประโยชน์สำหรับการทำงานต่อเนื่อง แต่ก็อาจดูเหมือนการวนลูปหากงานที่ไม่เกี่ยวข้องได้รับบริบทเก่า การมอบหมายงานที่ยังไม่เสร็จ หรือข้อสมมติฐานก่อนหน้ามา
await team.reset()
result = await team.run(task=new_unrelated_task)
API ของเอเจนต์เวอร์ชันเสถียรยังแจ้งเตือนผู้โทรให้ส่งเฉพาะข้อความใหม่ในแต่ละครั้งที่โทรเข้ามา แทนที่จะเล่นประวัติการสนทนาทั้งหมดซ้ำด้วยตนเอง การส่งประวัติทั้งหมดกลับเข้าไปใหม่ในขณะที่เอเจนต์ยังคงรักษาสถานะอยู่ อาจทำให้เกิดบริบทซ้ำซ้อนและเสริมสร้างพฤติกรรมซ้ำซากได้
8. บันทึกการเปลี่ยนแปลง ไม่ใช่แค่ข้อความสุดท้าย
เมื่อการจำลองลูปทำได้ยาก ให้บันทึกข้อมูลให้เพียงพอเพื่อตอบคำถามสี่ข้อในแต่ละรอบ: ใครเป็นผู้กระทำ ทำไมพวกเขาถึงถูกเลือก พวกเขาพยายามทำอะไร และอะไรเปลี่ยนแปลงไปหลังจากนั้น AutoGen มีระบบติดตามและตรวจสอบการทำงาน และคู่มือการติดตามเวอร์ชันเสถียรจะแสดงวิธีการติดตามทีม AgentChat ดูเอกสารการติดตาม อย่างเป็นทางการของ AutoGen
อย่างน้อยที่สุด ให้บันทึกข้อมูลดังนี้:
รหัสการวิ่งและหมายเลขเลี้ยว;
แหล่งที่มาของข้อความและประเภทของข้อความ;
วิทยากรที่ได้รับการคัดเลือกและผู้สมัครที่มีคุณสมบัติเหมาะสม;
ชื่อเครื่องมือ พร้อมด้วยแฮชหรือรูปแบบมาตรฐานของอาร์กิวเมนต์
สถานะของเครื่องมือและว่าสถานะมีการเปลี่ยนแปลงหรือไม่
ส่งต่อแหล่งที่มาและเป้าหมาย;
ผลลัพธ์เงื่อนไขการยุติ;
TaskResult.stop_reasonเมื่อการวิ่งสิ้นสุดลง
วิธีการวินิจฉัยที่มีประสิทธิภาพมากวิธีหนึ่งคือการตรวจจับ “การกระทำเดียวกัน สถานะเดียวกัน” หากเอเจนต์เดียวกันเรียกใช้เครื่องมือเดียวกันด้วยอาร์กิวเมนต์ที่เทียบเท่ากัน และแฮชสถานะที่ใช้ร่วมกันไม่เปลี่ยนแปลงเป็นเวลาหลายรอบ ให้หยุดการทำงานและทำเครื่องหมายว่าเป็นลูปที่ไม่มีความคืบหน้า การตรวจสอบนี้อยู่ในตรรกะของแอปพลิเคชันของคุณ ไม่ใช่คุณสมบัติ AutoGen ในตัว แต่จะตรวจจับความล้มเหลวประเภทหนึ่งที่การจำกัดโทเค็นหรือข้อความจะตรวจจับได้หลังจากนั้นเท่านั้น
หลักเกณฑ์พื้นฐานที่ปลอดภัยและเป็นรูปธรรม
สำหรับแอปพลิเคชัน AutoGen AgentChat ที่มีอยู่แล้ว ค่าพื้นฐานที่เหมาะสมคือ:
ควรตั้งค่าข้อความที่ชัดเจน จำนวนรอบ เวลาหมดอายุ หรือจำนวนโทเค็นสูงสุดเสมอ
นำค่าเพดานดังกล่าวมาผสานรวมกับเงื่อนไขการเสร็จสิ้นที่มีความหมายโดยใช้ OR เมื่อเงื่อนไขใดเงื่อนไขหนึ่งควรหยุดการทำงาน
ควรเลือกmax_tool_iterationsเครื่องมือขนาดเล็ก เว้นแต่ว่าตัวแทนจะต้องการลำดับขั้นตอนการใช้งานเครื่องมือหลายขั้นตอนจริงๆ
ส่งคืนผลลัพธ์จากเครื่องมือที่มีโครงสร้าง ซึ่งแยกแยะความสำเร็จ การไม่มีความคืบหน้า ข้อผิดพลาดที่สามารถแก้ไขได้ และข้อผิดพลาดถาวร
ไม่อนุญาตให้ผู้พูดคนเดิมพูดซ้ำ เว้นแต่ว่าขั้นตอนการทำงานจำเป็นต้องใช้ผู้พูดซ้ำ
ใช้ตัวเลือกแบบกำหนดค่าได้สำหรับเวิร์กโฟลว์แบบกำหนดค่าได้
กำหนดการส่งต่อข้อมูลให้ชัดเจน โดยกำหนดผู้รับผิดชอบและเส้นทางปลายทาง
รีเซ็ตทีมระหว่างงานที่ไม่เกี่ยวข้องกัน
ติดตามการเลี้ยวและตรวจจับการกระทำซ้ำๆ โดยที่สถานะไม่เปลี่ยนแปลง
สิ่งที่ไม่ควรทำ
อย่าแก้ปัญหาลูปทุกอันด้วยการเพิ่มค่าmax_messagesจาก 25 เป็น 100 เพียงอย่างเดียว เพราะนั่นจะเปลี่ยนต้นทุนของความล้มเหลว ไม่ใช่ตรรกะ อย่าเพิ่มข้อความแจ้งเตือนระบบที่ยาวขึ้นก่อนที่จะตรวจสอบว่าเงื่อนไขการยุติการทำงานนั้นถูกเชื่อมต่อเข้ากับทีมแล้วหรือไม่ อย่าปล่อยให้เอเจนต์สองคนเป็นเจ้าของ "การตรวจสอบขั้นสุดท้าย" ทั้งคู่ อย่าส่งคืนสตริงเครื่องมือที่ไม่ชัดเจนหากการเรียกใช้โมเดลครั้งต่อไปต้องตัดสินใจว่าจะลองใหม่หรือไม่ และอย่าคิดว่าการทำงานที่หยุดลงในที่สุดนั้นเป็นไปอย่างราบรื่น: เวิร์กโฟลว์ที่ถึงขีดจำกัดความปลอดภัยเสมอ ก็ยังคงทำงานผิดปกติอยู่ดี
เมื่อใดควรย้ายระบบแทนการแก้ไขแพทช์อย่างต่อเนื่อง
หากคุณกำลังดูแลรักษาแอปพลิเคชัน AutoGen ที่มีอยู่ การแก้ไขเหล่านี้เหมาะสม และเอกสารปัจจุบันยังคงใช้งานได้ อย่างไรก็ตาม สำหรับระบบใหม่หรือการเขียนโค้ดการจัดการกระบวนการทำงานใหม่ทั้งหมด สถานะโหมดการบำรุงรักษาจะเปลี่ยนการตัดสินใจ ปัจจุบัน Microsoft แนะนำผู้ใช้ใหม่ให้ใช้ Microsoft Agent Framework และเอกสารการย้ายข้อมูลอธิบายถึงการเปลี่ยนแปลงจากแกนหลักที่ขับเคลื่อนด้วยเหตุการณ์และทีมระดับสูงของ AutoGen ไปสู่เวิร์กโฟลว์แบบกราฟที่กำหนดประเภท นั่นไม่ได้หมายความว่าลูป AutoGen จะต้องถูกย้ายทันที แต่หมายความว่าคุณควรชั่งน้ำหนักต้นทุนของการทำงานด้านการจัดการกระบวนการทำงานเฉพาะของ AutoGen ที่ลึกซึ้งยิ่งขึ้น เทียบกับการย้ายไปยังเวอร์ชันที่ได้รับการสนับสนุน
ดังนั้น เส้นทางการแก้ไขข้อผิดพลาดที่สั้นที่สุดและน่าเชื่อถือที่สุดคือ: จำกัดขอบเขตการทำงาน ระบุการเปลี่ยนสถานะที่เกิดขึ้นซ้ำๆ ทำให้สามารถสังเกตความคืบหน้าได้ จากนั้นทำให้การออกจากโปรแกรมเป็นไปอย่างแน่นอน เมื่อองค์ประกอบทั้งสี่นี้ครบถ้วนแล้ว วงวน AutoGen ที่ "ไม่มีที่สิ้นสุด" ส่วนใหญ่จะกลายเป็นข้อผิดพลาดในขั้นตอนการทำงานทั่วไปที่คุณสามารถจำลองและแก้ไขได้
เอกสารอ้างอิงอย่างเป็นทางการ