第23章:结构化数据问答——SQL、Pandas 与业务报表
版本:LlamaIndex 0.12.x
定位:让 LLM 能读懂数据库和表格
源码关联:llama_index.core.indices.struct_store
1. 项目背景
某公司销售总监每周一早上雷打不动的第一件事:找数据工程师导出上周销售报表。数据工程师的"周一噩梦"流程是这样的——先听总监说需求(“给我拉一下华南区上个月卖得最好的三个产品”),然后用 10 分钟消化这句话到底是什么意思("最好"是指销售额最高还是利润率最高?),接着打开数据库工具写 SQL、Join 三张表、加条件过滤、跑查询、导出 Excel、邮件发送。整个过程平均耗时 2 小时。总监不止一次在周会上抱怨:“为什么不能我直接说话,系统就把数给我?我就要个排名而已,又不是写论文!”
这个场景揭示了 Text-to-SQL 的三大核心挑战:
(1) 自然语言歧义。"最好的产品"是销售额最高?利润最高?还是销售量最大?"上个月"是自然月还是近 30 天?同一个口语化表达在不同的业务上下文中可能有完全不同的 SQL 语义。关系型数据库对歧义的容忍度是零——SQL 语法差一个逗号都会报错。
(2) 表结构理解的鸿沟。LLM 不知道你的数据库里有哪些表、字段名叫什么、字段类型是什么。inventory_count可能是英文的"库存数量",但也可能是"盘点次数"。更糟糕的是,真实生产库往往有几十上百张表,字段命名风格各异(驼峰、下划线、拼音缩写),不提供结构描述 LLM 只
