痛点:传统 BI 为什么不够用
报表平台解决了「看数」问题,但在企业日常运营里仍有三类高频抱怨:
- 报表固定:销售总监临时想问「华东区 Q1 客户留存率同比」,往往要等 BI 排期加字段。
- 门槛高:业务同学不会写 SQL,指标口径散落在 Excel 与口头约定里。
- 响应慢:从提需求到上线一个新看板,周期常以周计。
Data Agent(数据智能体) 的目标,是让业务同学用自然语言提问,系统在秒级返回可解释、可审计、可复现的查询结果——而不是让大模型「编一个看起来合理的数字」。
Data Agent 的定义与边界
在本专题语境下,Data Agent 具备以下特征:
| 特征 | 说明 |
|---|---|
| 工具化 | 域分类、检索、SQL 生成、校验、执行、解释各自独立,可单测 |
| 元数据优先 | 指标定义、取数逻辑、表白名单存 MySQL,不靠 prompt 硬背 |
| 安全默认 | 只读 SELECT、表白名单、LIMIT 兜底 |
| 可澄清 | 缺时间周期等问题时主动追问,而非瞎查 |
| 可运营 | 口径缺口、用户反馈可沉淀为配置与规则 |
它与「聊天机器人 + 数据库连接」的本质区别:SQL 来自结构化取数逻辑,LLM 负责理解与解释,而不是直接生成可执行 SQL。
整体架构
1 | |
技术栈选型
| 层级 | 技术 | 职责 |
|---|---|---|
| 前端 | Vue 3 + Vite + Element Plus + ECharts | 工作台、问数抽屉、图表 |
| 后端 | Flask + 工具注册表 | REST API、工具链编排 |
| 元数据 | MySQL | bi_metric、bi_metric_extract_logic、bi_table |
| 向量 | Chroma + sentence-transformers | Markdown 知识 fallback |
| LLM | DeepSeek(OpenAI 兼容) | Agent 演示模式、未来 ReAct |
| Embedding | BAAI/bge-m3 | 中文指标与规则检索 |
核心模块说明
1. 意图识别(域分类)
用户问「华北区销售收入完成率」时,系统先从 bi_domain 与关联指标关键词判断业务域(如「销售运营域」),缩小检索范围,降低误命中。
2. RAG 检索
一次 retrieve_all 并行拉取 metrics、bi_models、business_rules,MySQL 关键词打分优先,向量库作为 Markdown 知识的 fallback。
3. SQL 生成
生产路径走 _build_sql_from_meta_logic:读取 bi_metric_extract_logic 中的表名、指标名、时间字段、默认过滤条件,模板化拼接 SQL。
4. 安全校验
validate_sql 四层检查:SELECT-only → 禁用 DML 关键字 → 表白名单 → sqlparse 语法。
5. 执行与解释
结果宽表查询后,规则模板生成自然语言摘要,并附带 ECharts 配置(柱状/折线/饼图/仪表盘)。
用户问题到 SQL 全链路
1 | |
演进路线:从 Agent 框架到 BI 平台
早期可基于通用 Agent 框架(工具注册 + ReAct 循环)快速验证问数可行性;上线后建议切换为 Direct Analyze 管道:
- 更少 LLM 调用:SQL 不经过模型「创作」,成本与幻觉双降
- 更易测试:
validate_data_pipeline.py可离线跑通全工具链 - 更易审计:每一步输入输出可落日志与
agent_flow可视化
保留 Agent 模式用于复杂多步推理的演进方向(见第 8 篇)。
元数据表一览(虚构示例)
| 表 | 作用 |
|---|---|
bi_domain |
业务域与关键词 |
bi_metric |
指标定义(销售收入、客户留存率…) |
bi_metric_extract_logic |
取数逻辑:表、字段映射、默认过滤 |
bi_table |
结果宽表白名单 |
bi_metric_gap |
口径缺口工单 |
qa_history / qa_feedback |
问答历史与用户反馈 |
本章小结
- Data Agent = 自然语言入口 + 元数据驱动 SQL + 安全执行 + 可解释输出
- 生产推荐 Direct 管道,Agent ReAct 作为演进选项
- 下一篇深入 Text-to-SQL 五步:域分类 → 指标检索 → 取数逻辑 → 时间解析 → SQL 组装
思考题
- 若让 LLM 直接写 SQL,在企业场景下最大的三个风险是什么?
- 元数据表与向量知识库分别适合承载什么类型的知识?
- 画出你所在团队的「问数」链路,标出最耗时的环节。
系列导航
| 篇 | 主题 |
|---|---|
| 01 | 本篇 |
| 02 | Text-to-SQL |
| 03 | RAG 指标库 |
| 04 | 多轮澄清 |
| 05 | 安全校验 |
| 06 | Vue3 工作台 |
| 07 | 演示验证 |
| 08 | 反馈闭环 |