Skip to main content
Version: 5.1.0

本体推理技能 - AI 辅助语义层建设

本体推理技能(Infer Ontology From LLM) 是 TIS 最具革命性的 AI 能力之一,它能够从已有的表结构中自动推断出关联关系、共享属性、值约束和业务术语等本体资源,将原本需要数小时甚至数天的手动建模工作压缩到几分钟内完成。

为什么需要本体推理

传统建模的痛点

在构建企业级语义层时,数据建模师需要手动完成以下工作:

  1. 分析表结构:逐个查看每张表的字段、类型、注释
  2. 识别关联关系:找出哪些字段是外键,表之间如何 JOIN
  3. 提取共享属性:发现多张表中重复出现的字段(如 create_timestatus
  4. 定义值约束:根据业务规则,为字段添加枚举值、取值范围等约束
  5. 编写业务术语:整理业务名词与数据库表/列的映射词典

这些工作:

  • 耗时长:一个中等规模的数据仓库(50 张表)可能需要 2-3 天
  • 易出错:人工识别外键关系容易遗漏或判断错误
  • 门槛高:需要同时熟悉业务语义和数据库设计

AI 推理的优势

维度传统手动建模AI 推理技能
效率数小时到数天5-10 分钟
准确率依赖人工经验90%+(高置信度建议)
覆盖度容易遗漏边缘关系全面扫描,不遗漏
可控性-人工审核,保留最终决策权

能推断哪些本体资源

1. LinkType(关联关系)

自动识别表之间的关联关系,支持三种关联类型:

关联类型识别依据示例
ObjectTypeForeignKeys某表的列名为 xxx_id,且另一张表名为 xxx 并有 id 主键orders.user_idusers.id(一对多)
JoinTableDataset某表只有两个外键列组成联合主键,分别指向两张实体表user_roles 表(仅 user_id + role_id)连接 usersroles(多对多)
BackingObjectType某表有两个外键列,但还有其他业务属性列order_items 表(order_id + product_id + quantity)(带属性的多对多)

AI 如何判断

  • 分析字段命名模式(xxx_idxxxIdfk_xxx
  • 检查是否存在同名表(user_id 对应 userusers
  • 识别联合主键组合
  • 读取列注释中的外键说明

2. SharedProperty(共享属性)

提取多张表中重复出现的相同语义字段。

识别依据

  • 至少在 2 张表中出现相同名称且相同类型的列
  • 常见共享属性:create_timeupdate_timestatusis_deletedcurrency_codeversion

价值

  • 确保同一语义字段在不同表中类型一致
  • 方便批量更新定义(如统一时区格式)
  • 减少重复配置

3. ValueType(值约束)

为字段定义取值约束,包括枚举值、范围约束、正则表达式等。

识别依据

约束类型识别线索示例
Enum列注释中包含枚举值列表注释:"状态:PENDING/PAID/SHIPPED" → 生成枚举约束
Range列类型暗示范围VARCHAR(3) + 列名 country_code → 范围约束(3个字符的国家代码)
Regex列注释中包含格式说明注释:"手机号格式:1[3-9]\d{9}" → 正则约束

价值

  • 数据质量校验
  • 前端表单自动生成下拉框
  • ChatBI 查询时理解合法取值

4. Glossary(业务术语词典)

将业务口语化表达映射到本体实体,支持 ChatBI 自然语言查询。

三种映射类型

类型映射目标示例
GlossaryTargetOT映射到某个 ObjectType术语"客户" → customer 表,同义词:["用户","User","buyer","购买方"]
GlossaryTargetProperty映射到某列术语"订单金额" → orders.amount,同义词:["金额","总额","订单总额"]
GlossaryTargetMetricExpr映射到 SQL 表达式术语"总销售额" → SUM(orders.amount),同义词:["销售总额","GMV"]

AI 如何生成同义词

  • 中文 ↔ 英文互译
  • 业务术语 ↔ 技术名词(如"客户"与"user")
  • 口语化表达(如"卖了多少钱"与"销售额")
  • 行业术语(如电商领域的"GMV")

以下是 Glossary 推理结果示例,包含术语、同义词、目标类型

使用流程(5 步)

本体推理是一个多步骤配置流程,采用"分批推理、逐步确认"的策略:

步骤 1:基本配置

在这一步完成

  • 打开本体域技能

  • 选择 LLM Provider(大语言模型)

  • 选择要分析的 ObjectType(最多 30 张表)

选择 LLM Provider

推荐的模型(按推理能力排序):

  1. Claude Sonnet / Opus:推理能力强,尤其擅长分析复杂关系
  2. GPT-4 / GPT-4 Turbo:平衡推理能力与速度
  3. 通义千问 Max:国内推荐,中文理解好,性价比高
  4. DeepSeek Chat:性价比最高,适合中小规模表

注意:推理任务对 LLM 要求较高,不推荐使用 turbo3.5 等轻量级模型。

选择目标表

从本体域中已导入的 ObjectType 列表中,勾选要分析的表。

限制

  • 最多同时分析 30 张表(防止 LLM 推理超时)
  • 所有选中的表必须已设置主键(系统会自动校验)

建议

  • 首次使用:选择 5-10 张核心表,熟悉流程
  • 批量推理:分多次运行,每次 20-30 张表

步骤 2:配置推理提示词(非关联关系)

在这一步完成

  • 编辑 ValueType 推理提示词
  • 编辑 Glossary 推理提示词
  • 编辑 SharedProperty 推理提示词

什么是推理提示词

提示词(Prompt)是指导 LLM 如何分析表结构的"任务说明书"。TIS 提供了默认提示词,但用户可以根据业务特点自定义。

默认提示词包含的内容

  • 任务目标(如"从表结构中提取枚举约束")
  • 识别规则(如"列注释中包含多个斜杠分隔的值,如 PENDING/PAID/SHIPPED")
  • 置信度判断标准(如"有显式注释 → high,根据命名推断 → medium")
  • 输出格式要求(结构化 JSON Schema)

何时需要自定义提示词

  • 特殊命名约定:公司内部有特定的字段命名规范(如 f_xxx 表示外键)
  • 行业术语:行业有专门的业务术语体系(如金融、医疗)
  • 多语言环境:表注释是英文,但业务术语需要中文

示例: 假设公司规定所有外键字段以 fk_ 开头,可以在 LinkType 提示词中添加:

识别外键的额外规则:
- 字段名以 fk_ 开头,如 fk_user 指向 user 表

步骤 3:审核并接受建议(非关联关系)

在这一步完成

  • LLM 自动分析表结构,返回 ValueType、SharedProperty、Glossary 的推理结果
  • 用户逐条审核,勾选要接受的建议
  • 点击"保存",系统创建选中的本体资源

推理结果的呈现

每条建议包含以下信息:

字段说明示例
名称资源名称status_enum(ValueType)
类型本体资源类型ValueType / SharedProperty / Glossary
置信度high / medium / lowhigh(列注释中明确标注枚举值)
描述AI 生成的说明"订单状态枚举:待支付、已支付、已发货"
详细配置可展开查看完整定义枚举值列表:PENDING, PAID, SHIPPED

如何判断是否接受

  • high 置信度:通常准确率 >95%,可直接接受
  • medium 置信度:基于命名约定推断,需要人工核对
  • low 置信度:AI 不确定,建议仔细审核或拒绝

审核技巧

  • 优先审核 high 置信度建议,快速处理大部分正确结果
  • 对 medium/low 置信度建议,展开详细配置检查
  • 遇到不确定的建议,可以先跳过,后续手动创建

步骤 4:配置 LinkType 推理提示词

在这一步完成

  • 编辑 LinkType(关联关系)推理提示词

为什么 LinkType 单独推理

关联关系的推理比其他资源更复杂

  • 需要综合分析多张表之间的关系
  • 涉及外键约束、命名模式、业务逻辑
  • 错误的关联关系会严重影响 ChatBI 查询准确性

因此,TIS 将 LinkType 推理放在独立步骤,让用户有更多时间调整提示词和审核结果。

LinkType 提示词的关键要素

  • 外键命名规则:如 xxx_id 指向 xxx 表的主键
  • 关联表识别规则:如何判断一张表是"中间关联表"
  • 特殊前缀/后缀:如 fk__ref_link
  • 置信度判断:显式外键约束 → high,命名推断 → medium

步骤 5:审核并接受 LinkType 建议

在这一步完成

  • LLM 返回 LinkType 推理结果
  • 用户逐条审核,勾选要接受的关联关系
  • 点击"保存",系统创建选中的 LinkType

LinkType 推理结果示例

关系名称源表目标表关联类型置信度说明
orders_to_usersordersusersObjectTypeForeignKeyshighorders.user_id → users.id(一对多)
user_rolesusersrolesJoinTableDatasethigh通过 user_roles 表关联(多对多)
order_itemsordersproductsBackingObjectTypemedium通过 order_items 表关联,含数量等属性

审核要点

  • 验证外键字段:确认源表的字段确实指向目标表的主键
  • 检查关联类型:确认是一对多、多对多还是带属性的多对多
  • 考虑业务合理性:AI 推断的关系是否符合业务逻辑

常见误判场景

  • 字段名相似但无实际关联(如 order_idold_order_id
  • 历史遗留字段已不再使用
  • 跨业务域的表不应建立关联

使用最佳实践

1. 准备工作

确保表结构清晰

  • 所有表都有明确的主键
  • 字段命名遵循一致的约定(如外键统一使用 xxx_id 格式)
  • 列注释尽量详细(AI 会读取注释获取上下文)

补充表和列的描述

  • 在 ObjectType 的 description 字段填写业务含义
  • 为关键字段添加注释,说明取值范围、业务规则

2. 分批推理

不要一次性推理所有表

  • 首次使用:选择 5-10 张核心表,熟悉流程
  • 熟悉后:每次 20-30 张表(接近上限)
  • 优先推理核心业务表,再推理辅助表

优势

  • 避免 LLM 推理超时
  • 逐步验证效果,及时调整提示词
  • 降低一次性审核压力

3. 迭代优化提示词

第一次推理后

  • 检查 medium/low 置信度建议的准确率
  • 如果某类错误频繁出现,调整对应提示词
  • 例如:AI 总是把 xxx_code 误判为外键 → 在提示词中明确"code 后缀通常不是外键"

积累领域知识

  • 保存优化后的提示词模板
  • 新建本体域时复用模板,提升首次推理准确率

4. 交叉验证

使用多个 LLM 推理同一批表

  • Claude 和 GPT-4 对同一张表的推理结果通常有 80%+ 的重合
  • 重合的建议往往是高准确率的
  • 分歧的建议需要人工仔细判断

与传统方法结合

  • 将 AI 推理结果与数据库的 SHOW CREATE TABLE 对比
  • 检查是否有显式的 FOREIGN KEY 约束被遗漏

5. 审核技巧

批量接受高置信度建议

  • 先筛选出所有 high 置信度建议,快速浏览后批量勾选
  • 节省时间,聚焦在 medium/low 置信度上

展开查看详细配置

  • 对于重要的 LinkType,务必展开查看源字段、目标字段是否正确
  • 对于 ValueType 枚举约束,检查枚举值是否完整

遇到疑问时保守处理

  • 不确定的建议先跳过,后续手动创建
  • 宁可少推理几条,也不要接受错误的关联关系

常见问题

Q1:为什么有些明显的外键关系没有被推理出来?

可能原因

  • 字段命名不符合常规模式(如 uid 而不是 user_id
  • 目标表名与字段名差异较大(如 customer_no 指向 clients 表)
  • 表或列的注释缺失,AI 缺少上下文

解决方法

  • 在 LinkType 提示词中补充公司特定的命名规则
  • 为关键字段添加注释说明其外键含义
  • 对于漏推理的关系,手动创建 LinkType

Q2:推理结果中有很多错误建议怎么办?

可能原因

  • 选择的 LLM 推理能力不足
  • 提示词过于宽泛,导致 AI "过度推理"
  • 表结构本身不规范(如字段命名混乱)

解决方法

  • 更换推理能力更强的模型(如 Claude Opus、GPT-4)
  • 在提示词中增加"排除规则"(如"不要将 _code 后缀的字段判断为外键")
  • 标记表结构不规范的表,暂时跳过推理,优先整理表设计

Q3:推理任务超时或失败怎么办?

可能原因

  • 选择的表数量过多(超过 30 张)
  • 单张表的列数过多(>100 列)
  • LLM 服务响应慢或限流

解决方法

  • 减少每次推理的表数量(降到 15-20 张)
  • 对于超大表,先简化表结构(只保留核心列)再推理
  • 更换 LLM Provider 或稍后重试

Q4:如何评估推理质量?

量化指标

  • 准确率 = 接受的建议数 / 总建议数
  • 召回率 = AI 推理出的关系数 / 实际存在的关系数(需要人工统计基线)

经验阈值

  • high 置信度建议准确率通常 >90%
  • 整体准确率 >80% 视为良好
  • 如果准确率 <70%,建议调整提示词或更换 LLM

持续优化

  • 记录每次推理的准确率
  • 根据错误类型迭代提示词
  • 建立"黄金标准数据集"(人工标注的正确关系),定期测试新提示词

Q5:推理后还能修改吗?

可以

  • 接受的建议创建为本体资源后,可以在对应的编辑页面修改
  • 例如:修改 LinkType 的关联字段、调整 ValueType 的枚举值
  • 修改后的资源不会再被推理覆盖

不会丢失

  • 推理历史记录保留,可以回看 AI 的原始建议
  • 拒绝的建议不会自动再次出现(除非重新运行推理)

技术说明(高级)

本节面向对技术细节感兴趣的用户,非必读。

推理流程概览

  1. 收集上下文:系统提取所有选中 ObjectType 的表结构(表名、列名、类型、主键、注释)
  2. 构造 Prompt:将表结构序列化为结构化文本,附加用户自定义的推理提示词
  3. 流式推理:调用 LLM Structured Output API,要求返回符合 JSON Schema 的结果
  4. 增量解析:LLM 以流式方式返回结果,系统实时解析并展示在界面上
  5. 用户确认:用户勾选建议后,系统批量创建本体资源
  6. 落盘存储:创建的资源保存到 TIS 的 PluginStore(XML 文件)

使用的 LLM 能力

  • 结构化输出(Structured Output):强制 LLM 返回符合预定义 JSON Schema 的结果,避免解析失败
  • 流式响应(Streaming):支持大批量推理时实时展示进度
  • 上下文窗口:推理 30 张表约需 10K-20K tokens 的上下文窗口

数据安全性

  • 不上传敏感数据:只上传表结构(metadata),不上传实际数据行
  • 本地处理:所有推理结果在 TIS 服务器本地处理,不会回传给 LLM 服务商
  • 可配置 LLM:支持使用自建 LLM 服务(如私有化部署的通义千问)

相关文档