技术

Data Agent 接入层:连接数据之后,怎样先找对数据

接入层不只是连接器集合。本文拆解数据源注册、资产发现、权限过滤、上下文裁剪与运行时再鉴权,给出可落地的上下文包和验收方法。

技术 #Data Agent#数据目录#元数据#上下文工程#数据治理#权限

“本月新客转化为什么下降?”仓库里可能同时存在生产漏斗模型、名字相近的测试表和上季度活动表。连接器都能访问,字段看起来也都合理。Agent 如果挑错其中一个,后面的 SQL、图表和解释越完整,误导性反而越强。

接入层要在生成查询之前回答三个问题:当前身份可以访问什么,这个任务应该使用什么,候选数据是否足以支撑结论。它不是一个把所有 Schema 塞进提示词的管道,而是一套受权限约束的数据发现和上下文路由系统。

Data Agent 接入层从数据源注册到运行时再鉴权

图里最重要的是两道权限检查:目录检索前先缩小可见范围,真正执行时再次鉴权。目录中的“可发现”从来不等于数据库中的“可执行”。

接入层与相邻层的边界

接入层负责发现资产、检查来源与可见范围,并交付最小充分上下文。语义层维护“新客”“转化率”等定义、粒度和合法关联;规划层决定分析步骤;执行层保管凭证、运行查询并重新检查权限。

这几层不能互相代替。表名相似不是业务定义,目录授权也不是执行凭证。把这两个边界混在一起,常见结果是 Agent 用热门旧表回答新问题,或者通过共享服务账号绕过用户权限。

四个组件,各自要交付什么

组件最小交付物失败时怎么办
数据源注册中心稳定来源 ID、环境、业务域、负责人、认证引用、允许操作和预算未注册来源不静默接入
资产目录与采集器Schema 版本、字段说明、血缘、质量状态、采集时间和数据水位未采到的信号标为未知
上下文路由器候选资产、采用与排除理由、必要字段、定义引用和缺口无可靠来源时澄清或停止
连接器运行时身份绑定、分页、超时、重试、标准结果和审计事件凭证不进入模型上下文

现有目录能力应优先复用。OpenMetadata把所有权、术语、血缘、画像和质量信号组织在统一元数据中,其采集框架覆盖多类元数据工作流。但安装目录不会自动产生正确路由;哪些信号参与排序、哪些属于阻断条件,仍要由团队设计。

一次可靠路由包含六步

1. 把业务问题解析成检索约束

提取业务域、实体、指标、时间、粒度、用途与交付物。相对时间要落成具体区间和时区。问题中“客户”“订单”含义不清时,应在检索前澄清,而不是等 SQL 失败后再补救。

2. 在当前身份可见范围内召回

关键词、业务术语和向量检索可以共同生成候选,但召回必须身份感知。表名、字段说明和样例值本身也可能敏感;不能先把全量目录交给模型,再指望它自行忽略无权访问的资产。

3. 先做硬性策略过滤

环境、用途、地域、敏感等级、元数据可见性和数据访问权限都是门禁,而不是排序加分项。测试表与生产表名称再接近,也不能因为语义相似度高而越过环境隔离。

4. 在合规候选中排序和裁剪

比较业务覆盖、权威性、更新时间、质量证据、关联完整性和预计成本。热门表的历史使用量只能做辅助信号,否则新权威模型永远排不过旧表。多表任务还要保留必要的 Join 路径,而不是只挑几个相似字段。

5. 绑定资产,执行时再检查

路由器交付资产引用、版本与预算,运行时再绑定真实身份。目录发现到执行之间,权限、Schema 和数据状态都可能变化。Microsoft Fabric Data Agent 的权限文档也区分 Agent 的分享权限与底层数据权限;共享 Agent 不会替用户获得源数据访问权。

6. 把结果和纠错写回

保留候选、排除理由、采用版本、执行结果与人工纠错。用户点击或采纳只能说明体验,不足以证明来源正确;被确认的错误才进入回归集或质量标签。

上下文包需要同时表达事实和限制

上下文不应只是字段列表。一个可执行的上下文包至少应包含:

{
  "asset_ref": "warehouse.prod.funnel",
  "schema_version": "v12",
  "selected_fields": ["day", "channel", "new_users", "converted_users"],
  "definition_ref": "metrics/new_customer_conversion/v3",
  "grain": "day × channel",
  "metadata_observed_at": "2026-09-07T09:00:00+08:00",
  "data_watermark": "2026-09-06",
  "quality_status": "unknown",
  "policy_ref": "policy/read-funnel/v4",
  "allowed_operations": ["read"],
  "limitations": ["尚未确认所有渠道覆盖"],
  "requires_runtime_authorization": true
}

metadata_observed_at 与 data_watermark 必须分开。目录今天同步成功,不代表业务数据也更新到了今天。policy_ref 只是策略引用,不是凭证;授权句柄和密钥留在可信服务端。

失败要可恢复,也要允许停下来

接入失败不应统一变成“请稍后重试”。不同失败需要不同出口:

  • NEEDS_AUTH:停止读取,只返回安全的授权指引,不泄露不可见资产名称。
  • NO_RELEVANT_ASSET:澄清问题或找负责人确认,不猜表。
  • STALE_METADATA:刷新并比较版本;无法恢复时明确不确定性。
  • SOURCE_UNAVAILABLE:只对可重试错误限次退避;替代源必须证明等价。
  • BUDGET_EXCEEDED:缩小范围、使用预聚合或进入审批,不允许无限扫描。

当生产漏斗模型缺少某渠道时,正确答案不是悄悄补一张名字相近的表,而是说明“当前来源无法解释整体下降”。能安全停止,是接入层成熟的重要标志。

怎样验收“找对数据”

测试集应同时记录身份、问题、正确资产集合、禁止资产、预期拒绝行为和版本。至少覆盖同名表、过期数据、权限撤销、缺失元数据、跨源关联和无答案任务。

  • Hit@K 检查前 K 个候选是否包含正确资产。
  • Recall@K 检查跨源任务需要的资产是否找全。
  • 权限误放行率单独作为阻断指标,不能与准确率平均。
  • 时效分别报告目录同步延迟与数据水位延迟。
  • 成本记录扫描量、上下文长度、路由 p95 延迟与失败重试。
  • 拒答质量检查无可靠来源时是否明确停止,而不是编造。

验收时固定身份、问题集和数据快照,再比较关键词召回、混合检索和加入治理信号后的版本。连接器数量不是能力指标;只有真实任务中的来源选择、权限和失败行为才是。

一个更稳妥的落地顺序

先选一个业务域,只接只读数仓和必要文档,建立资产负责人、刷新约定和人工标注任务集。第二阶段再引入血缘、质量和版本化上下文包,测试撤权、过期和连接故障。等路由收益、成本和安全阻断都有证据后,再建设自助注册、缓存失效和规模化连接器契约。

接入层的价值不在于“连得多”,而在于为后续每一步缩小一个可解释、可授权、可验证的数据空间。只要这一步选错,后面的智能几乎都在放大错误。