Skip to content

第15章 元数据、血缘、契约与指标


DataAgent 要回答“这个数从哪来、口径是什么、能不能信”,不能靠模型临场猜测。它需要数据底座提前给出四类材料:元数据说明资产和字段含义,血缘说明数据从哪里来,数据契约约束上游变更,指标口径定义统一的计算方式。这些材料共同组成数据控制面,并进入问数、分析和审计流程。业务用户问“本月 GMV 为什么下降”,DataAgent 选中了 sales_amount 字段并给出结论。复盘时数据团队发现,管理层口径里的 GMV 应使用支付成功金额,且要剔除内部调拨订单;sales_amount 只是订单明细里的原始销售额。模型没有“胡说”,它只是缺少可查询的字段含义、指标定义和适用边界。元数据、血缘、数据契约和指标口径要提前进入平台控制面。它们告诉 Agent 哪些资产可用、字段代表什么、指标从哪里来、上游变化会影响谁,也让一次回答在事后能够被审计和复盘。

元数据和血缘常被放在数据平台的后台页面里,到了 Agent 时代,它们会直接影响用户答案。用户问“GMV 为什么下降”,模型需要知道 GMV 的定义、字段来源、过滤条件、适用范围和更新时间。若这些信息不可查询,模型只能从表名和字段名猜测业务含义,猜对一次也无法长期依赖。企业的数据口径通常散落在指标平台、数仓文档、代码、Excel 和团队经验里。DataAgent 接入后,口径不一致会暴露得更快。销售额、收入、毛利、活跃客户、有效订单这些词在不同部门可能有不同定义;如果平台没有统一指标服务和数据契约,模型生成的 SQL 很容易使用错误字段,却仍然给出自信解释。数据控制面要把资产、字段、血缘、质量、权限和指标口径连起来。元数据说明“这是什么”,血缘说明“从哪里来”,契约说明“上游怎么变更”,指标说明“如何计算”。这四类材料共同决定 DataAgent 能否回答“这个数能不能信”。

15.1 元数据是 Agent 平台的数据控制平面

一家多业务线企业的 DataAgent 能访问湖仓表、OLAP 引擎、实时指标和质量状态。若没有元数据控制面,Agent 面对自然语言问题时会遇到四类不确定性:该用哪张表;字段是什么意思;指标口径是否一致;当前用户是否有权查看结果。传统 BI 可以通过固定看板和人工培训减少这些问题,DataAgent 则需要把这些判断自动化、可解释化、可审计化。元数据不能退化成“表的备注”。它是企业 Agent 平台的数据控制平面,负责登记资产、描述语义、连接血缘、约束契约、服务指标、执行权限和记录审计。没有这个控制面,Agent 只能把物理表名、字段名和历史查询样例拼在一起猜测,回答质量会随着数据规模增长迅速下降。

图15-1:元数据控制面横跨数据基础设施层和 Agent 消费层

图15-1:元数据控制面横跨数据基础设施层和 Agent 消费层。来源:本书自绘。Alt text:中间一条贯穿的元数据控制面,向下连接采集、湖仓、编排等基础设施,向上连接 DataAgent、看板等消费方,表示元数据是连接两层的统一控制平面。

图 15-1 表明,元数据控制面横跨数据基础设施层和 Agent 消费层。它不直接替代湖仓或 OLAP 引擎,而是告诉 DataAgent 哪些资产可用、哪些字段可信、哪个指标可复用、回答引用来自哪里、变更会影响谁。

图15-2:元数据如何进入 Agent 推理链路

图15-2:元数据如何进入 Agent 推理链路。来源:本书自绘。Alt text:Agent 处理问题时从元数据服务拉取表结构、口径、权限和血缘,注入推理上下文,箭头表示元数据作为运行时输入参与每次问数。

图 15-2 展示了元数据如何进入 Agent 推理链路。用户问的是自然语言问题,但平台需要把问题映射到资产、字段、指标、权限和引用。这个过程若只依赖大语言模型记忆,很容易把“GMV”“销售额”“实收金额”混为一谈。控制面应提供可查询、可验证、可审计的上下文。

15.1.1 数据目录:搜索、标签、Owner、分级分类与资产画像

数据目录是元数据控制面的入口。它回答“有什么数据、谁负责、能不能用、适合什么问题”。一个可用于 DataAgent 的目录不应只展示表名和字段,还应包含资产类型、业务说明、Owner、分级分类、质量状态、新鲜度、使用热度、下游消费者和示例问题。

表15-1:技术元数据、业务元数据、操作元数据等概念的定义与区别。来源:本书整理。

概念 定义 与相邻概念的区别
技术元数据 表名、字段、类型、分区、存储位置、刷新时间等系统属性 描述物理结构;不解释业务语义
业务元数据 业务含义、指标口径、Owner、适用场景、禁用场景 面向业务理解;是 DataAgent 解释口径的关键
操作元数据 运行状态、质量结果、服务等级协议(Service Level Agreement,SLA)、成本、访问频率 反映资产运行健康;用于可用性判断
治理元数据 数据分级、个人可识别信息(Personally Identifiable Information,PII)标签、权限策略、审计要求、保留期 约束谁能访问、如何脱敏、如何留痕
资产画像 汇总技术、业务、操作和治理元数据形成的资产视图 面向搜索、推荐和影响分析;不能当作静态字段备注

图15-3:资产画像要服务消费行为

图15-3:资产画像要服务消费行为。来源:本书自绘。Alt text:资产画像(Owner、分级、质量、热度、口径)逐项连向具体消费行为(能否信任、能否使用、找谁问),强调画像服务于消费决策而非堆元数据。

图 15-3 强调资产画像要服务消费行为。DataAgent 选择表时,除了字段匹配,还要看质量状态、刷新时间、Owner 和适用场景。例如“履约延迟”可能同时出现在明细表、日报表和实时宽表中。若用户问“昨日原因分析”,日报表和明细表更合适;若用户问“现在是否异常”,实时宽表更合适。

元数据治理中需要避免四类偏差。数据目录不能退化成表名搜索框;没有业务语义、质量状态和权限信息,目录对 Agent 价值有限。Owner 不是展示字段,它要参与告警、审批、变更和事故复盘。字段标签除了服务合规,还应帮助 Schema Linking,例如“门店”“区域”“履约时长”的业务别名。目录采集之后还要持续治理,无人维护、无人审核、无人下线的目录会快速失真。

15.1.2 端到端血缘:从采集任务、转换作业、查询语句到 Agent 回答

血缘描述数据从哪里来、经过哪些处理、影响哪些下游。对 Agent 平台而言,血缘用于工程排障,也用于回答引用、影响分析和合规审计。DataAgent 如果回答“华东区延迟上升主要来自夜间仓配”,平台应能说明这个结论使用了哪些资产、哪些分区、哪些指标口径和哪些质量状态。

图15-4:血缘要覆盖四层

图15-4:血缘要覆盖四层。来源:本书自绘。Alt text:血缘自上而下分四层,系统级、表级、字段级、指标级,箭头表示越往下定位越精细,说明完整血缘需覆盖四层而非只到表级。

图 15-4 说明,血缘要覆盖四层:源系统到湖仓、湖仓到指标、指标到 Agent 查询、Agent 查询到回答引用。只采集表级血缘不够,字段级血缘能解释某个字段变更会影响哪些指标;查询级血缘能解释某次回答用了哪些表和过滤条件;回答级血缘能把自然语言结论和底层数据证据连接起来。

血缘采集通常要接多类系统。编排系统给出任务依赖,SQL 解析给出表字段关系,数据集成系统给出源到目标映射,查询网关记录实际访问,Agent 运行时再补上工具调用和回答引用。OpenLineage 可以作为事件标准,DataHub 或 OpenMetadata 可以作为元数据平台;资产命名、Owner、标签和权限规则仍要由企业自己定义。


15.2 Data Contract:Schema、语义、SLA、权限、质量规则与变更流程

数据契约(Data Contract)是生产者和消费者之间对数据资产的正式约定。它不只约束字段 Schema,还应覆盖业务语义、刷新 SLA、质量规则、权限分类、兼容性策略和变更流程。

图15-5:Data Contract 把隐性约定显性化

图15-5:Data Contract 把隐性约定显性化。来源:本书自绘。Alt text:左侧"隐性约定"是生产者口头承诺的字段与口径,右侧"数据契约"把这些约定写成 schema、SLA、质量规则等可校验条款,对比约定从隐性到显性。

图 15-5 的重点是把隐性约定显性化。一家多业务线企业如果把 delivered_at 从实际签收时间改成系统确认时间,即使字段名和类型不变,业务语义也发生了不兼容变更。没有契约,DataAgent 会继续使用旧口径解释新数据,造成难以发现的错误。

到了生产工程阶段,数据契约必须从口头约定变成可读可校验的对象。下面这个例子展示的是最小可落地的写法。

# 示例:数据契约,不包含真实凭证
contract:
  id: contract.fulfillment_delay.v2
  asset_id: ads.fulfillment_delay_daily
  owner: fulfillment-data-team
  consumers:
    - DataAgent
    - operations_dashboard

schema:
  fields:
    - name: order_id
      type: string
      required: true
      pii: false
    - name: store_id
      type: string
      required: true
      pii: false
    - name: delivered_at
      type: timestamp
      required: true
      meaning: actual_customer_receipt_time
    - name: delay_minutes
      type: integer
      required: true
      rule: delivered_at - promised_at

semantics:
  metric_refs:
    - fulfillment_delay_rate
  grain: order_id
  valid_questions:
    - "按区域分析履约延迟原因"
    - "查看昨日履约延迟趋势"

slo:
  freshness: "08:00 Asia/Shanghai daily"
  availability: "99.5% monthly"

quality:
  hard_rules:
    - order_id_unique
    - delay_minutes_non_negative
  soft_rules:
    - row_count_anomaly

governance:
  classification: internal
  retention_days: 730
  access_policy: region_level_aggregation_only

change_policy:
  compatible:
    - add_nullable_field
  incompatible:
    - remove_field
    - change_business_meaning
    - tighten_access_policy
  approval_required_from:
    - asset_owner
    - downstream_owner

示例 15-1:数据契约示例

这个契约让平台能自动判断字段变更、语义变更、SLA 违约和权限变化是否会影响 DataAgent。表 15-2 进一步把这些变化拆成不同处理方式,避免所有变更都靠人工临时判断。

表15-2:元数据采集器、血缘解析等组件的职责、输入输出与失败模式。来源:本书整理。

组件 职责 输入 输出 失败模式
元数据采集器 从湖仓、编排、质量、查询网关和 Agent 运行时采集元数据 表结构、运行状态、质量结果、查询日志 统一资产元数据事件 采集延迟、字段缺失、重复资产
数据目录 提供资产搜索、标签、Owner、质量状态和资产画像 元数据事件、人工维护信息 资产详情、搜索结果、推荐资产 目录失真、Owner 缺失、标签过期
血缘服务 维护表级、字段级、查询级和回答级血缘 作业依赖、SQL 解析、Agent 调用记录 血缘图、影响分析、引用链路 解析失败、动态 SQL 缺失、跨系统断点
契约服务 管理 Schema、语义、SLA、质量和权限约定 契约配置、变更请求 兼容性判断、审批结果、发布验收 只校验 Schema、不校验语义
指标服务 统一指标定义、维度、时间粒度和查询接口 语义层定义、物理模型、权限上下文 指标结果、口径解释、SQL 或查询计划 口径重复、维度错误、权限绕过
审计服务 记录访问、变更、授权、回答引用和人工审批 查询请求、策略决策、发布事件 审计日志、合规报告、追责证据 日志缺失、身份不一致、保留期不足

15.2.1 指标体系:业务口径、维度关系、时间粒度与可复用计算逻辑

指标体系是 DataAgent 查数能力的核心。没有统一指标层,Agent 只能在物理表上生成 SQL,容易出现同名不同义、分母不一致、时间粒度错误和权限绕过。

图15-6:语义层把业务问题和物理存储解耦

图15-6:语义层把业务问题和物理存储解耦。来源:本书自绘。Alt text:上层业务问题(如"上月华东 GMV")经语义层映射到下层物理表与字段,中间语义层隔离两侧,使业务口径变化不直接依赖物理表结构。

图 15-6 表明,语义层把业务问题和物理存储解耦。DataAgent 问“昨日 GMV 环比变化”,应调用指标定义,而非自己临时选择订单表、支付表和退款表拼出口径。指标定义应包含名称、说明、计算公式、过滤条件、维度、粒度、时区、默认聚合方式、权限策略和废弃状态。

表15-3:直接查物理表与经指标层两种问数方式的取舍。来源:本书整理。

方案 优势 代价 适用场景 本书建议
直接查物理表 灵活,开发初期快 口径分散、权限难控、回答不可复用 探索分析、一次性排查 不作为 DataAgent 生产默认路径
指标宽表 查询快,BI 接入简单 口径容易固化,维度扩展成本高 高频报表、稳定指标、低延迟查询 可作为服务层,但定义仍应进入语义层
Headless BI / 语义层 口径统一,跨消费端复用 建模和治理成本较高 多团队共享指标、DataAgent 查数、指标 API 生产环境优先建设
特征平台 统一在线和离线特征 更偏机器学习特征生命周期 风控、推荐、调度 Agent 与指标层协作,不替代经营指标体系

指标层工具的选择也要看边界。Cube 适合把指标和维度以服务方式暴露给应用和看板;MetricFlow 和 dbt Semantic Layer 适合与 SQL 模型和指标定义协同;Feast 更偏特征平台,适合在线特征查询和训练服务一致性,不适合作为经营指标口径的唯一载体。替代方案包括自研语义层、BI 工具内置指标层、湖仓引擎物化视图和 OLAP 指标宽表。

15.2.2 语义层与指标层工具:Cube、MetricFlow、dbt Semantic Layer 与 Feast

工具不是本章的中心,但工具边界必须讲清楚。表 15-3 用元数据服务、血缘服务和指标服务三个入口说明,DataAgent 应该通过受控工具拿上下文,而非直接猜表、猜字段。

表15-4:Cube、MetricFlow、dbt Semantic Layer 等语义层工具的优势与适用场景。来源:本书整理。

方案 优势 代价 适用场景 本书建议
Cube 面向应用的指标服务能力强,缓存和 API 形态成熟 需要维护语义模型与底层表的一致性 面向产品、看板和 DataAgent 的指标查询服务 适合把核心指标服务化
MetricFlow 与指标定义、维度和时间粒度建模贴近 需要配合模型治理和开发流程 指标口径统一、分析工程团队主导 适合与 dbt 模型协同
dbt Semantic Layer 与 dbt 生态和模型测试结合紧密 依赖 dbt 项目治理质量 已有 dbt 转换体系的组织 适合把模型、测试和指标定义连接
Feast 在线和离线特征一致性强 不面向通用 BI 指标语义 风控、推荐、供应链预测、实时特征 用于 Agent 的在线特征,不替代指标层
自研语义层 可完全贴合组织权限、口径和审计要求 成本高,容易重复造轮子 强监管、复杂组织、特殊权限模型 只有在现有工具无法满足治理要求时采用

图15-7:经营查数与在线决策的数据服务边界

图15-7:经营查数与在线决策的数据服务边界。来源:本书自绘。Alt text:左侧"经营查数"走指标层、容忍秒级延迟,右侧"在线决策"走实时特征、要求毫秒级,对比两类数据服务在延迟与一致性上的不同边界。

图 15-7 的结论是,经营查数和在线决策不能混用同一抽象。DataAgent 解释经营结果时需要指标口径和维度关系;风控 Agent 判断某个用户是否异常时可能需要实时特征。二者可以共享底层事实和元数据,但接口、时效、权限和审计要求不同。

15.2.3 面向 DataAgent 的元数据能力:Schema Linking、口径解释、引用溯源与影响分析

DataAgent 使用元数据时,最先发生的是 Schema Linking。平台要把自然语言中的“华东区”“履约延迟”“昨日”“门店”映射到候选资产、字段、维度和指标。映射过程需要字段别名、业务标签、示例问题、使用热度和权限过滤共同参与。随后是口径解释。Agent 给出数值时,还要说明指标口径、过滤条件、时间范围和分母分子。例如“履约延迟率”应说明是否按订单数计算、是否剔除取消订单、承诺时间来自下单页还是履约系统。回答生成后,还要留下引用溯源。每次回答应记录使用的指标、资产版本、分区、查询语句、质量状态和权限策略。用户追问“这个结论从哪里来”时,平台能返回可读引用。影响分析也要进入同一条链路。字段、表、质量规则或指标口径变化前,平台应知道会影响哪些看板、Agent 能力、历史回答和告警规则。

图15-8:元数据进入 Agent 运行时

图15-8:元数据进入 Agent 运行时。来源:本书自绘。Alt text:左侧"离线文档"是静态 wiki,右侧"运行时元数据"被 Agent 在每次问数时实时查询调用,对比元数据从文档变为在线服务。

图 15-8 说明,元数据需要进入 Agent 运行时,不能停留在离线文档里。每一次工具调用都应携带身份、权限、资产版本和质量状态;每一次回答都应沉淀引用和审计。

下面这份接口契约示例,展示的是 DataAgent 如何向元数据服务请求查询上下文。读这段时可以重点看请求里哪些字段决定了后续权限、口径和候选资产范围。

{
  "request_id": "req_20260611_0001",
  "user_context": {
    "user_id": "user_demo",
    "roles": ["regional_ops"],
    "region_scope": ["east"]
  },
  "question": "华东区昨日履约延迟为何上升?",
  "intent": "metric_explanation",
  "required_capabilities": [
    "asset_search",
    "metric_resolution",
    "policy_filter",
    "lineage_trace"
  ]
}

服务端响应最好一次性返回候选指标、可访问资产、口径说明、质量状态和限制。这样 Planner 在下一步做选择时,看到的内容包括“能不能查”和“应该按什么口径查”。

{
  "resolved_metrics": [
    {
      "metric_id": "fulfillment_delay_rate",
      "display_name": "履约延迟率",
      "definition": "延迟订单数 / 已履约订单数",
      "grain": "day, region",
      "allowed_dimensions": ["region", "store_type", "warehouse_type"]
    }
  ],
  "authorized_assets": [
    {
      "asset_id": "ads.fulfillment_delay_daily",
      "partition": "dt=2026-06-10",
      "quality_status": "passed",
      "freshness": "2026-06-11T07:10:00+08:00"
    }
  ],
  "policy": {
    "row_filter": "region = 'east'",
    "masking": ["customer_id"],
    "allowed_actions": ["query", "explain"]
  },
  "lineage_hint": {
    "upstream_assets": ["dwd.orders_daily", "dwd.delivery_events_daily"],
    "contract": "contract.fulfillment_delay.v2"
  }
}

示例 15-2:DataAgent 元数据上下文接口示例

这是生产工程示例。重点是把语义解析、权限过滤、质量状态和血缘提示放在同一个响应中,避免 Agent 自行猜测。

15.2.4 治理链路:权限过滤、脱敏策略、审计日志与合规留痕

Agent 平台的数据治理难点在于自然语言查询比固定看板更灵活。用户可能用模糊表达绕过固定报表边界,例如“列出华东区延迟最严重的客户明细”。如果元数据控制面不能把身份、资产、字段、指标和输出动作关联起来,权限策略很容易被绕过。

图15-9:数据治理闭环

图15-9:数据治理闭环。来源:本书自绘。Alt text:环形流程,权限过滤、脱敏、审计、合规留痕四个环节首尾相连,箭头表示每次数据访问都留痕并反馈到策略,构成持续治理闭环。

图 15-9 展示了治理链路。权限不能只是查询前的一次判断,它要贯穿资产发现、指标选择、SQL 生成、结果脱敏、回答措辞和审计留痕。某些用户可以看区域聚合指标,但不能看门店明细;可以看延迟率,但不能看客户手机号;可以解释原因,但不能导出明细。

表15-5:仅数据库授权与多层治理两种权限脱敏策略的取舍。来源:本书整理。

方案 优势 代价 适用场景 本书建议
只在数据库授权 利用现有权限体系,落地快 Agent 语义层和回答输出仍可能泄露 早期内部分析、单一数据源 只能作为底层防线
语义层权限 能按指标、维度、动作控制访问 需要维护语义模型和策略一致性 DataAgent 查数、跨看板指标复用 作为生产默认控制点
结果级脱敏 能控制最终展示内容 无法阻止中间查询过度访问 聚合回答、敏感字段展示控制 必须与查询前授权配合
全链路审计 可追责、可复盘、可合规证明 日志存储和检索成本增加 涉及敏感数据、监管或关键业务动作 核心 Agent 能力必须具备

15.3 元数据平台、血缘采集与指标服务

本节给出元数据平台、血缘采集与指标服务的生产方案,重点是接口和治理流程。图 15-4 展示这些能力怎样连成一个控制面,支撑 DataAgent 在执行前获得可信上下文。

图15-10:元数据平台、血缘与指标服务的最小架构

图15-10:元数据平台、血缘与指标服务的最小架构。来源:本书自绘。Alt text:架构图含元数据存储、采集器、血缘图谱、指标服务、查询 API 五个组件,箭头标出采集、解析、对外服务的数据流向。

图 15-10 是可落地的最小架构。元数据采集不应只从湖仓 Catalog 读取表结构,还应从编排系统读取任务状态,从质量平台读取门禁结果,从查询网关读取实际访问,从 Agent 运行时读取回答引用,从权限系统读取策略决策。控制层再把这些信息统一服务给 DataAgent 和治理工具。

下面这份 YAML 只取指标定义里最关键的部分,用来说明指标口径怎样被写成可发布对象。真正工程实现可以更复杂,但这些核心字段不应再省。

# 示例:指标定义,不包含真实凭证
metric:
  id: fulfillment_delay_rate
  display_name: 履约延迟率
  description: 延迟订单数占已履约订单数的比例
  owner: fulfillment-data-team
  status: active

calculation:
  numerator: count_orders(where: delay_minutes > 0)
  denominator: count_orders(where: delivered_at is not null)
  expression: numerator / denominator
  default_time_grain: day
  timezone: Asia/Shanghai

dimensions:
  - region
  - store_type
  - warehouse_type
  - carrier_type

source:
  asset_id: ads.fulfillment_delay_daily
  required_quality_status: passed
  contract: contract.fulfillment_delay.v2

governance:
  access_policy: region_scoped
  minimum_aggregation_level: region
  pii_exposure: none

examples:
  - question: 华东区昨日履约延迟率是多少?
    intent: metric_lookup
  - question: 为什么昨日履约延迟率上升?
    intent: metric_explanation

示例 15-3:指标定义示例

这类定义让 DataAgent 可以复用指标口径,避免每次动态拼出口径。以下伪代码展示 DataAgent 查询前的元数据检查。

# 伪代码:DataAgent 查询前的元数据控制面检查
def prepare_query_context(user, question):
    candidates = metadata.search_assets_and_metrics(question)
    authorized = policy.filter(user=user, candidates=candidates)
    if not authorized:
        return deny("no_authorized_asset")

    selected = semantic_layer.resolve_metric(question, authorized)
    quality = quality_service.get_status(selected.source_asset)
    if quality.status == "blocked":
        return degrade_with_reason(selected, quality)

    lineage = lineage_service.trace(selected.source_asset)
    audit.record_intent(user=user, question=question, selected=selected)

    return {
        "metric": selected,
        "policy": authorized.policy,
        "quality": quality,
        "lineage": lineage,
    }

示例 15-4:查询前元数据检查伪代码

核心路径是搜索、授权、指标解析、质量与血缘检查,再记录审计。变更流程也需要进入控制面。

图15-11:把变更前置到发布之前

图15-11:把变更前置到发布之前。来源:本书自绘。Alt text:流程显示 schema 或口径变更先经契约校验和影响分析,确认下游无碍后才发布,箭头表示变更检查前置而非上线后救火。

图 15-11 把变更前置到发布之前。若 delay_minutes 的计算公式变更,平台应先判断影响哪些指标、看板、Agent 问题模板和历史引用,再决定是否需要灰度、重算和公告。没有影响分析的变更流程只是在事故后补救。

15.3.1 元数据发布给 Agent 的准入标准

元数据发布给 Agent 前,平台要证明它能支撑资产选择、口径解释、权限过滤和审计复盘。核心表、视图、指标、特征和实时结果都应具备资产画像、Owner、状态和下游消费者;关键业务词、字段别名、指标别名和禁用同义词要进入元数据系统。血缘与契约决定 Agent 是否能解释自己的回答。平台至少覆盖采集、转换、指标、查询和 Agent 回答引用;核心资产支持字段级血缘;核心资产还要具备 Schema、语义、SLA、质量、权限和变更策略。指标治理要落到唯一 ID、口径、维度、粒度、时区、Owner、状态和废弃流程。权限与质量要进入查询前路径。策略应支持用户身份、角色、区域范围、行列级过滤、聚合级别和脱敏;DataAgent 查询前能读取资产质量状态和新鲜度,质量 blocked 时可降级或拒绝;每次回答都记录使用资产、分区、指标、查询、质量状态和权限策略。元数据平台还要覆盖变更和成本。字段、契约、指标和权限变更前能识别下游看板、Agent 能力和告警规则;访问、拒绝、脱敏、导出、回答、审批和变更均有可检索日志;资产、指标和字段有创建、发布、废弃、下线和历史兼容策略;元数据采集频率、血缘解析深度、审计日志保留和指标缓存有成本边界。

图15-12:将上线标准压缩为六个门禁

图15-12:将上线标准压缩为六个门禁。来源:本书自绘。Alt text:纵向列出六个上线门禁,元数据登记、血缘可查、契约就位、质量达标、权限脱敏、口径统一,每项标注通过条件,构成数据资产发布前的检查项。

图 15-12 将上线标准压缩为六个门禁。只要任一门禁缺失,DataAgent 都可能在资产选择、口径解释、权限过滤或审计复盘中出现不可控风险。

同名指标散落在多个看板,DataAgent 口径前后不一致

  • 现象:业务人员连续追问“销售额”和“GMV”,DataAgent 在不同问题中使用了订单金额、支付金额和扣除退款后的净额。
  • 根因:指标定义分散在看板 SQL、临时宽表和分析脚本中,没有统一指标 ID、口径和废弃状态。
  • 修复:建立指标注册流程;将核心指标迁入语义层;DataAgent 只能调用 active 状态指标,并在回答中显示口径。

字段类型没变但业务含义变了,契约检查没有发现

  • 现象:履约延迟率突然下降,但仓配实际没有改善。
  • 根因:上游把 delivered_at 从实际签收时间改为系统确认时间,字段类型仍是 timestamp,Schema 校验通过。
  • 修复:数据契约加入业务语义和不兼容变更类型;涉及语义变更必须走影响分析和下游 Owner 审批。

血缘只到表级,无法判断字段变更影响

  • 现象:门店区域字段调整后,多个区域指标异常,但平台只能看到表依赖,无法定位哪些指标受影响。
  • 根因:只采集任务级和表级血缘,没有解析字段级 SQL 和指标定义。
  • 修复:核心资产补字段级血缘;指标定义显式声明依赖字段;变更前自动列出受影响指标和 Agent 问题模板。

权限只在数据库层控制,Agent 回答泄露敏感聚合维度

  • 现象:区域经理无权查看客户明细,但通过自然语言追问获得了过细粒度的异常客户列表。
  • 根因:数据库权限阻止了部分字段访问,但语义层没有最小聚合粒度和回答级脱敏策略。
  • 修复:策略服务增加指标级、维度级、动作级权限;DataAgent 输出前执行聚合粒度检查和敏感字段脱敏。

元数据采集延迟导致 Agent 使用已废弃资产

  • 现象:某张履约旧表已经迁移,但 DataAgent 仍在少数问题中选择旧表。
  • 根因:目录采集延迟,资产废弃状态没有及时同步到 Agent 检索索引。
  • 修复:资产状态变更采用事件推送;废弃资产进入查询阻断列表;索引刷新失败时回退到在线目录查询。

15.3.2 元数据与第33章语义层的分工

元数据和语义层经常被混在一起讨论,但在平台里应承担不同责任。元数据回答“有哪些资产、谁负责、状态如何、从哪里来、影响谁”;语义层回答“业务问题应使用哪个指标、哪个维度、哪个口径、哪个时间粒度”。前者偏资产控制面,后者偏问数语义面。DataAgent 还需要两者,但不能让其中一方替代另一方。一个常见误区,是把表注释、字段别名和指标说明都塞进 Prompt,让模型自行判断。这样短期能回答一些问题,长期会让口径、权限和血缘都不可控。更稳妥的做法是:元数据系统提供资产状态、Owner、质量、新鲜度、血缘和权限标签;语义层在这些资产之上定义 Metric、Dimension、View 和 Glossary;DataAgent 通过 Schema Linking 把用户问题连接到语义层,再由元数据判断可用性和风险。

这条分工也影响变更治理。字段下线、表迁移、质量阻断属于元数据和数据契约变更;指标口径调整、同义词变化、默认时间粒度变化属于语义层变更。两类变更都可能影响 Agent,但审批人、回归样本和发布节奏不同。平台需要在 Trace 中同时记录资产版本和语义版本,才能在事故复盘时判断是底层资产变化,还是业务口径变化。


数据契约的作用是把变化前置。源系统新增字段、修改枚举、改变删除语义或调整 SLA,都要先说明影响范围,再进入下游。否则 Agent 可能继续使用旧字段解释新业务,错误会在自然语言答案中被包装得更难发现。血缘也要服务运行时。用户看到一张图表时,平台应能追溯到指标、表、任务、源系统和数据版本。事故发生后,团队可以沿血缘找到哪一层发生变化,而非在模型、SQL 和数据之间来回猜。元数据建设的验收标准不应只是页面可搜索。更重要的是 Agent 能通过接口读取这些信息,并在生成 SQL、解释答案和拒绝回答时使用它们。只有这样,数据控制面才真正进入 Agent 平台。

指标口径要有可执行定义。自然语言说明能帮助人理解,但 Agent 生成 SQL 时还需要字段映射、过滤条件、时间口径、聚合方式和适用粒度。若指标平台只保存一段描述,模型仍然会在实现层面猜测。把指标定义转成可调用接口,是语义层和 DataAgent 协作的基础。血缘信息也要分层呈现。数据工程师需要看到任务、表和字段级血缘;业务用户更关心某个指标来自哪些系统、今天是否完整、是否经过修正。Agent 在回答时可以根据用户角色选择解释深度,而非把复杂血缘图直接塞进答案。数据契约的变更流程要包含下游验证。上游系统修改字段枚举后,数据平台还要检查 schema 是否兼容,还要跑关键指标和问数样本。字段类型没变,不代表业务含义没变。很多 Agent 错误都来自这种“技术兼容、语义不兼容”的变化。

权限元数据也应和业务语义绑定。某个字段是手机号、某张表包含薪酬、某个指标只允许区域负责人查看,这些信息要能被查询计划和回答生成使用。否则模型可能生成正确 SQL,却在展示阶段泄露敏感明细。元数据工作最终要减少口头解释。用户质疑一个数字时,平台能展示指标定义、血缘、更新时间、质量状态和权限范围;审计复盘时,团队能还原当时 Agent 看到的语义材料。做到这一步,数据控制面才从文档变成了运行时能力。指标服务要处理同名不同义。销售额、收入、GMV、成交额在不同业务线里可能接近,也可能差别很大。指标平台应允许多个指标共存,但必须说明适用组织、场景和计算规则。Agent 在用户问题含糊时,应请求澄清或展示候选口径,而非自动选择一个看起来最常用的字段。

元数据的质量也需要治理。字段描述为空、血缘长期不更新、负责人离职、指标定义和代码不一致,都会让 Agent 使用错误材料。元数据平台不能只收集资产,还要有完整度、更新频率和责任人检查。否则“有元数据”会变成另一层不可信信息。血缘采集要覆盖代码和运行时。静态解析 SQL 可以得到大部分表级关系,但动态 SQL、Notebook、流式任务和外部工具也会产生数据依赖。Agent 平台中的工具调用同样应写入血缘,使某个报告、图表或回答能追溯到具体数据资产。指标变更要通知消费者。修改计算公式、调整过滤条件、切换源表后,依赖该指标的 Agent、看板、评测样本和报告模板都可能受影响。变更流程应输出影响清单,并在发布后触发关键问题回归。这样业务用户不会在同一个问题上突然得到无法解释的新答案。

元数据还可以帮助模型少问无效问题。若平台知道某个字段只在月度粒度可用,用户问日级趋势时,Agent 可以提前说明限制;若某个表今天质量未通过,Agent 可以换用替代指标或暂停回答。这种能力来自结构化元数据,而非模型临场推理。语义层和元数据要处理别名。业务用户常说“销售额”“营收”“流水”,系统里可能对应不同指标。别名映射应由业务负责人确认,并记录适用范围。Agent 可以用别名提高理解能力,但不能在多个候选口径之间静默选择。需要澄清时,系统应把候选指标和差异展示给用户。数据资产负责人要进入运行流程。字段缺描述、指标有争议、血缘异常或权限申请时,平台需要知道找谁处理。负责人信息是问题流转入口,不是目录里的装饰字段。没有负责人,Agent 暴露的数据问题会回到平台团队,平台团队却无法决定业务口径。

