“本月新客转化为什么下降?”仓库里可能同时存在生产漏斗模型、名字相近的测试表和上季度活动表。连接器都能访问,字段看起来也都合理。Agent 如果挑错其中一个,后面的 SQL、图表和解释越完整,误导性反而越强。
接入层要在生成查询之前回答三个问题:当前身份可以访问什么,这个任务应该使用什么,候选数据是否足以支撑结论。它不是一个把所有 Schema 塞进提示词的管道,而是一套受权限约束的数据发现和上下文路由系统。
图里最重要的是两道权限检查:目录检索前先缩小可见范围,真正执行时再次鉴权。目录中的“可发现”从来不等于数据库中的“可执行”。
接入层与相邻层的边界
接入层负责发现资产、检查来源与可见范围,并交付最小充分上下文。语义层维护“新客”“转化率”等定义、粒度和合法关联;规划层决定分析步骤;执行层保管凭证、运行查询并重新检查权限。
这几层不能互相代替。表名相似不是业务定义,目录授权也不是执行凭证。把这两个边界混在一起,常见结果是 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 延迟与失败重试。
- 拒答质量检查无可靠来源时是否明确停止,而不是编造。
验收时固定身份、问题集和数据快照,再比较关键词召回、混合检索和加入治理信号后的版本。连接器数量不是能力指标;只有真实任务中的来源选择、权限和失败行为才是。
一个更稳妥的落地顺序
先选一个业务域,只接只读数仓和必要文档,建立资产负责人、刷新约定和人工标注任务集。第二阶段再引入血缘、质量和版本化上下文包,测试撤权、过期和连接故障。等路由收益、成本和安全阻断都有证据后,再建设自助注册、缓存失效和规模化连接器契约。
接入层的价值不在于“连得多”,而在于为后续每一步缩小一个可解释、可授权、可验证的数据空间。只要这一步选错,后面的智能几乎都在放大错误。