Skip to content

TIS ChatBI 系统需求与设计概要文档 #495

Description

@baisui1981

一、项目背景与目标

  • 背景:当前企业数据仓库(基于 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 关系通常暗示需要 SUMCOUNT)。

规则与指标

  • 计算规则:存储复杂指标的计算公式。例如,毛利率 = (销售额 - 成本) / 销售额
  • 约束规则:定义数据有效性。例如,订单状态 枚举值含义(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 注释中提取本体信息。
  • 风险:检索召回率低。
  • 应对:采用“关键词 + 向量”混合检索模式;引入“同义词”机制(如将“营收”映射为“销售额”)。
    你觉得这份设计文档的逻辑框架符合你的预期吗?
    为了让方案更完善,我可以继续帮你做以下调整:
  1. 补充细节:需要我针对“本体层”补充具体的JSON/YAML 定义示例吗?
  2. 丰富场景:需要增加几个具体的用户问答与系统处理流程的对比案例吗?
  3. 调整侧重:如果这份文档是汇报给非技术高管看的,需要我将其改写为更侧重业务价值的版本吗?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions