You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
flowchart TB
O["Ontology / SemanticView<br/>业务概念、作用域、权限与回答约束"]
M["Metric<br/>过滤、聚合、公式、时间计算与关联路径使用"]
D["Dataset<br/>物理来源、字段与保持粒度的标准化"]
S["Source<br/>Table / View / File / API"]
O -->|"metric_ref"| M
O -->|"dataset_ref / field_ref / predicate_ref"| D
M -->|"引用 Field 与 DatasetRelationship"| D
D -->|"映射"| S
flowchart LR
DATA["数据源<br/>DB / File / API"]
LOGIC["已有计算逻辑<br/>SQL / R / Python / BI"]
subgraph Offline["① 离线语义探索"]
MAP["语义接入映射<br/>SourceAdapter / Logic Parser"]
EXP["语义探索<br/>画像、规则发现、反例验证"]
STUDIO["人工审核工作台<br/>Dataset / Metric / Ontology 制作"]
COMP["Semantic Compiler<br/>引用、DAG、权限与版本校验"]
MAP --> EXP --> STUDIO --> COMP
end
subgraph Storage["② 语义存储"]
DISC["Discovery Store<br/>画像、假设、证据、反例"]
DRAFT["Semantic Draft Store<br/>待审核对象"]
REG["Package Registry<br/>不可变发布版本"]
INDEX["Runtime Index<br/>Ontology 检索与最小上下文索引"]
end
subgraph Online["③ 在线语义服务"]
PUB["Ontology Publisher<br/>激活已发布 SemanticView"]
RESOLVE["Semantic Resolver"]
PLAN["Metric Planner"]
POLICY["Policy Resolver"]
CTX["Context Packager"]
RESOLVE --> PLAN
RESOLVE --> POLICY
PLAN --> CTX
POLICY --> CTX
end
AGENT["Data Agent"]
DATA --> MAP
LOGIC --> MAP
MAP --> DISC
MAP --> DRAFT
EXP --> DISC
EXP --> DRAFT
STUDIO --> DRAFT
DRAFT --> STUDIO
COMP --> REG
COMP --> INDEX
REG --> PUB
INDEX --> PUB
PUB --> RESOLVE
INDEX --> RESOLVE
AGENT --> RESOLVE
CTX --> AGENT
AGENT --> DATA
Loading
架构只分为三个内部边界:
区域
子能力
主要产出
离线语义探索
语义接入映射、语义探索、人工审核工作台、语义编译
Dataset/Metric/Ontology 草稿、证据和已编译版本
语义存储
Discovery Store、Draft Store、Package Registry、Runtime Index
探索记录、草稿、不可变语义包和在线索引
在线语义服务
Ontology 发布、语义解析、Metric 规划、权限解析、最小上下文打包
与当前问题相关的可执行语义上下文
边界规则:
离线探索可以读写探索记录和语义草稿;在线服务只读取已发布版本;
人工审核工作台同时承担 Dataset、Metric、Ontology 的制作、修订和确认;
发布单元是包含 Dataset、Metric、Ontology 的 SemanticPackage,Ontology Publisher 负责激活其中面向 AI 的 SemanticView;
Discovery Store 中的大体量画像、样本和反例不进入在线 Prompt;
在线服务不重新探索语义,未命中或歧义时返回澄清并回流离线工作台。
3.1 离线探索与发布交互
sequenceDiagram
participant S as 数据源/计算逻辑
participant M as 语义接入映射
participant E as 语义探索
participant W as 人工审核工作台
participant C as Semantic Compiler
participant R as 语义存储
participant P as Ontology Publisher
S->>M: 读取结构、样本与逻辑定义
M->>R: 保存标准 Source/Dataset 草稿与逻辑快照
M->>E: 提交统一结构和 Calculation IR
E->>E: 画像、发现约束、生成假设、寻找反例
E->>R: 保存证据、反例与 Metric/Ontology 候选
R-->>W: 加载候选及证据
W->>W: 制作并确认 Dataset/Metric/Ontology
W->>C: 提交已确认的语义对象
C->>C: 引用、DAG、权限与版本校验
C->>R: 发布 SemanticPackage 与 Runtime Index
R->>P: 通知新发布版本
P->>P: 校验制品并原子切换 active 版本
Loading
3.2 在线问数交互
sequenceDiagram
participant U as 用户
participant A as Data Agent
participant S as 在线语义服务
participant P as 权限服务
participant D as 数据源
U->>A: 提交问题
A->>S: resolve(question, user_context)
S->>S: 选择 SemanticView、解析 Concept、展开 Metric DAG
S->>P: 获取当前用户的数据范围
P-->>S: 返回权限谓词
S-->>A: 返回最小语义上下文和查询约束
A->>D: 执行生成的 SQL/API 请求
D-->>A: 返回结果
A-->>U: 答案、指标口径、数据范围和语义包版本
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
数据语义探索编译器工程设计
1. 核心对象与边界
本文把 Data Agent 所需的语义分为三层。三层生命周期不同,不能混成一个“大语义对象”。
1.1 Ontology / SemanticView
Ontology / SemanticView 是面向 AI 问数的业务语义适配层。它描述某个组织、部门、角色和统计目的下的业务概念、常用说法、概念关系、权限边界与回答约束,并引用 Metric 或 Dataset 作为实现。
Ontology 不以跨企业通用复用为目标。可复用能力主要沉淀在 Metric;Ontology 负责把这些能力组织成特定业务视角。本文不强制把 Ontology 和 SemanticView 拆成两个对象:Ontology 限定作用域并发布给 AI 使用后,即形成 SemanticView。
1.2 Metric
Metric 是可执行、可复用的数据加工与统计逻辑,表达过滤、聚合、公式、时间计算以及对已确认关联路径的使用。Join Key、Join Type 和基数由 DatasetRelationship 定义,不直接写入 MetricNode。
不再引入与 Metric 平级的 Measure。基础聚合、过滤指标和派生指标都是 Metric,只是表达式根节点不同。
1.3 Dataset
Dataset 是物理数据源在语义系统中的标准描述,负责把
table | view | file | api转换为统一的 Source、Field、主键、候选键、分区、数据范围及行级映射。Dataset 只允许确定性的、保持粒度的标准化处理,不提供聚合、窗口计算或业务 KPI。
1.4 三层关系
flowchart TB O["Ontology / SemanticView<br/>业务概念、作用域、权限与回答约束"] M["Metric<br/>过滤、聚合、公式、时间计算与关联路径使用"] D["Dataset<br/>物理来源、字段与保持粒度的标准化"] S["Source<br/>Table / View / File / API"] O -->|"metric_ref"| M O -->|"dataset_ref / field_ref / predicate_ref"| D M -->|"引用 Field 与 DatasetRelationship"| D D -->|"映射"| S边界约束:
predicate_ref将分类概念映射为 Field 条件,但不在其中沉淀可复用计算;2. 工作方式:探索向上,运行向下
2.1 离线探索自底向上发现
系统从两条输入路径出发:物理数据经过 Source 接入、Dataset 映射和画像;已有计算逻辑经过 Parser 和 Calculation IR 形成 Metric 候选。Dataset 的 Field、粒度与 Join 约束用于验证 Metric,最后由人工把 Dataset 和 Metric 组织成 Ontology/SemanticView。
2.2 在线问数自顶向下执行
系统从用户问题和用户上下文出发:先选择已发布的 Ontology/SemanticView,再解析业务概念和 Metric,继而展开 Dataset、Field 与 Source 查询。
flowchart LR subgraph Discovery["离线探索:自底向上发现"] S1["Source、Schema 与数据样本"] --> A1["Source 接入映射"] A1 --> D1["Dataset 与画像"] L1["SQL / R / Python / BI 计算逻辑"] --> C1["Parser / Calculation IR"] C1 --> M1["Metric 候选"] D1 -->|"Field、粒度与 Join 约束"| M1 D1 --> O1 M1 --> O1["Ontology / SemanticView 制作"] O1 --> P1["审核、编译与发布"] R1["定向探索 / 增量验证"] -.-> A1 R1 -.-> C1 end subgraph Runtime["在线运行:自顶向下执行"] Q2["问题 + 用户上下文"] --> O2["已发布 Ontology / SemanticView"] O2 --> M2["Metric DAG"] O2 --> D2 M2 --> D2["Dataset / Field"] D2 --> S2["Source 查询"] S2 --> A2["答案 + 口径 + 血缘"] end P1 --> O2 F1["语义缺口 / 用户纠正"] -.-> R1 N1["新数据 / 结构或逻辑变化"] -.-> R1新增数据通常只验证已知规则。发现新枚举、反例、结构漂移或用户纠正时,系统重新进入局部探索和人工审核,不直接修改已发布语义。
3. 总体架构
flowchart LR DATA["数据源<br/>DB / File / API"] LOGIC["已有计算逻辑<br/>SQL / R / Python / BI"] subgraph Offline["① 离线语义探索"] MAP["语义接入映射<br/>SourceAdapter / Logic Parser"] EXP["语义探索<br/>画像、规则发现、反例验证"] STUDIO["人工审核工作台<br/>Dataset / Metric / Ontology 制作"] COMP["Semantic Compiler<br/>引用、DAG、权限与版本校验"] MAP --> EXP --> STUDIO --> COMP end subgraph Storage["② 语义存储"] DISC["Discovery Store<br/>画像、假设、证据、反例"] DRAFT["Semantic Draft Store<br/>待审核对象"] REG["Package Registry<br/>不可变发布版本"] INDEX["Runtime Index<br/>Ontology 检索与最小上下文索引"] end subgraph Online["③ 在线语义服务"] PUB["Ontology Publisher<br/>激活已发布 SemanticView"] RESOLVE["Semantic Resolver"] PLAN["Metric Planner"] POLICY["Policy Resolver"] CTX["Context Packager"] RESOLVE --> PLAN RESOLVE --> POLICY PLAN --> CTX POLICY --> CTX end AGENT["Data Agent"] DATA --> MAP LOGIC --> MAP MAP --> DISC MAP --> DRAFT EXP --> DISC EXP --> DRAFT STUDIO --> DRAFT DRAFT --> STUDIO COMP --> REG COMP --> INDEX REG --> PUB INDEX --> PUB PUB --> RESOLVE INDEX --> RESOLVE AGENT --> RESOLVE CTX --> AGENT AGENT --> DATA架构只分为三个内部边界:
边界规则:
3.1 离线探索与发布交互
sequenceDiagram participant S as 数据源/计算逻辑 participant M as 语义接入映射 participant E as 语义探索 participant W as 人工审核工作台 participant C as Semantic Compiler participant R as 语义存储 participant P as Ontology Publisher S->>M: 读取结构、样本与逻辑定义 M->>R: 保存标准 Source/Dataset 草稿与逻辑快照 M->>E: 提交统一结构和 Calculation IR E->>E: 画像、发现约束、生成假设、寻找反例 E->>R: 保存证据、反例与 Metric/Ontology 候选 R-->>W: 加载候选及证据 W->>W: 制作并确认 Dataset/Metric/Ontology W->>C: 提交已确认的语义对象 C->>C: 引用、DAG、权限与版本校验 C->>R: 发布 SemanticPackage 与 Runtime Index R->>P: 通知新发布版本 P->>P: 校验制品并原子切换 active 版本3.2 在线问数交互
sequenceDiagram participant U as 用户 participant A as Data Agent participant S as 在线语义服务 participant P as 权限服务 participant D as 数据源 U->>A: 提交问题 A->>S: resolve(question, user_context) S->>S: 选择 SemanticView、解析 Concept、展开 Metric DAG S->>P: 获取当前用户的数据范围 P-->>S: 返回权限谓词 S-->>A: 返回最小语义上下文和查询约束 A->>D: 执行生成的 SQL/API 请求 D-->>A: 返回结果 A-->>U: 答案、指标口径、数据范围和语义包版本4. 范围与非目标
本期覆盖:Source 自动接入、Dataset 标准化、画像与约束发现、计算逻辑解析、Metric/Ontology 制作与审核、语义包发布、在线解析、增量验证和纠正回流。
本期不建设通用 ETL、主数据或权限中心;不直接执行不受信任的 SQL/R/Python;不承诺自动生成唯一正确的业务本体;不解决跨企业 Ontology 复用;不在 MVP 中训练或托管模型。
5. 运行时语义包数据结构
5.1 根对象 SemanticPackage
约束:
package.id在注册中心全局唯一;package.version使用语义化版本;content_hash用于完整性校验和缓存失效;5.2 Dataset
Dataset 表示可寻址的物理数据资产及其标准化字段映射。
它不与传统数仓分层一一对应:Source 可以来自源系统、ODS、DWD、DIM、事实表、宽表或 ADS。这里的“物理层”表示对象已经有确定、可查询的位置,而不是特指 ODS。
Dataset 的核心价值是屏蔽不同 Source 类型的访问差异。
table、view、file、api等 Source 经过对应的 SourceAdapter 后,转换成统一的 Dataset 和 Field;各类 Source 特有的定位、读取和结构信息仍保留在各自结构中。字段含义:
datasets[].iddatasets[].namedatasets[].descriptiondatasets[].dataset_roledatasets[].sourcesource_uri二选一source.type决定datasets[].source_urisource二选一SourceSchemadataset_role不放入 Source:事实或维度是 Dataset 在分析模型中的角色,同一个物理 Source 在不同模型中可能承担不同角色。source与source_uri必须且只能出现一个。source_uri解决的是 Source 描述的外部存储和复用,不是新的物理 Source 类型;URI 解析后仍必须得到本节定义的table | view | file | api结构。编译器在发布前解析 URI、校验内容,并记录不可变版本或内容哈希,避免外部描述变化导致同一语义包产生不同结果。URI 中不得包含账号、Token 或其他凭据。不建议把 Dataset 级字段直接命名为
uri。使用source_uri可以明确表示它引用的是整个 Source 描述,而 File 内部的物理地址由directory_uri、file_name或file_pattern表达。工程实现中的类型或 JSON Schema 可以命名为SourceSchema。Source 类型
type决定 Source 的 YAML 结构和使用的 SourceAdapter:table/view使用数据库适配器,file使用文件适配器,api使用 API 适配器。三类结构不能互相照搬。5.2.1 Table | View
table和view使用相同定位结构,区别只在type。视图的主键和候选键通常不能从数据库约束中直接读取,可以由人工声明或探索确认。字段含义:
typeconnectioncatalogdatabaseschemaobjectmodeupdate_frequencydata_rangesdata_ranges[].fielddata_ranges[].fromdata_ranges[].torow_countsize_bytesprimary_keyunique_keyspartition_keysbucket_keysfields其他补充说明:
table与view的定位结构相同;type用于区分读取对象及元数据能力。catalog、database、schema按数据库能力填写,不要求同时存在。update_frequency是元数据提示,不表示语义编译器负责调度。自动转换包括:
type;5.2.2 File
File Source 同时覆盖结构化、半结构化和非结构化文件。结构化或半结构化文件解析为记录和标准 Field,可供 Metric 使用;非结构化文件先提取原始内容,再生成多级
ai_context,供 Data Agent 按需加载。字段含义:
typefilestructurefile_scopesingle表示单个文件,batch表示一组文件directory_uris3://bucket/path/file_namesingle必填directory_uri的精确文件名或相对路径,不允许包含通配符file_patternbatch必填directory_uri的文件路径匹配表达式,例如day_pt=*/part-*.parquetformatcompressionencodingUTF-8delimiterheaderrecord_pathextractionextraction.methodextraction.unitmodeupdate_frequencyfile_countsingle时必须为1row_countfile_sizesingle表示单文件大小,batch表示匹配文件的总大小unique_keysfieldsai_contextai_context.level_100ai_context.level_1000ai_context.full其他补充说明:
directory_uri加文件选择规则定位资源,不定义connection,也不使用数据库的catalog、database、schema和object。directory_uri的 Scheme 和 Authority 选择文件系统或对象存储适配器,例如file://、s3://、oss://、hdfs://。访问凭据、私有 Endpoint 和网络配置保存在语义包之外。file_scope: single时必须填写file_name且不得填写file_pattern,最终只能解析出一个文件;file_scope: batch时必须填写file_pattern且不得填写file_name,统计值按匹配到的整个文件集合汇总。directory_uri不支持通配符。MVP 的file_pattern统一使用 Glob:*匹配单层路径内任意字符,?匹配单个字符,**匹配零层或多层目录;禁止使用..跳出directory_uri。file_scope: single | batch同时适用于三种structure。它只描述定位结果的数量;结构化和半结构化文件的读取方式另由mode: full | incremental表达。structured包括 Parquet、CSV、Excel 等行列型文件;semi_structured包括 JSON、JSONL、XML 等需要记录路径的文件;unstructured包括文档、图片、音频和视频。encoding、delimiter、header仅适用于对应的文本或表格格式;列式文件通常从文件元数据读取 Schema。bucket_keys。fields,也不定义mode、update_frequency、file_count、row_count或unique_keys。extraction负责读取内容,ai_context负责表达面向模型的分级语义。ai_context的数字级别表示近似 Token 预算,而不是字符数。在线解析优先返回较小级别,只有语义不足时才逐级加载level_1000或full。file_count、row_count、file_size是当前定位规则在同一次 ProfileSnapshot 下的汇总。只有所有目标文件均成功解析时才填写row_count;抽样、漏读或部分失败时必须留空并输出覆盖率和诊断。primary_key。结构化和半结构化文件使用一个二维unique_keys数组即可:每个内层数组表示一个单列或复合候选键。自动转换包括:
directory_uri选择存储适配器,使用file_name或file_pattern枚举文件,校验结果数量是否符合file_scope,再读取格式、压缩方式、文件大小、修改时间和可识别的路径字段;record_path提取记录,合并样本 Schema,并报告字段缺失、类型漂移和冲突;extraction.method和extraction.unit执行文本解析、版面分析、OCR、语音识别或多模态抽取,再生成多个 Token 预算级别的ai_context;file_size;仅对结构化和半结构化 File 生成file_count,并在完整解析后生成row_count;5.2.3 API
API Source 复用完整 OpenAPI 契约,不再重复定义 Server、Path、Method、参数、请求体和响应 Schema。Dataset 只补充两类 OpenAPI 无法表达的信息:选择哪个 Operation,以及响应中的哪个节点构成本 Dataset 的单个对象或记录集合。
字段含义:
typeapiopenapiopenapi.operation_idoperationId;必须在文档中唯一解析openapi.specopenapi.spec_uri二选一openapi.spec_uriopenapi.spec二选一openapi.content_hashopenapi.resolved_specresultresult.scoperesult.status_coderesult.media_typeresult.data_pathbatch时应定位到数组元素result.paginationresult.pagination.typeresult.pagination.requestresult.pagination.request.page_pathresult.pagination.request.size_pathresult.pagination.request.page_start0或1result.pagination.request.page_sizeresult.pagination.response.total_pathfieldsOpenAPI 文档字段的含义:
openapi.spec.openapi3.0.1openapi.spec.infoopenapi.spec.info.titleopenapi.spec.info.versionopenapi.spec.serversopenapi.spec.servers[].urlopenapi.spec.servers[].descriptionopenapi.spec.pathsopenapi.spec.paths.<path>.<method>posttagssummaryoperationIdopenapi.operation_id选择parametersparameters[].nameparameters[].inparameters[].requiredtrueparameters[].schemaparameters[].schema.typeparameters[].schema.formatrequestBodyrequestBody.requiredrequestBody.contentrequestBody存在时必填application/jsonrequestBody.content.<media-type>.schema$refresponsesresponses.<status>.descriptionresponses.<status>.contentapplication/jsonresponses.<status>.content.<media-type>.schemaopenapi.spec.componentsschemasopenapi.spec.components.schemasopenapi.spec.components.schemas.<name>.typeopenapi.spec.components.schemas.<name>.requiredopenapi.spec.components.schemas.<name>.properties$ref#/components/schemas/TableInfoDtoitems$refOpenAPI 解析复制要求
OpenAPI 解析分为两个状态:
发布态 API Source 示例:
示例为突出复制边界,将
components.schemas的内容写成{};实际发布结果必须包含这些 Schema 的完整定义,不允许保留空对象或未解析的外部引用。openapi.spec_uri + openapi.operation_id,也允许通过openapi.spec内联完整文档。openapi.resolved_spec。运行时以该快照为准,不依赖再次访问原始spec_uri。content_hash;只改变空格或字段顺序不应改变哈希。operation_id必须唯一解析为一个 Path 和 HTTP Method;找不到或重复时编译失败。resolved_spec保持标准 OpenAPI 根结构,复制openapi、info、当前 Operation 生效的servers、目标 Path、Path 级参数和目标 Operation,不转换成另一套自定义 API Schema。tags、summary、description、parameters、requestBody、responses、security、callbacks、deprecated等原生字段应完整保留;编译器不支持的结构必须报错,不能静默删除。$ref,将所有可达 Components 完整复制到resolved_spec.components。$ref保持引用形式,避免重复展开和循环引用;外部$ref必须下载并复制到本地 Components,再改写为#/components/...。发布结果不得依赖外部$ref。securitySchemes可以复制认证机制,但账号、Token、Cookie、API Key 和证书不得写入resolved_spec。result和fields是 Dataset 编译结果,不写回标准 OpenAPI 对象;result.data_path必须能在选中响应 Schema 中解析,fields必须来自该节点对应的 Schema。content_hash、选中 Operation 或可达 Schema 发生变化时,触发契约漂移检测并生成新的 Dataset 或语义包版本,不修改已发布快照。对
/Users/lanvendar/Downloads/元数据管理_OpenAPI.json的结构检查结果:openapi、info、servers、paths、components3.0.1operationIdrequestBody的 Operationcontent/schema的 OperationexportDevice,即/api/metadata/{tableId}/exportTable$ref数量*/*securitySchemes其他补充说明:
openapi.spec与openapi.spec_uri必须且只能出现一个。外部文档在编译时解析并固定版本或内容哈希,避免同一语义包对应不同接口契约。openapi.spec_uri + openapi.operation_id,避免在每个 Dataset 中重复内联整份 OpenAPI。编译器只展开目标 Operation 以及它通过$ref可达的 Schema 闭包。servers.url、paths、HTTP Method、parameters、requestBody和responses均直接使用 OpenAPI,不再重复定义connection、endpoint、method、request和response。openapi.operation_id必须与一个 OpenAPI Operation 的operationId完全一致;重复或找不到时编译失败。securitySchemes和security只描述认证机制,Token、Cookie、API Key 等实际凭据仍由运行时 Secret 系统注入。exportDevice操作,其200响应只有description,可以用于调用,但不足以自动生成 Field。只有响应声明content和schema后,Adapter 才能可靠识别结果结构;不得根据一次样本响应静默补齐契约。*/*。它不影响$ref解析,但不能准确表达返回格式;JSON 响应应优先声明application/json,导出文件应声明实际 Media Type 或application/octet-stream。result不重复描述响应 Schema,只负责选中状态码、Media Type 和业务数据节点。OpenAPI 可以说明返回对象的类型,但无法知道统一响应包装中的哪个节点才是 Dataset 数据。x-pagination,编译器优先读取;否则由result.pagination作为不修改原 OpenAPI 文档的本地映射补充。自动转换包括:
openapi.spec或下载openapi.spec_uri,校验 OpenAPI 版本和文档结构,并计算content_hash;openapi.operation_id定位唯一 Operation,组合 Server、Path、HTTP Method、参数、请求体和安全要求;$ref,复制目标 Path、Operation 及其 Components 闭包,生成自包含的openapi.resolved_spec;result.status_code、result.media_type和result.data_path选择业务数据节点,将对应 OpenAPI Schema 的原生类型转换为统一type并生成标准 Field;$ref、重复的operationId、未声明的响应类型和不兼容 Schema 输出编译错误,不进行静默猜测。5.2.4 Field 与行级映射
Field 数组位于
Dataset.source.fields,不同 SourceAdapter 均输出统一字段结构。数据库列和表格型文件列使用source_column;API 和嵌套 JSON 字段使用source_path。Field 字段含义:
namesource_columnsource_path$.customer.idtypeVARCHAR(255)、DECIMAL(19,6);不再单列数据库precision、scale和声明长度lengthnullablecommentdefault_valuenulltransformtransform.typetransform存在时必填transform.target_typecast必填transform.unknown_value_policymapping可选transform.valuesmapping必填transform.trimnormalize_string可选transform.casenormalize_string可选每个 Field 必须提供
source_column或source_path之一,不能同时缺失。Adapter 可以把二者编译成统一的字段提取表达式,但不应在 YAML 中混淆列名和 JSONPath。length属于观察属性,随着数据增长可能变化。编译时应记录它对应的 ProfileSnapshot 和观察时间;需要稳定类型约束时始终以type为准。允许的 MVP Transform:
columnrenamecastnormalize_stringcoalescemappingscalar_expressionlookup禁止在 Field Transform 中出现:
5.3 DatasetRelationship
DatasetRelationship 只描述可执行 Join 路径,不承载业务概念关系。
编译期必须验证:
many_to_one的一端键已声明或已验证唯一;5.4 Metric
Metric 是各种数据加工和分析计算逻辑的统一、可执行表示,可以由工作台人工制作,也可以从已有逻辑中自动发现候选。
Metric 来源与自动探索
Metric 可由工作台人工制作,也可通过 6.1 节的跨语言解析流程生成候选。本节只定义审核发布后的运行时结构。
Metric 可以包含编译器生成的
dependencies.datasets和dependencies.relationships,但不要求人工重复维护。自动发现的 Metric 还可使用origin记录语言、原始逻辑 URI 和内容哈希;这些元数据只用于血缘、重编译和漂移检测。每个 Metric 必须有且只有一个根
definition。MetricNode 联合类型
AggregateNode
MVP 聚合函数:
group_by是可选的 Field 引用数组。只有原始计算逻辑把分组粒度作为指标定义的一部分时才固化;如果分组只是某次报表查询的展示维度,则不写入 Metric,由运行时查询上下文提供。FilterNode
Filter 必须包含一个可产生值的
input,不能独立存在。Predicate 使用递归布尔结构:
MVP 比较操作符:
Metric Predicate 只能引用 Dataset Field 或常量,不能引用 Ontology Concept。Ontology 中的业务概念必须先解析为具体 Metric 或 Field 条件,才能进入 Metric Planner。
FormulaNode
Metric 示例
Metric 编译约束
field_ref必须指向存在且类型兼容的 Field;metric_ref必须指向存在且可访问的 Metric;5.5 Ontology / SemanticView
Ontology / SemanticView 是面向 AI 问数模型的业务语义适配层。它在确定的组织、部门、角色和统计目的下,把业务概念、常用说法、Metric、Dataset、权限边界和回答约束组织成可检索、可规划、可解释的语义视图。
本设计不强制把 Ontology 和 SemanticView 拆成两个独立对象:Ontology 表达概念及其关系,限定作用域并发布给 AI 使用后,即形成 SemanticView。该层服务企业内部的具体统计视角,不以跨企业通用复用为目标;可复用的计算逻辑应优先沉淀在 Metric 层。
其中:
scope决定该视图对谁、在什么统计目的下成立;ai_semantics描述 AI 可以如何理解问题、何时澄清以及回答必须携带哪些信息;concepts将业务语言绑定到 Metric、Dataset 或 Field;relationships组织业务概念关系,不代替物理 Join;access_policy引用运行时权限策略,不能仅依赖模型记忆执行权限控制。Ontology 对 Metric、Dataset 的引用是单向的:Concept 可以通过
metric_ref、field_ref、predicate_ref或dataset_ref指向实现对象;Metric 和 Dataset 不反向依赖某个 Ontology。编译器可以生成反向索引用于检索和影响分析,但不把该索引写成运行时强依赖。Concept
implementation.type支持:none用于纯概念节点,例如“财务报表”或“盈利能力”,其作用是组织其他概念而不是直接执行。OntologyRelationship
OntologyRelationship 描述业务概念关系,不用于生成物理 Join。
权限与业务过滤边界
scenario = Actual、account IN Revenueperiod = 2026-06最终查询条件为三者的合取,但权限条件不能写回 Metric。
训练与评测语料导出
Ontology / SemanticView 首先是在线问数的运行时契约,不直接等同于训练集。后期可由独立的 Corpus Compiler 将“已发布 SemanticView + Metric/Dataset 血缘 + 已审核问数、纠正和反例”编译为模型/Agent 路由、领域小模型 SFT/蒸馏、偏好学习和回归评测语料。这里的“模型协调器”指选择 SemanticView、模型、Agent 或工具的路由层;Sakana AI 的模型组合与任务适配研究可作为参考方向。
Corpus 与运行时 Ontology 分开版本化,并遵守:
6. 离线语义探索
6.1 语义接入映射
接入层把不同来源转换为后续探索可使用的统一结构:
ai_context计算逻辑统一经过以下过程:
Calculation IR 的 MVP 原子操作为
source | project | filter | join | group | aggregate | calculate | window | union | sort | limit。典型跨语言映射如下:FROM、CTEtbl()、read_*()、read_sql()WHEREfilter()、Boolean Mask、query()JOIN ... ONleft_join()、merge()、join()GROUP BY、SUM/AVG/...group_by()、summarise()、groupby().agg()CASE、函数mutate()、assign()、列运算OVER、排名、累计rolling()、rank()Join 不保存为原始 SQL 片段,也不作为数值型 MetricNode。接入层先生成 DatasetRelationship 候选;确认后,Metric 依赖闭包引用该关联路径。
dependencies由 Metric DAG 自动计算,不要求人工重复维护。SQL 使用匹配方言的 Parser 并解析 Catalog、CTE、别名和函数;R/Python 使用 AST 与 Framework Adapter。引擎能够提供 Logical Plan 时优先读取 Logical Plan。
静态解析不能可靠处理动态 SQL、
eval、反射、任意 UDF、外部调用或有副作用代码时,必须标记为opaque,不得猜测或直接执行不受信任的代码。候选发布前必须验证 Dataset/Field 绑定、Join Key/Type/基数、操作顺序、NULL/Distinct/时区/精度/窗口语义,以及原逻辑与 Metric 在相同输入和粒度下的结果等价性。代码只能证明“如何计算”,业务名称和统计口径仍需人工确认。
6.2 数据画像与规则发现
探索先按字段类型、名称、分布和声明元数据识别
identifier | dimension_candidate | value | audit | partition | free_text | reserved,再执行:代理主键、数值事实值、审计字段、分区字段、自由文本和预留字段默认不参加业务粒度组合搜索。自动搜索采用近似 Distinct、低阶组合优先和 Apriori 式剪枝;业务声明的宽候选键直接进入验证队列,不受自动搜索宽度限制。
置信度只用于候选排序和风险控制,不是业务正确性的概率承诺。人工确认仍是进入运行时语义包的必要条件。
6.3 探索记录
探索记录与运行时语义包分开存储:
origin支持declared | discovered | user_feedback | imported。observational规则被反例击中时进入局部重探;normative规则优先触发数据质量告警。6.4 人工审核与语义制作
人工审核工作台提供三类入口:
opaque逻辑、业务名称、统计口径、权限引用和回答约束。工作台必须同时展示来源、画像、证据、反例、计算血缘和版本差异。自动发现只能提出候选,不能绕过人工确认发布业务语义。
6.5 候选状态机
stateDiagram-v2 [*] --> Candidate Candidate --> Observed: 数据验证通过 Candidate --> Rejected: 无效或无业务意义 Observed --> ReviewPending: 达到审核阈值 Observed --> Candidate: 新反例或范围变化 ReviewPending --> Confirmed: 人工确认 ReviewPending --> Rejected: 人工否决 ReviewPending --> Observed: 需要更多证据 Confirmed --> Deprecated: 口径下线 Confirmed --> ReviewPending: 重大反例或业务变更 Deprecated --> [*] Rejected --> [*]6.6 持续探索 Loop
任务类型包括:
首次接入执行完整画像和候选发现;新增分区、文件或 API 数据默认只验证已知规则。出现新枚举、结构变化、分布漂移、规则反例、代码变化、语义未命中或用户纠正时,才触发局部重探。
用户纠正先写入 FeedbackRecord,再经历“候选 → 验证 → 人工审核 → 新版本发布”,不得直接修改线上版本。
7. 编译、存储与发布
7.1 Semantic Compiler
Semantic Compiler 只接收人工确认或人工制作的语义对象:
Ontology 发布时必须同时固定其引用的 Metric、Dataset 和 DatasetRelationship 依赖闭包,不能发布一个会随外部依赖变化而漂移的孤立对象。编译失败返回结构化诊断,并禁止发布。
7.2 语义存储
大体量内容保存在 Object Store,Metadata DB 只保存摘要、状态和 URI。Source 凭据不进入任何语义包。
Package Registry 状态:
Draft Store 保存可编辑的单个语义对象草稿;Registry 的
draft表示已编译但尚未通过发布校验的包版本,两者不是同一生命周期。7.3 版本与激活
package_id + version读取,单次请求不得跨版本;8. 在线语义服务
在线服务只加载已发布并激活的 SemanticPackage,不读取 Hypothesis 或未审核草稿。一次解析按以下顺序执行:
语义服务不执行最终数据查询,查询由 Data Agent 或 Query Engine 完成。
返回内容采用按需展开:先召回 SemanticView 和 Concept,再加载命中的 Metric 依赖闭包,最后补充相关 Dataset/Field 与权限谓词;不返回整个语义包,也不返回探索证据原文。
9. 工程接口与运行保障
9.1 核心 API
POST /v1/exploration-jobsGET /v1/exploration-jobs/{jobId}GET /v1/hypothesesPOST /v1/hypotheses/{id}/decisionsPOST /v1/semantic-packages/{id}/compilePOST /v1/semantic-packages/{id}/releasesPOST /v1/semantic-context/resolveGET /v1/metrics/{id}/lineagePOST /v1/feedback在线解析请求至少包含
question和userContext;ontology可由调用方指定,也可由服务按作用域路由:{ "question": "查询2026年各组织的实际营业收入", "ontology": "finance_management_view", "userContext": { "userId": "u-1001", "organization": "group", "department": "finance", "roles": ["finance_analyst"], "purpose": "management_reporting" } }9.2 安全与治理
scalar_expression使用白名单语法树,不执行任意文本。9.3 可观测性
核心指标:
必备追踪标识:
一次 Data Agent 回答必须能够追溯到:
9.4 故障和降级策略
10. MVP 与后续演进
10.1 实施阶段
MainTable_1u44q的画像可重复10.2 MVP 完成标准
10.3 后续演进
Beta Was this translation helpful? Give feedback.
All reactions