Bugfix: 修复AgentNode返回error Event时AGUI连接被过早断开的问题 - #293
Conversation
AI Code Review这是 我现在已经有了所需的一切。正在撰写审查报告。 发现的问题🚨 Critical
|
| session_id=input.thread_id, | ||
| new_message=new_message, | ||
| run_config=run_config): | ||
| last_event_is_error = trpc_event.is_error() |
There was a problem hiding this comment.
裸 is_error() 误判可恢复工具错误为致命错误
last_event_is_error = trpc_event.is_error() 只看 error_code,会把携带 function_response 的可恢复工具错误也判为 True。若该错误恰为流末事件,循环结束会发出终止性 RunErrorEvent 导致客户端断连,违背本 PR 初衷。应改为 is_error() and not trpc_event.get_function_responses(),与 translator 判定一致。
5ca1ada to
dc1ffa3
Compare
AI Code Review我已经掌握了所需的全部上下文。现在让我来汇总一下审查结果。 关键分析点:
让我再检查一下:翻译器现在会在产生 让我再仔细核实一下 等等 —— 实际上还有另一个担忧。 现在让我最终确定。最具体、可验证的问题: 警告 1:流中间的致命错误对客户端而言可能不可见 / 无消费者处理。 警告 2:对“最后一个事件是错误”的判断对于先发生致命错误但运行未结束的情况较为脆弱。 实际上这是按设计行事的。但有一个具体的 Bug: 让我检查一下:在致命的 LLM 错误之后,GraphAgent 会产生尾随事件吗?根据提交信息,是的 —— “它会接着执行下一个Node”。所以如果下一个节点成功了,最后一个事件不是错误,没有 警告 3: 警告 4:缺乏新错误路径的测试。 翻译器测试将 让我再检查一下 开始撰写。基于我对 diff 及周边代码的分析,以下是我的审查结果。 发现的问题
|
问题: 部署成AGUI服务时,如果Agent产生Event带error,则会立即终止,但有的Agent并不是终止(比如GraphAgent),它会接着执行下一个Node,之前产生Event带error时,将会返回RunErrorEvent事件,导致连接被断开 解决方案: AGUI服务端,在收到Event时,不立即返回RunErrorEvent,如果服务是最后一个Event包含错误(Agent此时已经结束),则再发送RunErrorEvent
dc1ffa3 to
226844c
Compare
AI Code Review现在我已经有了完整的认识。测试辅助工具将 发现的问题
|
问题
部署成AGUI服务时,如果Agent产生Event带error,则会立即终止,但有的Agent并不是终止(比如GraphAgent),它会接着执行下一个Node,之前产生Event带error时,将会返回RunErrorEvent事件,导致连接被断开
解决方案
AGUI服务端,在收到Event时,不立即返回RunErrorEvent,如果服务是最后一个Event包含错误(Agent此时已经结束),则再发送RunErrorEvent
验证
构造复现示例:GraphAgent包含两个AgentNode(error_node -> normal_node),通过AgUiAgent SSE stream消费事件流
修复前:RunErrorEvent在第6个event就发出,但Agent继续执行到第23个event,连接被过早断开
修复后:error改为CustomEvent(trpc_error),Agent继续执行,stream以RunFinishedEvent正常结束