[Feature Request]: Support Multiple Output Variables for Code Component

该请求发生在 RAGFlow Code 组件中,用户希望一次返回多个可独立引用的输出变量,但当前版本会因“只允许一个业务输出”而报错或配置失败。优先确认是否触发了 [Feature Request]: Support Multiple Output Variables for Code Compon

快速结论:该请求发生在 RAGFlow Code 组件中,用户希望一次返回多个可独立引用的输出变量,但当前版本会因“只允许一个业务输出”而报错或配置失败。优先确认是否触发了 [Feature Request]: Support Multiple Output Variables for Code Component 所对应的单业务输出限制,并改用返回单个字典结构配合点号引用。

适用环境:Issue 讨论中提及 RAGFlow v0.25.1+ 的 Code 组件(CodeExec);其余 Python、CUDA、显卡、操作系统版本未在讨论中确认,请勿按此推断。

最快修复方案:让 Code 组件只返回一个字典,例如 {"result": result, "status": status, "metadata": metadata},下游用 {CodeExec:YourComponent@output.result}、{CodeExec:YourComponent@output.status}、{CodeExec:YourComponent@output.metadata.confidence} 形式的点号引用访问嵌套字段。

注意事项:该方案不是真正的多输出,讨论明确指出独立命名输出变量(元组解包、UI 配置输出名、独立变量槽)尚不支持;Switch 等组件无法直接按字段做分支选择,可能仍需中间处理步骤。点号嵌套引用依赖相关嵌套遍历改进,旧版本行为可能不同。

问题场景

用户在 RAGFlow 的 Agent 流程中使用 Code 组件编写 Python 代码,希望同时返回处理结果、状态标记和元数据,并在下游组件中分别引用这些数据。由于 Code 组件当前只允许一个业务输出变量,用户无法为多个返回值分别命名,配置多个输出时会被契约校验拦截。

报错原文

[Feature Request]: Support Multiple Output Variables for Code Component
CodeExec contract must contain exactly one business output, got N

原因分析

可能原因是 Code 组件的 select_business_output() 函数强制要求每次执行有且仅有一个业务输出变量;当用户按多返回值方式配置时,输出数量不为 1,即触发 ContractError。该限制属于组件契约设计,并非运行时环境错误。讨论中也说明,现有能力仅支持返回单个结构化对象,再通过点号访问其字段,不支持真正的多个独立命名输出变量。

环境排查

  • 确认 RAGFlow 版本是否为 v0.25.1 及以上,因为讨论中的单业务输出约束基于该版本描述。
  • 确认 Code 组件的函数签名是否只声明并返回一个业务输出变量。
  • 检查下游变量引用是否使用 {CodeExec:组件名@output.字段} 形式,而非直接把多个变量当作独立输出槽引用。
  • 若引用嵌套字段失败,确认当前版本是否已包含嵌套遍历支持(讨论提及 PR #11504)。
  • Issue 未提供 Python、CUDA、PyTorch、显卡型号信息,这些不是本问题的已确认排查项。

解决步骤

  1. 将 Code 组件改为只返回一个字典,把需要的数据作为字典字段,例如 {"result": result, "status": status, "metadata": metadata}。
  2. 保持函数只声明一个返回类型,不要尝试用元组返回多个业务输出。
  3. 在下游组件中改用点号引用:{CodeExec:YourComponent@output.result} 获取结果,{CodeExec:YourComponent@output.status} 获取状态,{CodeExec:YourComponent@output.metadata.confidence} 获取嵌套数值。
  4. 如果确实需要把不同字段路由到不同分支,可优先尝试在流程中增加一个中间处理步骤,因为讨论指出 Switch 组件目前无法直接选择单个字段(该限制尚未确认在所有版本一致)。

验证方法

重新运行包含 Code 组件的流程,确认不再出现 CodeExec contract must contain exactly one business output 报错;并在下游组件的输出预览或调试信息中检查 @output.result、@output.status、@output.metadata.confidence 是否分别取到预期值。若某个字段为空,优先检查点号路径是否与返回字典的键名完全一致。

参考来源

infiniflow/ragflow #15098

讨论中引用的相关链接:code_exec.py 输出契约、#11868 点号引用、PR #11504 嵌套遍历、PR #15080 多输出提案。

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 31873

发表回复

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