业务知识接口与工具

业务知识用于把 Data Agent 中的语义层建模结果输出给 AI 员工、第三方系统或实施工具使用。它返回的是当前空间、当前用户可见的业务语义元数据,包括业务对象、字段、指标和关系;它不返回订单、客户、合同等业务明细数据。

本文中的业务知识对应系统内置工具 getBusinessKnowledge 和接口:

POST /api/schema:getBusinessKnowledge

可组合工具总览

第三方系统可以把 Data Agent 的能力拆成多个工具组合使用。常见组合如下:

工具作用典型输入典型输出
getBusinessKnowledge获取语义层业务知识schemaIdsschemaSidsSchema、字段、指标、Schema Edge、指标分析思路
askAlisa查询业务数据标准化后的自然语言问题查询结果、图表数据、data-visualizer id
attribution归因分析“日期范围 + 指标 + 以及同期/环期/目标”维度贡献度、差异拆解、归因结论
webSearch联网搜索搜索关键词互联网搜索结果和引用来源
searchKnowledgeBase检索内部文档知识库检索问题文档片段、来源文件、相关资料

一个典型第三方 AI 机器人可以这样组合:

  1. 先调用 getBusinessKnowledge 获取业务对象、指标口径、指标分析思路和 Schema Edge。
  2. 如果用户要查具体数值,调用 askAlisa
  3. 如果用户问“为什么变化”“差异由什么造成”,调用 attribution
  4. 如果问题涉及外部事实、新闻、政策或实时信息,调用 webSearch
  5. 如果问题涉及企业制度、产品手册、FAQ、实施文档等内部资料,调用 searchKnowledgeBase

getBusinessKnowledge 更像“业务语义地图”,其他工具负责执行查询、归因或检索。第三方系统可以根据意图路由选择一个或多个工具,而不是把所有问题都交给同一个接口。

和知识库检索的区别

系统中容易混淆的两个工具如下:

工具作用输出内容
getBusinessKnowledge获取语义层业务知识Schema、字段、指标、指标分析思路、字段关联、Schema Edge、指标关系
searchKnowledgeBase检索文档知识库文档片段、来源文件、相似度检索结果

如果目标是让 AI 理解“有哪些业务对象可以问、字段和指标是什么意思、对象之间怎么关联”,应使用 getBusinessKnowledge。如果目标是查询制度、产品手册、FAQ、流程文档等非结构化资料,应使用 searchKnowledgeBase

适用场景

AI 员工业务理解

AI 员工在回答业务问题前,可以调用 getBusinessKnowledge 获取可用的业务对象、字段、指标和关系。这样模型可以先确认“用户提到的概念是否存在于业务语义层”,再决定如何回答或调用数据查询工具。

例如用户问“订单转化率按客户等级怎么看”,AI 可以先获取业务知识,确认是否存在订单、客户、客户等级、转化率等对象和指标。

自然语言查数

自然语言查询需要把用户问题映射到结构化数据模型。业务知识可以帮助查询链路判断:

  • 应该使用哪个 Schema。
  • 应该选择哪些字段或指标。
  • 字段是否有同义词、枚举值或业务说明。
  • 多个业务对象之间是否存在可用的关联路径。
  • Schema Edge 是否定义了业务流程上的先后关系、推荐分析路径或非物理外键关系。

BI Copilot 和报表助手

报表助手可以使用业务知识完成图表推荐、维度下钻、指标解释和口径说明。例如在生成图表前,先确认某个指标属于哪个业务对象,哪些字段适合作为分组维度。

数据目录和业务词典

第三方系统可以把业务知识作为数据目录或业务词典使用,展示当前用户可见的业务对象、字段、指标、同义词、枚举值和业务说明。

业务知识图谱

前端知识图谱页面也使用该接口拉取数据,然后根据 schemasrelations 中的 schema_edgemetric_relation 绘制业务关系图。

建模审查和影响分析

实施人员可以用该接口检查语义层建模结果,例如:

  • 某个字段是否已暴露给 AI。
  • 某个 Schema 是否有可用指标。
  • Schema Edge 的 joinOn 是否完整。
  • 指标之间是否存在依赖关系。

