快速结论:该报错发生在 RAGFlow 0.26.0 的 Agent(智能体)画布中,当添加“问题分类节点”或“路由分类与条件节点”时,工作流状态在序列化进入 SSE 响应流时泄漏了内部使用的 functools.partial 对象,导致 json.dumps() 无法序列化。优先排查 RAGFlow 版本是否为 0.26.0 及是否使用了分类/路由类节点。
适用环境:RAGFlow 0.26.0(Docker CPU 版本,容器名 ragflow-cpu-1),模型调用链路包含 LiteLLM(deepseek-v4-pro)与本地 bge-m3 向量模型;此问题与报告的 Docker 日志环境一致。
最快修复方案:暂无官方已合并的补丁版本。可优先尝试在容器中修改 agent_api.py(约第 289 行附近)的 json.dumps() 调用,为其增加 default 参数:default=lambda o: None if callable(o) else str(o);或修改 /ragflow/api/utils/json_encode.py 中 default 方法加入 if callable(obj): return None。
注意事项:以上修改属于本地临时补丁,不是官方发布版本,后续升级 RAGFlow 可能会被覆盖;Issue 中提到的 PR #14210 尚未合并,因此该修复未经过官方完整验证,建议仅在测试环境先行验证,并关注该 PR 的合并进度。
问题场景
用户在 RAGFlow 0.26.0 的 Agent 编排界面中构建流程,基础节点(如普通对话/检索)可以正常工作。当额外添加“路由分类与条件节点”或“问题分类节点”时,流程保存或执行阶段抛出 JSON 序列化错误,Docker 日志中能看到完整报错与模型调用记录。用户在日志中可以看到分类模型实际已正确输出了“提取数据”等结果,说明 LLM 调用本身成功,问题出在节点结果回传工作流状态时。
报错原文
TypeError: Object of type partial is not JSON serializable
原因分析
这是一个序列化缺陷:RAGFlow 为支持延迟流式执行,内部使用 functools.partial 包装后续调用。分类节点或路由节点在生成结果后,其返回对象中携带了尚未被消费的 partial 对象。当工作流状态被序列化并以 SSE(Server-Sent Events)推送到前端时,json.dumps() 无法处理 partial 这类可调用对象,因而抛出 TypeError。
可能原因还包括:RAGFlow 在版本 0.26.0 中,SSE 序列化路径(agent_api.py)未设置 json.dumps 的 default 兜底处理函数;同时仓库内的自定义 JSON 编码器 json_encode.py 同样没有为可调用对象提供 fallback。社区已有对应修复 PR(#14210),但尚未合并进主分支。
环境排查
- 确认 RAGFlow 版本为 0.26.0(
docker exec ragflow-cpu-1 cat /ragflow/VERSION或其他方式核验) - 确认是使用 Docker 部署的 CPU 版本(容器名为
ragflow-cpu-1) - 检查模型配置中是否通过 LiteLLM 接入大模型,并确认 bge-m3 本地向量模型的调用方式
- 复现时只添加分类节点或路由节点,删除其他无关节点,判断是否仍能触发
解决步骤
- 进入容器:
docker exec -it ragflow-cpu-1 bash - 备份原文件:
cp /ragflow/api/apps/restful_apis/agent_api.py /ragflow/api/apps/restful_apis/agent_api.py.bak - 编辑
/ragflow/api/apps/restful_apis/agent_api.py,定位到 ≈289 行或 ≈315 行附近,找到json.dumps(ans, ensure_ascii=False) - 改为:
json.dumps(ans, ensure_ascii=False, default=lambda o: None if callable(o) else str(o)),保存退出(可优先尝试该方案) - 重启 RAGFlow 容器或相关 API 服务使改动生效
- 另一种可选的辅助补丁(若问题仍存在):编辑
/ragflow/api/utils/json_encode.py,在其default方法中加入if callable(obj): return None并重启 - 升级或关注官方合并状态:跟踪 PR #14210,待官方修复合入后升级到包含修复的版本
验证方法
重启服务后,回到 Agent 画布重新添加“问题分类节点”或“路由分类与条件节点”,运行一次对话或直接保存该 Agent 流程;若不再出现 TypeError: Object of type partial is not JSON serializable,且前端画布能正常显示分类结果,则说明补丁生效。也可以在容器内持续查看日志确认无新报错。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: minimum_should_match fraction is truncated, not rounded, in every full-text doc-store connector](https://www.chat-gpts.plus/wp-content/uploads/2026/09/19027-c05031a9-768x403.jpg)

![[BUG] Gemini native provider never appends trailing user turn -> 400 'Requests ending with a model turn are not supported'](https://www.chat-gpts.plus/wp-content/uploads/2026/09/6984-b83b3d42-768x403.jpg)