元数据接口要保证低延迟和高可用。Agent 每次生成 SQL 或解释指标都可能查询元数据,若元数据服务慢或不可用,问数链路也会受影响。重要元数据可以缓存,但缓存要跟随版本失效。数据控制面进入运行时后,它本身也需要 SLO。血缘可以帮助影响分析。上游表变更前,平台能列出受影响指标、Agent、评测样本和报告模板。这样数据变更不再只影响数仓团队,而能提前通知使用这些资产的 Agent 应用。影响分析越准确,数据变更越敢推进。

15.4 数据产品运营与 Agent 采纳证据

数据产品进入 Agent 平台后,运营指标要从“是否可用”扩展到“是否被正确使用”。一个数据产品可能有稳定 API、完整字段和清晰权限,但 Agent 仍然可能用错:选择了不适合的粒度,忽略了刷新延迟,把探索字段用于正式报告,或在用户无权场景下反复触发拒绝。数据产品 owner 需要看到这些使用证据,才能判断产品说明、语义层和工具接口是否足够清楚。

采纳证据应记录调用次数、调用场景、失败类型、人工修正、报告引用、用户反馈和下游产物。若某个数据产品被频繁用于 DataAgent 报告,就要提高发布稳定性和回归样本覆盖;若某个产品经常导致权限拒绝,就要优化可见性提示或拆分数据域;若某些字段从未被正确使用,就要考虑补示例、改名或下线。运营证据让数据产品从静态资产变成可持续改进的 Agent 能力。

数据产品运营还要处理版本并行。旧版本不能立刻删除,因为历史报告、Trace 和评测样本可能仍在引用;新版本也不能直接替换所有 Agent,因为指标解释和字段语义可能变化。平台应记录每个 Agent 使用的数据产品版本,并在迁移时保留对比样本。这样数据产品迭代不会破坏智能链路的可复盘性。

15.5 元数据质量的业务复核机制

元数据质量不能完全由数据平台自动判断。字段是否表达清楚、指标是否符合业务口径、血缘是否覆盖实际使用路径、SLA 是否匹配用户预期,都需要业务 owner 参与复核。DataAgent 使用这些元数据生成查询和解释结论后,元数据问题会直接变成用户看到的回答问题。把元数据当作内部资产维护,会低估它在智能链路中的影响。

业务复核可以围绕高频问题进行。团队先收集 DataAgent、BI Copilot 和报表系统中的高频查询,再检查这些查询涉及的表、字段、指标、权限、质量规则和负责人是否完整。若某个字段被频繁用于问数,却没有业务解释和有效期,它就不适合直接暴露给自然语言查询;若某个指标存在多个定义,语义层应先收敛或标注适用范围。复核材料应进入数据目录,而不是停留在会议纪要。

早期机制可以很轻:每个核心数据产品有 owner,每月抽查一批高频问题,每次线上争议都回查元数据记录并补充说明。这样元数据治理会从“把字段登记完整”转向“让智能系统能安全使用字段”。这个变化对 DataAgent 很重要,因为模型会放大元数据质量:说明清楚时,它能稳定组合能力;说明含糊时,它会把含糊解释成看似确定的答案。

15.6 数据契约变更的发布门禁

数据契约变更要进入发布门禁,而不是停留在数据平台内部通知。对 Agent 平台来说,字段新增、字段删除、类型变化、枚举变化、SLA 调整、权限标签变化和业务口径变化,都会影响自然语言查询、报告生成和工具调用。字段类型没有变化,也可能改变语义;权限标签没有变化,也可能因为聚合粒度调整而改变可见范围。发布门禁应把这些变化拆成 schema、语义、SLA、权限和质量五类,并为每一类定义检查样本。

Schema 变更的门禁关注兼容性。新增可选字段通常可以低风险发布,但删除字段、修改类型、收紧枚举和改变主键语义,都需要检查下游消费者。DataAgent 的消费者包括 SQL 查询器、语义层、指标服务、报告模板、评测样本和前端图表。发布前应列出受影响的 Metric、View、Agent 问题模板、缓存键和历史报告引用。若无法列出影响范围,变更就不应直接进入生产。变更说明还要写清回滚路径:是恢复旧字段、保留兼容视图,还是让 Agent 暂停使用该资产。

语义变更的门禁更容易被忽略。上游把“支付完成时间”改成“系统确认时间”,字段类型仍是 timestamp,Schema 检查会通过,但履约、收入和时效指标都会变化。语义门禁应要求 owner 说明业务含义、适用时间、历史数据是否重算、指标是否需要新版本。Agent 平台还要重放一批高频问题,检查解释是否仍然成立。若旧报告已经引用旧口径,平台应保留旧版本说明,不能让历史报告在新口径下被重新解释。

SLA 和质量变更也会改变 Agent 行为。数据延迟从 15 分钟变成 2 小时,用户问“今天实时情况”时,系统应该提示数据新鲜度不足,而不是继续给出看似确定的答案。质量规则收紧后,某些资产可能进入 blocked 状态,DataAgent 应选择替代资产、返回降级解释或转人工分析。发布门禁要验证这些状态是否能被 Runtime 和前端读到。若状态只存在于数据平台页面,Agent 仍可能绕过它。

权限变更要和答案层一起验收。行列级权限、聚合粒度、脱敏策略和导出策略变化后,SQL 执行通过不代表回答可以直接展示。平台应检查不同角色在同一问题下得到的结果差异,确认拒答、聚合降级和申请入口都符合策略。对敏感域,门禁样本要包括越权问题、边界角色、历史缓存命中和报告引用。权限变更还要触发缓存失效,避免旧结果在新策略下继续可见。

发布门禁的输出应是一份可回放记录。它记录变更来源、影响资产、受影响 Agent、回归样本、失败处理、批准人和回滚目标。这样线上出现争议时,团队能从 Trace 回到当时的数据契约版本,而非只看到一条自然语言回答。数据契约门禁做扎实后,数据变更会成为 Agent 平台可以吸收的正常事件,而不是每次都靠事后解释。

15.7 数据契约争议的裁定流程

数据契约上线后,争议会出现在多个层面。业务方可能认为字段含义没有变化,数据团队却认为 schema 已经升级;平台可能认为质量规则阻断是正确的,业务方却认为数据仍可用于草稿分析;安全团队可能认为权限标签必须收紧,DataAgent 团队担心问数体验下降。契约争议不能靠口头协调解决,需要裁定流程和可复现材料。

裁定材料应包含契约版本、变更记录、字段样例、质量规则、血缘影响、权限标签、受影响数据产品、受影响 Agent 样本和业务 owner 意见。若争议来自字段语义,业务 owner 需要给出口径裁定;若争议来自质量阈值,数据 owner 需要说明可接受风险;若争议来自权限标签,安全 owner 需要说明合规依据;若争议来自 Agent 行为,平台 owner 需要给出降级和提示方案。不同争议必须落到具体责任人。

裁定结果还要进入元数据系统。字段继续使用、字段废弃、质量规则放宽、质量规则收紧、权限标签变更、指标版本更新,都应形成可追踪记录,并触发下游样本回放。若裁定只停留在会议纪要,DataAgent 仍会在下一次查询中使用旧上下文,争议会重复出现。元数据控制面要把裁定转成机器可读的契约变化。

早期可以为核心数据产品建立契约争议台账。台账记录争议问题、证据材料、裁定人、裁定结果、生效时间、历史结果处理方式和复审日期。这样数据契约既能支撑发布前检查,也能在运行中承接业务争议和平台修正。

15.8 权限标签变化的回归验证

权限标签是 DataAgent 的安全边界之一。组织架构调整、客户归属变化、项目成员变更、数据脱敏策略更新,都会改变用户能看到哪些字段和行。若权限标签更新没有回归验证,Agent 可能在旧权限下生成报告,或在新权限下过度拒绝正常查询。权限变化不能只看同步任务是否完成,还要看真实任务是否仍然符合访问规则。

回归验证要覆盖允许和拒绝两类样本。允许样本证明普通用户仍能完成应有工作,拒绝样本证明越权访问仍被拦截。样本应包含用户角色、租户、数据域、字段、行级过滤、工具调用和最终输出。对于报告和 artifact,还要检查导出后的权限状态,因为用户看到的是被模型整理后的材料,原始 SQL 结果只是其中一层证据。

早期可以在权限标签发布后自动回放一批 DataAgent 样本。若允许样本失败,说明策略过严或标签缺失;若拒绝样本通过,说明存在泄露风险;若报告输出没有保留权限证据,说明报告层需要补 EvidenceRef。这样权限治理就从后台同步进入 Agent 任务验收。

15.9 数据权限链路的端到端校验

数据权限链路进入生产后,平台需要把用户身份、角色、字段级权限、脱敏结果、查询范围、导出记录和审计回执放进统一证据口径。证据口径会减少事后解释成本,让业务、平台、数据、安全和运营团队能够围绕同一组事实讨论问题。没有这些材料,故障发生后只能凭经验判断;有了这些材料,团队可以知道哪些输入有效、哪些动作已经执行、哪些产物可以继续使用、哪些结果需要撤回。

这类证据应和第33章语义层、第34章查询执行和第52章合规连起来。上游章节提供能力基础,下游章节使用运行结果,本章则负责说明中间环节如何被验证。若某个能力只在本章看起来完整,却无法进入 Trace、Eval、发布记录或合规证据包,生产系统仍然会出现断点。读者在实现时应把章节之间的接口看成工程契约,而不是阅读顺序上的相邻关系。

常见风险包括权限只在入口检查、缓存绕过字段脱敏、导出文件缺少审计记录、跨租户样本没有覆盖。这些问题通常不会在一次成功演示中暴露,因为演示样本往往干净、短小、路径明确。真实业务会带来旧数据、异常输入、权限变化、用户撤回、预算限制和长时间运行状态。平台如果没有把这些情况纳入样本和台账,后续扩展场景时就会重复遇到同类问题。

权限链路应以真实查询和导出样本验收,不能只看权限表配置。执行记录至少要说明 owner、版本、样本、影响范围、处置动作和复查时间。记录不需要写成流程报告,但要足够让后来者理解当时的判断。对于高风险能力,还应说明哪些条件满足后才能扩大使用,哪些条件失败时必须降级或撤回。

落地时可以先选择少量代表场景建立这种习惯。实践上,应先把高频、高风险、外部可见的路径做扎实,再把样本、台账和复盘方式复制到其他能力中。这样做能让能力说明落到接入、验证、运营和退出,而不是停留在概念描述。

本章小结

元数据是企业 Agent 平台的数据控制平面,负责资产发现、语义解释、权限过滤、血缘溯源和审计留痕。数据目录不能停留在表名搜索,应提供 Owner、质量状态、新鲜度、分级分类、使用场景和下游消费者等资产画像。血缘需要覆盖源系统、湖仓、指标、查询和 Agent 回答引用,核心资产还应具备字段级和回答级血缘。数据契约也不能只做字段类型校验,还要覆盖 Schema、业务语义、SLA、质量规则、权限和变更流程。DataAgent 生产查数应优先经过语义层和指标服务,避免直接在物理表上临时拼接口径。元数据越完整,Agent 越容易给出可解释、可复核、可审计的回答。

参考文献

OpenLineage. (n.d.). Documentation.

DataHub. (n.d.). Documentation.

Marquez. (n.d.). Documentation.

dbt Labs. (n.d.). MetricFlow documentation.

Cube. (n.d.). Semantic layer documentation.