一、项目背景与目标
- 背景:当前企业数据仓库(基于 Apache Doris)包含大量数据表(100+),业务人员通过自然语言查询数据时,面临“表名与业务术语不一致”、“上下文Token限制”、“复杂业务逻辑无法理解”等痛点。
- 目标:构建一个基于“本体论 + GraphRAG + MCP”架构的智能 ChatBI 系统。该系统能够精准理解业务意图,自动检索相关元数据,生成符合 Doris 方言的高质量 SQL,实现“所问即所得”的数据分析体验。
二、核心架构设计
系统采用分层架构,核心由“语义层(本体建模)”、“检索层(GraphRAG)”和“执行层(MCP + LLM)”组成。
架构分层
- 用户层:接收自然语言提问(如“上个季度业绩最好的销售是谁?”)。
- 语义层:基于本体论构建的知识图谱,存储实体、关系、规则和指标定义。
- 检索层:GraphRAG 引擎,负责根据用户问题在图谱中检索相关上下文。
- 执行层:利用 Doris MCP Server 动态获取物理表结构,结合 LLM 生成 SQL。
- 数据层:Apache Doris 数据库(存储物理表与数据)。
三、本体论建模需求(语义层)
为了解决物理表与业务含义的鸿沟,需在外部系统(如向量数据库或图数据库)中构建轻量级本体。
实体定义
- 概念实体:将物理表抽象为业务对象。例如,物理表
fact_order 映射为业务实体 订单。
- 属性映射:定义实体的业务属性。例如,
订单 实体包含 下单时间、支付金额 等属性,并关联到具体的物理字段。
关系定义
- 关联路径:明确实体间的连接方式,解决 Join 路径问题。例如:
销售员 --(完成)--> 订单。
- 基数约束:定义关系类型(1:1, 1:N, M:N),辅助 LLM 判断聚合逻辑(如 1:N 关系通常暗示需要
SUM 或 COUNT)。
规则与指标
- 计算规则:存储复杂指标的计算公式。例如,
毛利率 = (销售额 - 成本) / 销售额。
- 约束规则:定义数据有效性。例如,
订单状态 枚举值含义(0-待支付,1-已完成)。
四、功能流程设计(GraphRAG + MCP)
这是解决“100张表Token浪费”问题的核心流程。
意图识别与图谱检索
- 输入:用户自然语言问题。
- 动作:系统提取关键词(如“业绩”、“销售”),在知识图谱中进行向量检索或子图匹配。
- 输出:筛选出与问题最相关的 N 个实体(如
销售员、订单)及其关联的物理表名列表(如 ['dim_salesman', 'fact_order'])。
动态上下文构建
- 动作:系统调用 Doris MCP Server 的
get_table_schema 工具。
- 参数:仅传入上一步筛选出的表名列表。
- 获取:获取这 N 张表的 DDL、字段注释和示例数据。
SQL 生成与执行
- Prompt 组装:
系统提示词 + 检索到的业务规则 + 动态获取的物理表 DDL + 用户问题。
- 生成:LLM 生成精准 SQL。
- 执行:通过 MCP 或直连 Doris 执行查询并返回结果。
五、关键技术指标
| 模块 |
关键指标 |
说明 |
| 上下文管理 |
Token 效率 |
仅传递相关表(如 2-5 张)的元数据,而非全库 100+ 张表。 |
| 语义理解 |
准确率 |
通过本体映射,解决“业绩”对应 gmv 字段的语义对齐问题。 |
| SQL 生成 |
可执行性 |
生成的 SQL 必须符合 Doris 方言,且 Join 路径正确。 |
| 扩展性 |
解耦 |
本体层与物理层解耦,物理表变更只需更新映射,无需重训模型。 |
六、实施路线图
阶段一:基础语义层构建
- 梳理核心业务表(Top 20)。
- 在外部系统中定义实体、属性及简单的表关联关系。
阶段二:GraphRAG 链路打通
- 部署 Doris MCP Server。
- 开发检索服务:实现“问题 -> 实体 -> 物理表名”的映射逻辑。
阶段三:规则与指标注入
- 在图谱中增加“计算规则”节点。
- 优化 Prompt 工程,使 LLM 能够读取规则并生成复杂表达式。
七、风险与应对
- 风险:图谱构建成本高。
- 应对:初期不追求全量本体,仅覆盖高频查询场景;利用 LLM 辅助从 DDL 注释中提取本体信息。
- 风险:检索召回率低。
- 应对:采用“关键词 + 向量”混合检索模式;引入“同义词”机制(如将“营收”映射为“销售额”)。
你觉得这份设计文档的逻辑框架符合你的预期吗?
为了让方案更完善,我可以继续帮你做以下调整:
- 补充细节:需要我针对“本体层”补充具体的JSON/YAML 定义示例吗?
- 丰富场景:需要增加几个具体的用户问答与系统处理流程的对比案例吗?
- 调整侧重:如果这份文档是汇报给非技术高管看的,需要我将其改写为更侧重业务价值的版本吗?
一、项目背景与目标
二、核心架构设计
系统采用分层架构,核心由“语义层(本体建模)”、“检索层(GraphRAG)”和“执行层(MCP + LLM)”组成。
架构分层
三、本体论建模需求(语义层)
为了解决物理表与业务含义的鸿沟,需在外部系统(如向量数据库或图数据库)中构建轻量级本体。
实体定义
fact_order映射为业务实体订单。订单实体包含下单时间、支付金额等属性,并关联到具体的物理字段。关系定义
销售员--(完成)-->订单。SUM或COUNT)。规则与指标
毛利率= (销售额-成本) /销售额。订单状态枚举值含义(0-待支付,1-已完成)。四、功能流程设计(GraphRAG + MCP)
这是解决“100张表Token浪费”问题的核心流程。
意图识别与图谱检索
销售员、订单)及其关联的物理表名列表(如['dim_salesman', 'fact_order'])。动态上下文构建
get_table_schema工具。SQL 生成与执行
系统提示词+检索到的业务规则+动态获取的物理表 DDL+用户问题。五、关键技术指标
gmv字段的语义对齐问题。六、实施路线图
阶段一:基础语义层构建
阶段二:GraphRAG 链路打通
阶段三:规则与指标注入
七、风险与应对
你觉得这份设计文档的逻辑框架符合你的预期吗?
为了让方案更完善,我可以继续帮你做以下调整: