DatI:给AI接入数据库,Agent时代的NL2SQL问数与多维表格应该怎么做

一、起源:Agent 时代如何与数据库交互

我的前两段职业经历都是围绕BI。开始主要是给一线业务做报表,有过用SQL写数据服务,高代码开发看板,也有使用Tableau、PowerBI、永洪BI做自助分析。第二段工作就转向自建BI系统,适逢大模型风起云涌,后来产品聚焦在智能问数(ChatBI)方向上,不过问数能力可以做出吸引人的Demo,但是没法真正让业务深入使用。主要问题有两点:

  1. 当时模型能力有限,为了提升准确率,我们采用了NL2DSL的技术路线,但是DSL也限制了分析的能力。
  2. 在实际交付项目中,客户需要的并不是一个单独的Data Agent,更多的是想把NL2SQL能力集成到各种工作任务中。

去年 MCP 发布后,我觉得直接把数据库发布为 MCP 工具,再加上简单的元数据维护,就是一个轻量化的 NL2SQL 组件,集成到 Agent 中足够完成灵活的分析工作了。下面就是初版的结果: DatI (Data Intelligence)

DatI 的核心思路非常克制:对接数据库,维护元数据,提供预置工具、自定义工具并发布为MCP服务。将 MCP 集成至用户的 Agnet,即可实现数据分析,而且允许增、删、改操作后,也可实现轻量化的后台管理应用。

二、案例:从数据分析到轻应用构建

下面用一个 家庭记账 的案例来对平台使用以及应用场景做演示。该场景中,有两个用户,共用一个家庭账本,记账时自动识别用户计入各自的消费,分析的时候可以按整个家庭维度进行分析。

首先是 DatI 平台配置(提供 dati-ops skill,自动化进行配置),有3张表(account, category, transaction), 开启 4 个预置工具:元数据检索,表清单,表详情,SQL执行(只允许Select操作),增加4个自定义工具:初始化账户、记账、改账、删除流水

生成MCP服务后,用户1 接入WorkBuddy,用户2 使用千问办公,就可以使用它们已有的能力(微信远程调用、OCR识别、数据可视化等)进行记账与分析

三、拆解:轻量数据库语义网关的架构与实现

DatI 整体由三部分构成:

  1. 数据接入:当前支持MySQL、PostgreSQL、ClickHouse、Doris、MariaDB,扩展新的数据库支持也比较简单; 为什么后台语言用Java: 当前Python、Typescript、Rust是 AI 领域更流行的语言, 但后端仍采用 Java构建,核心在于 JDBC 与 HikariCP 在数据库基础设施领域具备极高稳定性、完善的连接池治理能力及成熟的驱动生态
  2. 语义建模:表、列、列值、业务术语均支持配置别名、描述等,为大模型提供精准的业务上下文;
  3. MCP服务构建:选定数据范围,通过配置工具、Prompt即可发布为标准MCP服务; 为什么选用MCP协议:相比本地 Skill,MCP 更适合企业级 Web 服务形态。数据库连接凭证在服务端集中托管与鉴权,终端用户仅需配置个人 Token,既保障了凭证安全,又实现了元数据与工具规则的一处配置、全员复用。
工具的设计与实现

工具是整个MCP服务的核心,主要工具如下:

预置工具
  • 元数据检索:我们将数据范围内的表、列、枚举值和业务术语打平统一存储在 Elasticsearch 中。Agent 仅需一次关键词检索,即可利用倒排索引一次性召回高度关联的表结构与业务上下文;
  • 表清单、表结构查询:这两个工具用来让 Agent 探索表空间
  • 受控SQL执行:这里我们让大模型直接写SQL,但是会做操作类型管控,可配置是否允许insert、delete、transaction等操作
  • 元数据更新:支持更新表、列、术语的元数据,支持在实际使用中进行元数据维护,让工具可以自演化,越用越好用;
自定义工具
  • 参数化SQL:针对复杂多表关联或高风险操作,可以通过配置SQL模板,动态生成可执行SQL,模板引擎采用了类handlebars的语法,支持动态SQL,也支持获取用户信息以便做权限管控。

    UPDATE transaction SET
    {{#if amount}}amount = {{amount}},{{/if}}
    {{#if category}}category_id = (SELECT id FROM category WHERE name = {{category}}),{{/if}}
    updated_at = now()
    WHERE id = {{transaction_id}} AND user_name = {{_user.name}}

四、定位:与现有方案对比

给大模型接入数据库,这个想法并不新颖,各种产品/库非常多,从简单的数据库标准MCP/skill以及通用连多数据库的DBHUB、MCP Toolbox到ChatBI,甚至现在代码开发门槛极大降低,直接让大模型开发具体的应用可能在几个小时就能搞完。那么DatI的价值在哪,我认为它的定位是:专为 Agent 设计的企业级数据库语义网关。与现有方案对比,DatI 的定位差异主要体现在数据安全性业务语义沉淀 以及工作流嵌入度上:

评估维度 DatI 代码 官方 DB MCP/Skill DBHUB/MCP Toolbox 独立 ChatBI
接入形态 服务端 MCP 任意形态 本地MCP 本地MCP 独立 App
凭证管理 服务端托管 视实现而定 本地明文配置 本地明文配置 服务端托管
语义层 支持业务语义 根据场景定制 标准schema 标准schema 支持业务语义
复杂查询保障 预置探索 + 参数化 SQL 模板 高代码定制工具 支持自定义工具 绑定固化报表与 DSL
工作流嵌入度 高(任意 MCP 宿主可集成) 极高 低(通过有限API或SDK集成)

总结来说,DatI 能够同时解决以下几个问题:

  1. 安全管控:数据库需要集中管理,用户在授权范围内操作;
  2. 元数据配置:Agent 能正确执行工具和执行SQL的必要上下文注入;
  3. 灵活性:任意 Agent 或者业务应用均可快速集成;
  4. 效率:低代码开发、免部署;
  5. 多数据源:支持主流数据库;

五、演进:欢迎体验、吐槽与共建

一个工具的生命力依赖于真实场景的打磨。在这里诚挚邀请各位来试用并给出你们的宝贵意见,最好可以一起完善它。

开源项目地址:https://github.com/yimindev/dati

相关推荐
MetaLite1 小时前
Java 时间处理的两个坑:单位误判,半秒算成一秒
java·开发语言·前端
Wang's Blog2 小时前
Java框架快速入门: Spring Security+OAuth2之实现UserDetails与GrantedAuthority深度定制
java·spring·mybatis
deepseek232 小时前
MCP 2026-07-28 Tasks扩展深度解析:从无状态协议到长时运行任务的架构演进
ai agent·分布式系统·协议设计·mcp·无状态协议·tasks扩展
Amberish2 小时前
26Java细节知识点总结
java
钱栈up2 小时前
qoder CLI 1.0.45 本地小说生成工作流搭建:Feature Gate 配置与长文本断连排查从死锁到全流程跑通:Python德州扑克项目的优化
java·前端·数据库
代码调试师2 小时前
【毕设分享】springboot攀枝花生鲜电商平台58990
java·vue.js·spring boot·后端·架构·eclipse·课程设计
xcl09252 小时前
全民健身解决方案小程序系统开发实战:从架构设计到上线指南
java·spring boot
洛阳泰山2 小时前
别卷 Python 了:我用 Java 21 + Spring Boot 3 打造了一个企业级 RAG + 智能体工作流引擎(附架构与源码解析)
java·spring boot·后端
MetaLite2 小时前
Spring Cache只留注解-MetaLite如何二开缓存运行时
java·spring·缓存