Infinite loop in the quick start sample when registering additional agent

用户在运行 AutoGen Core 快速启动示例(Quick Start Sample)时,在已有 Modifier 和 Checker 代理的基础上注册了第二个 Modifier 代理(命名为 "modifier2"),运行时程序进入无限循环。

Infinite loop in the quick start sample when registering additional agent

Infinite loop in the quick start sample when registering additional agent

快速结论:在 AutoGen 0.4.2 版本中,向快速启动示例添加第二个 Modifier 代理时,由于所有代理订阅了同一个默认 topic,会导致消息级联触发形成无限循环。优先排查是否为多个代理共享同一个 topic 导致的消息互相触发。

问题场景

用户在运行 AutoGen Core 快速启动示例(Quick Start Sample)时,在已有 Modifier 和 Checker 代理的基础上注册了第二个 Modifier 代理(命名为 “modifier2″),运行时程序进入无限循环。

报错原文

程序没有报错终止,而是持续运行,进入无限循环。

原因分析

此问题源于简单示例中所有代理均订阅同一个默认 topic(DefaultTopicId)。当第一个 Modifier 发布消息后,第二个 Modifier 也会收到该消息,并发布新消息,而新消息又会触发第一个 Modifier 再次发布消息,形成级联消息链(cascading message chain),导致无限循环。

环境排查

  • AutoGen 版本:0.4.2
  • 操作系统:WSL(Linux)
  • Python 版本:未明确指定
  • 依赖包:autogen-core(版本需与 0.4.2 对应)

解决步骤

  1. 方案一(推荐):在 Modifier 代理的 handler 中添加终止条件(run_until)。修改 Modifier 类的 __init__ 方法,接受一个 run_until 参数(Callable[[int], bool]),在 handle_message 方法中检查消息内容是否满足终止条件。当满足条件时不发布新消息,停止循环。
  2. 在注册 Modifier 时传递 run_until lambda,例如:lambda: Modifier(modify_val=lambda x: x - 1, run_until=lambda x: x <= 1)
  3. 同理,为 Checker 代理添加 run_until 条件。
  4. 方案二(隔离方案):为每个 Modifier 使用独立的 topic。不再使用 @default_subscription 装饰器,而是为每个 Modifier 分配不同的 topic_type,并手动注册 TypeSubscription。
  5. 在 Modifier 类的 publish_message 中指定自己的 topic type,而非默认 DefaultTopicId()。
  6. 在 main 函数中注册 Checker 订阅所有 modifier topic,或通过 AgentId 直接发送消息。

验证方法

运行修改后的代码,观察控制台输出是否在预期次数后停止(例如显示 “reached the end, stopping”),且无无限循环现象。对于方案二,验证每个 Modifier 的消息是否仅在其自己的 topic 内传递,互不干扰。

参考来源

microsoft/autogen #5317

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 8562

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注