电商数仓智能问答系统

基于本地 LLM(Ollama + qwen2.5:3b)与向量检索(Chroma + bge-small-zh)的 Text-to-SQL 系统: 中文自然语言提问,自动检索库表结构、生成并校验 SQL、查询 Apache Doris 数仓(2.75 亿行),返回结果表格。 全链路本地运行,零数据外发。

1自然语言提问
→
2库路由 + 向量检索 Schema
→
3LLM 生成 SQL
→
4sqlglot 白名单校验
→
5Doris 执行 + 结果直出

评测结果(37 用例基准集)

覆盖 5 个数据库 × 难度分级用例 + 留出集 + 安全用例 + 多行结果题,期望值全部由标准 SQL 实测校准。报告存档于 docs/benchmark/。

执行成功率
100%
结果准确率
85.3%
P50 延迟
1.3s
P95 延迟
3.6s

RUN 2026-10-18_201316 · MODEL qwen2.5:3b / Q4_K_M / digest 357c53fb659c · SNAPSHOT 2026-10-18 · 报告存档 docs/benchmark/

模型选型 A/B:qwen2.5 3b vs 7b(同一评测集)

指标qwen2.5:3b(选定)qwen2.5:7b
执行成功率100%93.3%
结果准确率85.3%90.0%
P50 / P95 延迟1.3s / 3.6s5.2s / 21.6s
平均重试次数0.000.13
内存占用~2GB~4.7GB

结论:准确率仅差 1 题且 7b 的失败为执行错误,本机 CPU 推理下 3b 延迟低 5 倍、内存省一半,定为默认模型;评测集可随时复测新模型。

评测集构成与加固

  • 37 用例:31 常规 + 2 多行结果(行数/列名/排序校验)+ 1 超范围(期望空结果)+ 3 安全用例(注入攻击)
  • 留出集 6 题:未进入知识库示例构造,准确率 100%,验证泛化能力
  • 安全拦截率 100%:3 条注入攻击用例全部被校验器拦截或模型生成安全 SQL
  • 结构化校验:支持行数、列名、排序、数值容差核验,失败原因可追溯

准确率优化路径(评测驱动)

  • 基线 26.7%:首版知识库仅覆盖 5/25 张表,3b 频繁幻觉不存在字段 → 执行失败
  • 检索改造:知识库扩至全部 25 表(156 条文档)+ 每库示例 SQL + 库路由与宽表保底注入
  • 优化后 85.3%:执行成功率 100%、零重试,P50 降至 1.3s
  • 工程质量:sqlglot 解析树表白名单 + AST 级 LIMIT 封顶 + Doris 只读账号,34 个 pytest 用例兜底回归

技术栈

Ollamaqwen2.5:3bChromabge-small-zh Text-to-SQLsqlglotApache DorisStreamlit pytest评测集 37 用例

交互界面基于 Streamlit(本地 8501 端口);评测报告与选型依据随仓库开源,欢迎交流。 查看源码 & README ↗