![[Bug]:](https://www.chat-gpts.plus/wp-content/uploads/2026/06/12631-be7e80ae.jpg)
[Bug]: Agent 界面报错 “undefined” — JSON 解析失败:NaN 值导致 ExeSQL 返回不可序列化
快速结论:当 RAGFlow Agent 中的 ExeSQL 工具处理 SQL 查询结果时,如果数据库字段值为 NULL,pandas 会将其转为 NaN(例如 EXAMINE_TIMES: NaN),而 JSON 标准不支持 NaN,导致后端序列化出错,前端 Agent 界面显示 “undefined” 错误。优先排查所有从数据库返回并在后端序列化为 JSON 的数值字段是否含有 NaN。
问题场景
用户运行 RAGFlow v0.23.1(Docker 环境,Windows 11),在 Agent 界面(智能体模块)使用 ExeSQL 工具执行 SQL 查询时,界面报错 “undefined”。通过 Chrome 开发者工具查看网络请求,发现所有请求返回 HTTP 200,但其中一个返回响应无法被解析为 JSON。进一步检查发现响应内容中 EXAMINE_TIMES 字段值为 NaN,导致 JSON 解析失败。
报错原文
Agent 界面显示:undefined
Chrome Console 提示:返回响应无法被解析为 JSON(Unexpected token N in JSON at position ...)
后端可能无显式错误日志,但接口返回的响应体中包含类似:
{
"EXAMINE_TIMES": NaN,
...
}
原因分析
可能原因:在 RAGFlow 的 ExeSQL 工具或相关 Agent 工作流中,当 SQL 查询结果中的某个数值字段在数据库里为 NULL 时,pandas 或 numpy 会将其转换为 float('nan')(即 NaN)。标准的 Python json 模块无法序列化 NaN,因此在将 DataFrame 转为 dict 或 JSON 响应时会直接输出 NaN(非 JSON 标准值),导致前端 JSON.parse() 失败。目前 RAGFlow 后端在序列化 agent 输出(尤其是 ExeSQL 结果)时未内置对 NaN 的清理处理。
环境排查
- RAGFlow 版本:v0.23.1
- 镜像版本:
infiniflow/ragflow:v0.23.1 - 部署方式:Docker(Windows 11)
- 后端依赖确认:Python 环境中 pandas/numpy 的版本(通常随镜像内置)
- 数据库字段:检查与 ExeSQL 查询相关的表,确认是否有数值字段(如
EXAMINE_TIMES)存在NULL值
解决步骤
- 定位到 ExeSQL 或 Agent 输出序列化的代码段:在 RAGFlow 源码中,找到将 SQL 查询结果(DataFrame 或 rows)转换为 JSON 返回给前端的地方。相关文件参考
agent/canvas.py中序列化输出的逻辑(agent/canvas.py#L85-L316)。 - 在序列化前替换 NaN 为 None:在涉及 ExeSQL 结果转换(如
df.to_dict()或类似操作)之前,添加清理逻辑:
import pandas as pd
df = pd.DataFrame(rows)
df = df.where(pd.notnull(df), None)
# 然后进行后续的 dict/JSON 序列化
- 手动修补代码:由于 RAGFlow v0.23.1 没有内置此修复,需要用户自行修改后端代码。可优先尝试在
agent/canvas.py或 ExeSQL 工具对应的处理函数中,对返回的 DataFrame 或字典中的NaN值进行替换(NaN→None或NaN→0,推荐使用None以保留 NULL 语义)。 - 重启容器:修改代码后重新构建 Docker 镜像或重启容器使改动生效。
验证方法
在 Chrome 开发者工具中打开 Network 标签,重新执行 Agent 中触发错误的操作(通常涉及 ExeSQL 查询)。检查对应请求的响应体,确保不再包含 NaN 字样,且 JSON 解析正常。同时确认 Agent 界面不再显示 “undefined” 错误并能正确展示 SQL 查询结果。
参考来源
infiniflow/ragflow #12631(原始 Issue)



![[Question]: using latest image(v0.23.1) can not enable docling](https://www.chat-gpts.plus/wp-content/uploads/2026/06/12440-35fa5ab2-768x403.jpg)