权限与数据边界

接口和工具会按照当前请求上下文裁剪结果:

  • 只返回当前 x-spaces 指定空间中的业务知识。
  • 只返回当前登录用户有权限访问的 Schema。
  • 字段会按列权限过滤;无字段权限的字段不会出现在输出中。
  • 默认只返回启用状态的 Schema Edge。
  • 返回的是语义元数据,不返回业务明细数据。

因此,第三方系统拿到的是“当前用户可见的业务语义地图”,不是全局裸数据库字典。

API 调用方式

请求地址

POST /api/schema:getBusinessKnowledge

请求头

Header必填说明
Authorization: Bearer <token>登录 token 或 API key。
x-spaces: <space>指定空间,例如 defaultsinopharm
Content-Type: application/json请求体使用 JSON。

请求参数

参数类型必填说明
schemaSidsstring[]只获取指定 Schema SID 的业务知识。为空时返回当前用户可见的所有 Schema。
schemaIdsstring[]只获取指定 Schema ID 的业务知识。为空时返回当前用户可见的所有 Schema。
includeDisabledSchemaEdgesboolean是否包含禁用的 Schema Edge。默认为 false

schemaSidsschemaIds 可以同时传入。接口会在当前用户可见范围内取交集式过滤;请求了但无权限或不存在的 Schema,会体现在 missingRequestedSchemaSidsmissingRequestedSchemaIds 中。

获取全部可见业务知识

curl 'http://localhost:13000/api/schema:getBusinessKnowledge' \
  -H 'Authorization: Bearer <token>' \
  -H 'x-spaces: default' \
  -H 'Content-Type: application/json' \
  --data '{}'

只获取指定 Schema

curl 'http://localhost:13000/api/schema:getBusinessKnowledge' \
  -H 'Authorization: Bearer <token>' \
  -H 'x-spaces: default' \
  -H 'Content-Type: application/json' \
  --data '{
    "schemaIds": ["order", "customer"]
  }'

也可以按 sid 过滤:

curl 'http://localhost:13000/api/schema:getBusinessKnowledge' \
  -H 'Authorization: Bearer <token>' \
  -H 'x-spaces: default' \
  -H 'Content-Type: application/json' \
  --data '{
    "schemaSids": ["schema_order_sid", "schema_customer_sid"]
  }'

包含禁用的 Schema Edge

实施检查或知识图谱编辑场景下,可能需要查看禁用的 Schema Edge:

curl 'http://localhost:13000/api/schema:getBusinessKnowledge' \
  -H 'Authorization: Bearer <token>' \
  -H 'x-spaces: default' \
  -H 'Content-Type: application/json' \
  --data '{
    "includeDisabledSchemaEdges": true
  }'

响应结构

接口响应形态如下:

{
  "knowledge": {
    "spaceName": "default",
    "selectedSchemaSids": ["schema_order_sid"],
    "selectedSchemaIds": ["order"],
    "requestedSchemaSids": [],
    "requestedSchemaIds": [],
    "missingRequestedSchemaSids": [],
    "missingRequestedSchemaIds": [],
    "summary": {
      "schemaCount": 1,
      "propertyCount": 3,
      "metricCount": 1,
      "relationCount": 1,
      "propertyRefRelationCount": 0,
      "schemaEdgeRelationCount": 1,
      "metricRelationCount": 0
    },
    "schemas": [],
    "metrics": [],
    "relations": []
  }
}

summary

字段说明
schemaCount返回的业务对象数量。
propertyCount返回的字段数量。
metricCount返回的指标数量。
relationCount返回的关系总数。
propertyRefRelationCount字段引用关系数量。
schemaEdgeRelationCountSchema Edge 关系数量。
metricRelationCount指标关系数量。

schemas

schemas 表示业务对象列表。

{
  "sid": "schema_order_sid",
  "id": "order",
  "name": "订单",
  "type": "fact",
  "description": "订单业务对象",
  "db": "main",
  "from": "dwd_order",
  "properties": [
    {
      "sid": "property_amount_sid",
      "id": "amount",
      "name": "订单金额",
      "type": "number",
      "semanticType": "currency",
      "fieldType": "decimal",
      "description": "订单实付金额",
      "syno": ["金额", "销售额"],
      "enumValues": []
    }
  ]
}

常用字段说明:

字段说明
sid业务对象的稳定标识。
id业务对象 ID,通常更适合给人阅读或在实施文档中引用。
name业务对象显示名。
type业务对象类型。
description业务说明。
db数据源标识。
from对应的物理表、视图或来源。
properties当前用户可见的字段列表。

properties

properties 表示业务对象下的字段。

字段说明
sid字段稳定标识。
id字段 ID。
name字段显示名。
type业务字段类型。
semanticType语义类型。
fieldType底层字段类型。
description字段说明。
ref关联目标 Schema SID。
refSchemaId关联目标 Schema ID。
refSchemaName关联目标 Schema 名称。
syno同义词。
enumValues枚举值。

metrics

metrics 表示业务指标列表。

{
  "sid": "metric_gmv_sid",
  "id": "gmv",
  "name": "销售额",
  "type": "measure",
  "description": "订单金额求和",
  "prompt": "分析销售额时,优先按时间趋势、区域、客户类型、产品分类拆解,并结合订单数和客单价判断增长来源。",
  "ask": "按订单金额求和,剔除已取消订单",
  "calculationType": "atomic",
  "schemaSid": "schema_order_sid",
  "schemaId": "order",
  "schemaName": "订单",
  "syno": ["GMV", "成交额"],
  "isObservation": false,
  "isAdditive": true
}

常用字段说明:

字段说明
name指标名称。
description指标说明。
prompt指标分析思路,面向大模型的分析提示词。
ask业务口径,适合给 AI 用来解释或生成查询。
calculationType指标计算类型。
compositeGenType组合指标生成类型。
schemaSid / schemaId / schemaName指标所属业务对象。
syno指标同义词。
isObservation是否观察值。
isAdditive是否可加。
components组合指标的组成项。

prompt 是指标级的数据分析思路沉淀。它可以把公司内部对某个指标的分析方法固化下来,例如“先看趋势,再按区域和产品拆解”“需要同时关注分子、分母和目标值”“异常波动优先排查渠道、价格和客群变化”等。

这个字段适合直接提供给外部 AI 机器人或第三方 Agent 使用。它解决的不是“指标怎么算”,而是“拿到指标后应该怎么分析、怎么解释、怎么归因”。和其他指标字段的分工如下:

字段主要回答的问题面向对象
description这个指标是什么用户和 AI
ask这个指标怎么算、怎么查查询引擎和 AI
prompt这个指标应该怎么分析大模型、分析 Agent、第三方机器人
components这个指标由哪些子指标组成指标血缘、归因和组合计算

因此,第三方 AI 在调用 askAlisa 查到指标结果后,可以继续读取该指标的 prompt,按公司沉淀的方法生成分析结论,而不是只做通用的同比、环比描述。

relations

relations 表示业务关系,当前主要有三类。

property_ref

字段关联关系,表示某个字段引用另一个业务对象。

{
  "kind": "property_ref",
  "sourceSchemaSid": "schema_order_sid",
  "sourceSchemaId": "order",
  "sourceSchemaName": "订单",
  "sourcePropertySid": "property_customer_id_sid",
  "sourcePropertyId": "customer_id",
  "sourcePropertyName": "客户ID",
  "targetSchemaSid": "schema_customer_sid",
  "targetSchemaId": "customer",
  "targetSchemaName": "客户"
}

schema_edge

Schema Edge 表示业务对象之间的流程边或业务流转关系。目前边类型主要是 process,关系类型主要是 precedes,即“前置于”。

它不是数据库外键的简单复制。数据库外键、字段 ref 或物理表 Join 通常只能说明“两个表可以通过哪个字段连接”,但很难表达“业务上谁先谁后、谁推动谁、应该沿哪条路径解释问题”。Schema Edge 用来补充这类业务语义。

Schema Edge 适合表达以下数据层面难以直接表达的关系:

能力数据层通常能否表达Schema Edge 的表达方式
业务流程先后很难。数据库只保存记录,不知道流程语义。sourceSchema -> targetSchemarelationType: precedes 表示前置关系。
业务链路名称很难。Join 本身没有“销售流程”“履约流程”等名称。processName 标记流程名称。
关系语义说明很弱。字段名和外键约束无法承载完整业务解释。namedescription 说明这条边的业务含义。
推荐分析路径很难。多张表之间可能存在多条可连接路径。用启用的 Schema Edge 告诉 AI 和图谱优先沿哪条业务路径理解。
非强约束关系很难。很多数仓表没有外键,甚至不允许建外键。joinOn 描述可连接字段,同时不要求数据库存在外键约束。
跨模型业务流转很难。事实表、宽表、汇总表之间可能没有物理主外键。sourceSchemaSidtargetSchemaSidjoinOn 明确业务对象关系。
AI 可读的对象关系很弱。SQL 元数据对大模型不友好。输出为 schema_edge JSON,直接告诉 AI “哪个业务对象前置于哪个业务对象”。

例如,数据库里可能只有 order_nocontract_nocustomer_id 等字段,数据层能说明字段可以 Join,但无法稳定表达“线索 -> 商机 -> 订单 -> 合同 -> 回款”是一条销售业务链路。Schema Edge 可以把这些 Schema 串成带方向、带流程名、带说明的业务图,供 AI 员工、知识图谱和实施检查使用。

典型使用方式:

  • 流程理解:告诉 AI “订单前置于合同”“合同前置于回款”,回答流程追踪类问题。
  • 漏斗分析:表达线索、商机、订单、成交等阶段关系,辅助识别转化链路。
  • 归因路径:当指标变化可能由上游业务对象影响下游业务对象时,提供分析方向。
  • 图谱展示:在知识图谱中以有向边展示业务对象之间的业务流转。
  • 建模校验:检查关键业务链路是否缺边、方向是否反了、joinOn 是否缺失。

需要注意的是,Schema Edge 当前不是直接执行查询的替代品。真正查数时仍需要查询引擎、Logicform 或 SQL 执行能力;Schema Edge 提供的是“应该如何理解和选择关系”的业务语义。

{
  "kind": "schema_edge",
  "sid": "edge_order_contract_sid",
  "name": "订单到合同",
  "edgeKind": "process",
  "relationType": "precedes",
  "processName": "销售流程",
  "description": "订单前置于合同",
  "enabled": true,
  "sourceSchemaSid": "schema_order_sid",
  "sourceSchemaId": "order",
  "sourceSchemaName": "订单",
  "targetSchemaSid": "schema_contract_sid",
  "targetSchemaId": "contract",
  "targetSchemaName": "合同",
  "joinOn": [
    {
      "sourcePropertySid": "property_order_no_sid",
      "sourcePropertyId": "order_no",
      "sourcePropertyName": "订单号",
      "targetPropertySid": "property_contract_order_no_sid",
      "targetPropertyId": "order_no",
      "targetPropertyName": "订单号"
    }
  ]
}

joinOn 只会输出当前用户有字段权限的关联字段。如果关联字段不可见,该关联字段不会出现在 joinOn 中。

metric_relation

指标关系表示指标之间的依赖、组成或业务关系。

{
  "kind": "metric_relation",
  "sid": "metric_relation_sid",
  "name": "销售额组成销售目标达成率",
  "relationType": "component_of",
  "description": "销售额是达成率计算的组成指标",
  "enabled": true,
  "sourceSchemaSid": "schema_order_sid",
  "sourceSchemaId": "order",
  "sourceSchemaName": "订单",
  "sourceMetricSid": "metric_gmv_sid",
  "sourceMetricId": "gmv",
  "sourceMetricName": "销售额",
  "targetSchemaSid": "schema_target_sid",
  "targetSchemaId": "sales_target",
  "targetSchemaName": "销售目标",
  "targetMetricSid": "metric_achievement_rate_sid",
  "targetMetricId": "achievement_rate",
  "targetMetricName": "销售目标达成率"
}

AI 工具调用方式

