现代AI系统写SQL的能力令人印象深刻。给大语言模型一个数据库模式,它往往能在几秒钟内生成语法正确的查询语句。搭配检索增强生成、数据库元数据和函数调用,把AI接入企业数据库变得前所未有的简单。
但大量企业AI项目上线后,都撞上了同一个问题:SQL确实成功执行了,可返回的答案仍然是错的。
这通常不是模型本身的毛病。
根子出在“关系”上。
绝大多数AI驱动的数据库助手,工作流程都差不多:用户提出问题,系统检索数据库模式,大模型据此生成SQL,然后去数据库执行,最后把结果返回给用户。这套流程建立在一个关键假设之上——数据库模式里包含了足够多的信息,能让AI理解数据之间是怎么关联的。
可惜,企业数据库很少按这个剧本走。
在教程里,关系简单明了。客户表连着订单表,订单表又连着发票表。每条关系都定义得清清楚楚,每个外键都老老实实存在,每张表都遵循同一套建模规范。
但生产环境的数据库完全是另一副面孔。各个系统是独立设计出来的,表与表之间经常存在联系,却没有数据库层面的约束。应用程序之所以能理解这些关联,是因为开发者在多年前就把逻辑写死在代码里了,而数据库本身往往对此一无所知。
很多人会想到一个讨巧的办法:靠匹配字段名来推断关联。customer_id在两个表里都出现了,它们铁定有关系。有时候这招确实管用,有时候却错得离谱。customer_code和account_number,名字完全不同,背后代表的却是同一个业务实体。
企业系统经过多年演进,命名规范变来变去,列被随意复制,临时表成了常驻居民。光靠列名,根本拼不出真实的数据模型。
一个更大的误解在于,很多人以为关系只存在于元数据里。事实上,更靠谱的证据常常藏在数据本身。比如订单表和客户表,两者之间没有任何外键约束,但如果订单中某个客户ID出现的频率与客户表中该ID的分布高度吻合,这种“锁和钥匙”般的契合度就是一条强力信号,说明这段关联是真实存在的。
类似信号还有很多:数值范围是否重叠、时间序列是否对齐、业务标识符的交叉频率如何。与命名规范不同,这些证据直接来自数据本身,不依赖任何人的标注习惯。
当然,发现关系还只是第一步。找到潜在的关联线索之后,更大的挑战在于验证——怎么确认推断出来的关系是准确的?怎么确保AI基于这些关系生成的查询能持续产出正确结果?这需要一个把发现、验证、反馈串联起来的闭环,让系统在每次查询中逐步校准自己对数据模型的理解。
企业数据环境从来不是静态的。表结构在变,业务逻辑在演进,隐藏在数据里的关系网络也在持续重构。对AI而言,真正要解决的不是“会不会写SQL”,而是“能不能像资深工程师一样读懂数据背后那张动态变化的关系网”。
热门跟贴