AI在线 AI在线

RAGFlow v0.20的Agent重大更新:text2sql的Agent案例测试

RAGFlow 在 8 月 4 号更新了 v0.20 版本,这是时隔两个多月之后,更新的一个里程碑式的版本,RAGFlow 在 Agent 板块的拼图这次终于算是完整了。 其实早在一年前,RAGFlow 就有了 Agent 模块,但是一直只包含 Workflow。 而且相比于 Dify 而言,社群对这部分的工具/插件的丰富度、易用性和 UI 美观度而言,一直也有吐槽。

RAGFlow v0.20的Agent重大更新:text2sql的Agent案例测试

RAGFlow 在 8 月 4 号更新了 v0.20 版本,这是时隔两个多月之后,更新的一个里程碑式的版本,RAGFlow 在 Agent 板块的拼图这次终于算是完整了。其实早在一年前,RAGFlow 就有了 Agent 模块,但是一直只包含 Workflow。而且相比于 Dify 而言,社群对这部分的工具/插件的丰富度、易用性和 UI 美观度而言,一直也有吐槽。

图片

过去大半年,市场上也出现了很多 RAGFlow 知识库+Dify 工作流的各种混合用法。这也说明了从产品定位上来说,RAGFlow 更偏向于一个专业的 RAG 引擎。而 Dify 则把工作流编排作为核心竞争力之一,投入了更多资源在易用性和社区建设上。不过随着 RAGFlow 在企业级应用中的不断深入,或许会催生出更多标准化的集成需求,从而为其工作流插件生态的发展带来新的可能性。

言归正传,这篇试图说清楚:

这篇来做个 text2sql 的简单 RAGFlow agent 的案例演示,顺便介绍下这次的主要 Agent 更新特性。选题是来自官方公众号一周前发布的一篇关于 SQL Assistant 的 demo 基础上,优化了数据样例和测试问题,但出现了增加了验证与自修复环节的报错,最后也会对比下在 Dify 上实现效果。

以下,enjoy:

1、版本升级参考

为了方便不熟悉版本升级的盆友操作,这里再简要介绍下相关操作。由于数据卷是独立于容器的,新的容器会重新挂载已存在的数据卷,从而保留历史项目文件。

图片

所以为了升级 v0.20(或者最新的 0.21),不需要重新部署。修改 ragflow/docker/.env 文件,更新 RAGFLOW_IMAGE 变量为你想要升级到的版本号。然后运行下述 Docker 命令会拉取 .env 文件中指定的新版本镜像,并使用新的镜像重新创建和启动容器。

图片

复制

2、工作流逻辑

先看下工作流的整体架构,以及关键节点的配置操作。然后在正式测试前我会再介绍下知识库和数据库的相关配置。

图片

2.1三个检索节点

图片

Schema:返回表结构片段(召回参数放宽,保证至少返回一条,用作硬约束)。

Question to SQL:召回 few-shot SQL 示例。

Database Description:返回字段语义/同义词(可选,易超时时可暂时移除)。

2.2生成节点(SQL Generator)

图片

system prompt 放“角色/输出规范”,从三个检索节点注入上下文。

user prompt 只放 {sys.query}(最佳实践:把用户问题与系统上下文分层,避免被覆盖)。

图片

注:官方演示文章中这部分是错误的,如果把三个知识库的输出变量放在 user prompt 中,会被实际用户消息覆盖,导致 LLM 收不到 Schema 示例而不触发生成。应把检索到的上下文注入 system prompt(或模型的“上下文位”),user 仅放用户提问。

图片

值得注意的是,在Agent节点中可以选择添加平台内置的工具或者MCP,也可以选择嵌套其他的Agent。

2.3执行节点(ExeSQL)

图片

读取生成的 SQL,连接本机 MySQL。参照下述配置:库 test,用户 root,密码 ragflow,端口 3306。主机按运行位置三选一:127.0.0.1 / host.docker.internal / 实际 IP

图片

注意配置完数据库后,在执行节点做下连通性测试。

3、知识库构成

先用 Schema.txt 锁定可用表与字段 → 用 Database Description EN.txt 做语义对齐与别名映射 → 召回 QuestiontoSQL_mysql.csv 的最相近示例做 few-shot 参考并生成/修正 SQL。

图片

不建议直接使用官方提供的 Huggingface 样例数据,实际测试发现有以下问题:

Snowflake/PG 方言(ILIKE、DATE_PART、三段式 db.schema.table)、掺杂解释文字/Markdown、外部数据集引用、部分语句残缺、中英文重复等问题,和本地 MySQL 架构不匹配。

3.1Schema.txt(结构真相/DDL)

让模型知道真实的表/字段/约束,防止“编字段”;同一份 DDL 也用于实际建表。

切片方法:General、文本块大小:2 Token、文本分段标识符: “ ; “

图片

3.2Database Description EN.txt(业务语义)

用自然语言解释表/字段,提供同义词/口径,帮助从中文/英文问题映射到正确字段。

切片方法:General 建议文本块大小:2 Token 文本分段标识符:##

图片

3.3QuestiontoSQL_mysql.csv(few-shot 示例)

“问题→SQL”成对样例,严格使用 MySQL 8 方言,且字段/表只来自 Schema.txt 的 users/products/merchants。覆盖单表筛选、JOIN、聚合/HAVING、时间过滤、排序/TopN 等常见模式。

配置切片方法为 Q&A

图片

4、数据库配置

4.1Schema_ordered.sql

与 Schema.txt 等价,但按依赖顺序建表:merchants → users → products,避免外键引用表未创建导致的导入报错。

图片

4.2seed.sql

插入更“像真实数据”的分布(价格/库存/类别/时间差异、零库存、空描述、商家分配不均),便于测试 TopN、时间、HAVING、多指标聚合;脚本会先 TRUNCATE 三表再插入。已修复外键映射,确保 merchant_id 一定落在实际存在的商家集合。

图片

5、实际测试

5.1问题测试

统计最近 7 天每天新增的用户数量,按日期从早到晚展示

选择理由:覆盖时间过滤与按日分组;检验是否用 MySQL 的日期函数(如 DATE()、INTERVAL),避免方言错误。

图片

更多测试用例各位可以自由探索,完整的工作流json文件及测试文档已发布至知识星球。

图片

5.2扩展报错

我尝试增加了验证与自修复环节的处理逻辑,但是报错显示 CodeExecParam 。这是由于平台端定义的“代码节点工具”的参数模型/适配器。缺失这个任何 Code 节点都会在解析阶段失败。

图片

这通常由“后端版本不含代码工具/未开启安全开关/版本不匹配”导致。我没有具体研究如何解决,感兴趣的盆友可以再具体测试下。

总结来说,还是期待RAGFlow的Agent组件后续保持快速迭代。目前版本看起来,相比在Dify上实现类似功能,似乎还有很多核心节点的稳定性和延展性上做不少优化工作。

相关资讯

卓世科技:text2SQL技术浅谈

text2sql 技术是一种将自然语言(NL)转化为可被数据库执行的结构化查询语言 SQL 的技术。 自然语言可以是我们熟悉的一段文本,也可以是一段语音,又或者是其它可转化为文本的输入形式。     通过该技术,能够让不懂数据库操作的非技术人员提取、分析数据,无需学习编写 SQL 语句,无需了解不同 SQL 数据库的使用软件,通过输入文本描述的问题需求,即可得到对应需求下的数据结果。
2/27/2025 10:05:00 AM
特邀精选

告别SQL!四大技术重构数据查询:Text2SQL/RAG/TAG/MCP谁主沉浮?

想象这样的场景:市场部新来的实习生对咖啡机说:“帮我查华东区过去半年销量TOP3的爆款饮品,按周环比增长率排序。 ”系统秒速生成动态报表——这不再是科幻片桥段,而是自然语言查询技术带来的现实革命。 随着大模型突破性发展,企业数据正从“程序员黑箱”迈向“全员可探”的新纪元。
4/21/2025 4:10:00 AM
推推君

Text2SQL案例演示:信贷风控策略场景(Coze工作流版)

半个月前,知识星球中有个关于 text2sql 的讨论,后续又陆续有成员私信沟通。 这篇节取了个目前手头项目的 MVP (最小可行化)版本,来和各位做个分享交流,也希望听到来自不同场景的最佳实践。 这篇试图说清楚:信贷风控策略迭代场景的标准流程、Text2SQL 三类技术方案,MVP 版本的 Coze text2sql 工作流,以及对人机协同的一些碎片思考。
6/16/2025 2:00:00 AM
韦东东
  • 1