getBusinessKnowledge 已注册为 Data Agent 的公共工具。AI 员工绑定该工具后,模型可以在需要理解业务语义时自动调用。

工具入参和 API 基本一致:

{
  "schemaSids": ["schema_order_sid"],
  "schemaIds": ["order"],
  "includeDisabledSchemaEdges": false
}

工具返回给模型的是精简后的 JSON 字符串,主要包含:

  • summary
  • schemas
  • metrics
  • relations

其中 metrics.prompt 会随指标一起返回,用于向模型提供指标分析思路。

工具展示内容会显示一段摘要,例如:

已获取业务知识:2 个 Schema、18 个字段、4 个指标、3 条关系。
示例 Schema:订单、客户
示例指标:销售额、订单数

AI 员工可以用这些内容完成以下动作:

  • 判断用户提到的业务概念是否存在。
  • 选择正确的 Schema 和指标。
  • 解释字段、指标、枚举值和同义词。
  • metrics.prompt 中沉淀的企业分析方法生成指标解读。
  • 判断业务对象之间是否有关联路径。
  • 基于 Schema Edge 理解业务流程先后关系。

第三方系统集成建议

优先使用直连 API

第三方系统如果只是要获取语义层元数据,建议直接调用:

POST /api/schema:getBusinessKnowledge

这样可以稳定拿到结构化 JSON,适合用于:

  • 外部 AI Agent 上下文注入。
  • MCP 或函数工具封装。
  • 数据目录同步。
  • 建模质量检查。
  • 知识图谱展示。
  • 指标分析思路同步。

组合调用建议

第三方系统通常可以按下面的策略组合工具:

用户意图推荐工具组合说明
“有哪些指标/字段/业务对象可以问”getBusinessKnowledge返回语义层目录,不查业务明细。
“某个指标是什么意思,应该怎么看”getBusinessKnowledge重点读取 metrics.descriptionmetrics.askmetrics.prompt
“今年销售额是多少”getBusinessKnowledge + askAlisa先确认指标和 Schema,再查具体数值。
“销售额为什么下降”getBusinessKnowledge + askAlisa + attribution先查指标,再按归因工具拆解贡献维度。
“按公司内部口径解释这个指标”getBusinessKnowledge + searchKnowledgeBase语义层提供指标定义,知识库补充制度或业务文档。
“结合最新政策/新闻分析影响”getBusinessKnowledge + webSearch语义层提供企业指标,联网搜索提供外部实时背景。

如果第三方系统自己有编排能力,可以把这些工具封装成 MCP、Function Calling 或后端 API 网关;如果希望 Data Agent 自己完成工具选择,可以通过 AI 员工对话接口发起请求,由 AI 员工在对话中调用已绑定的工具。

使用 schemaIds 控制上下文大小

如果业务空间中 Schema 很多,不建议每次都拉取全量业务知识。可以先通过业务问题或外部路由判断候选 Schema,再传入 schemaIdsschemaSids 获取局部业务知识。

不要把它当作查数接口

业务知识接口只说明“有哪些数据、怎么理解这些数据、对象之间如何关联”。如果需要查询实际指标值或明细数据,应继续调用数据查询、Logicform 执行或资源 CRUD 接口。

常见问题

为什么返回的字段比建模页面少?

接口会按当前用户的字段权限过滤。用户没有列权限的字段不会返回。

为什么请求了某个 Schema 但结果里没有?

常见原因包括:

  • schemaIdsschemaSids 写错。
  • 当前空间不是该 Schema 所在空间。
  • 当前用户没有该 Schema 的访问权限。

可以查看响应中的 missingRequestedSchemaSidsmissingRequestedSchemaIds

为什么没有 Schema Edge?

可能原因包括:

  • 该空间没有建模 Schema Edge。
  • 相关 Schema 不在本次返回范围内。
  • Schema Edge 被禁用,且请求未传 includeDisabledSchemaEdges: true
  • joinOn 涉及的字段对当前用户不可见。

能否直接暴露给外部 AI 机器人?

可以,但建议外部机器人使用服务端代理调用该接口,由代理负责 token、空间、用户身份和权限控制。不要把高权限 token 直接放到前端或第三方不可控环境中。