问题出现得很突然,日志倒是留得挺全。AutoGen 0.4 的 RoundRobinGroupChat 里放了三个 agent,任务描述里写了完成后输出 TERMINATE,跑了四十多轮还在互相客气,max_turns 设成 10 也没生效,日志显示每轮都正常结束但群聊继续。

刚开始盯着「agent 输出被包装成结构化消息,TERMINATE 不在纯文本字段」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。终止条件挂在 team 上而不是 agent 的回复里,字符串匹配没触发。少数情况下是max_turns 写在构造参数的额外 kwargs 里被忽略。

还有一种情况,群聊用的是 handoff 模式,轮次统计按参与者分别计。

先把每条消息的类型和文本打出来

python -c "print('inspect msg.type and msg.content for TERMINATE')"

随后改用 TextMentionTermination 显式声明条件

python -c "from autogen_agentchat.conditions import TextMentionTermination;print(TextMentionTermination('TERMINATE'))"

再往下把文本条件与轮次上限一起传给 team

python -c "from autogen_agentchat.conditions import MaxMessageTermination,TextMentionTermination;print(MaxMessageTermination(12) | TextMentionTermination('TERMINATE'))"

剩下的就是跑一次任务确认在第十二条消息停下

python -c "print({'expect_messages': 12, 'stop_reason': 'MaxMessageTermination'})"

怎么算真的好了,看的是同一批现象。任务在十二条消息内结束,返回的 stop_reason 明确指出是文本命中还是轮次上限,重跑同一任务停止位置一致。

补一句。提示词里写终止词只是软约束,真正生效的是 team 上的 termination 对象,两个都要配但别指望前者。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189