Skip to content

修复ReAct Adapter覆盖合法workflow全局变量和ReAct Adapter丢失falsy和结构化workflow输出的问题 - #147

Open
openjiuwen-sync-bot[bot] wants to merge 1 commit into
openJiuwen-ai:studio-2.0-devfrom
openjiuwenai:sync/pr-1744
Open

修复ReAct Adapter覆盖合法workflow全局变量和ReAct Adapter丢失falsy和结构化workflow输出的问题#147
openjiuwen-sync-bot[bot] wants to merge 1 commit into
openJiuwen-ai:studio-2.0-devfrom
openjiuwenai:sync/pr-1744

Conversation

@openjiuwen-sync-bot

@openjiuwen-sync-bot openjiuwen-sync-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

Paired: GitHub #147GitCode !1744

What type of PR is this?
/kind bug

Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入

    • 设计:PR对应的方案是否已经经过Maintainer评审,方案检视意见是否均已答复并完成方案修改
    • 测试:PR中的代码是否已有UT/ST测试用例进行充分的覆盖,新增测试用例是否随本PR一并上库或已经上库
    • 验证:PR描述信息中是否已包含对该PR对应的Feature、Refactor、Bugfix的预期目标达成情况的详细验证结果描述
    • 接口:是否涉及对外接口变更,相应变更已得到接口评审组织的通过,API对应的注释信息已经刷新正确
    • 文档:是否涉及官网文档修改,如果涉及请及时提交资料到Doc仓

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

1 similar comment
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@openjiuwen-collaboration-bot

openjiuwen-collaboration-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

head_sha: 361403c4a91627c47825366bf9e91face9858ff2

变更摘要

此 PR 修复了 ReactWorkflowAdapter 中的两个核心缺陷:一是工作流全局变量 sys 中的 conversationId/userId 被随机 UUID 和空串覆盖,导致记忆检索失效与会话状态错位;二是 falsy 值(如 0False、空集合)和结构化工作流输出(origin_answeruserFields)被意外丢弃。修复通过从请求上下文解析真实身份、改用键存在性检查替代真值判断、并保留完整结构化 payload 来实现。

主要改动

  • Session 派生方式优化ReactWorkflowAdapter.invoke 中不再无条件创建随机 session_id 的 workflow session,改为优先通过 agent_session.create_workflow_session() 派生,保留与 AgentSession 的血缘关系和真实 conversation_id,仅在无 AgentSession 时回退到旧逻辑。

  • 身份字段来源修复_convert_inputs 中新增从 _request_ctx(由 RequestContextMiddleware 注入)获取真实 conversationIduserId 的逻辑,替代原来的随机 UUID 和空串;新增 _resolve_identity 静态方法封装解析过程,非 HTTP 场景安全返回空值。

  • Falsy 输出保留:将 message_end 分支的判断从真值检查 if message_result: 改为键存在性检查 if "answer" in payload:,并用独立标志 fallback_present 标记是否已产出答案,确保 0/False/[]/{} 等合法 falsy 值不被丢弃。

  • 结构化输出支持workflow_final 分支现在保留完整 payload(而非仅取 answer 字段),最终返回时优先取 origin_answer(结构化消息输出),并透传 userFields;非 dict 类型的 payload 自动包装为 {"answer": payload}

  • 回退逻辑细化:最终答案选择阶段明确区分"未产出"(answer is None)、"空串"(answer == "")与"合法 falsy 值",仅在 answerNone 或空串时才回退到 message_end 的兜底答案,其余 falsy 值原样保留。

@openjiuwen-collaboration-bot

openjiuwen-collaboration-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

head_sha: 361403c4a91627c47825366bf9e91face9858ff2

代码审查

审查结束总结

审查文件: agent-runtime/agent_runtime/runner/react_workflow_adapter.py — 已审查。

发现汇总: 共 3 个问题。

优先级 数量 说明
P2 2 边界类型崩溃(_convert_inputs 非 dict 输入)、缺少新逻辑测试覆盖
P3 1 except Exception 过于宽泛(_resolve_identity)

整体风险评估: 中等风险。核心的 falsy 值保留、结构化输出支持、AgentSession 派生等逻辑设计合理,注释清晰。主要风险在于 _convert_inputs 对异常输入(global_variables 非 dict)从旧代码的"静默覆盖"退化为 TypeError 崩溃,以及新增的大量逻辑缺少自动化测试回归保护。建议合入前至少修复 P2 的 _convert_inputs 类型安全问题并补充关键路径单元测试。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: 361403c4a91627c47825366bf9e91face9858ff2

TASK STATUS DETAILS
CodeCheck ❌FAILED Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ✅SUCCESS Click here
Npm Build ✅SUCCESS See CHECK tab
Ruff Check ✅SUCCESS See CHECK tab
UT测试 ✅SUCCESS 点此跳转

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants