微软 Fabric 这一年多在产品定位上的变化,我刚开始是持保留态度的——又是一个想抢占企业数据入口的云服务而已。但真把几个智能体项目跑下来之后,我发现自己之前低估了它。智能体或者说 AI Agent 这几年最大的瓶颈,根本不是模型能力不够,而是它“不懂业务”。你让一个大模型分析销售下滑,它连你们公司“有效销售额”到底怎么定义都不清楚,怎么可能给出靠谱判断?微软 Fabric 被越来越多团队当成智能体学习业务运作的平台,核心就是它把一个企业里散落的数据、口径、实时事件,整理成了一套智能体可以查询、理解、持续修正的“业务事实层”。
这篇文章我不打算泛泛介绍功能,而是结合我实际搭建的经验,聊清楚这么几件事:智能体为什么需要平台级的业务语义,Fabric 里哪些能力真正派上了用场,我是怎么一步步把一个“会读数据、懂业务规则”的智能体跑起来的,以及这个过程中踩过却很少被写进文档的坑。如果你正在企业里做数据平台,或者要给智能体项目找一个不会把口径搞乱的数据基座,这篇应该能给你省不少试错时间。
1. 智能体为什么需要“业务运作学习”,Fabric 恰好干了这件事
1.1 只靠 Prompt 调优的智能体,根本学不会业务
过去一年我观察到的智能体项目,凡是做到一半卡住的,问题几乎都不在大模型本身,而在“模型对业务的理解太浅”。你可以把提示词写得再花哨,把工具定义得再详细,但模型始终缺少一个东西:一套和企业真实运作完全对齐的数据事实。
举个例子。一个零售客户想让我做“门店经营诊断智能体”,我一开始拿到的问题清单是这样的:门店毛利为什么比上周低了?库存周转突然恶化是哪几个 SKU 导致的?哪些门店退货率异常?这些问题的答案全部藏在底层数据里,分布在订单系统、库存系统、门店主数据里。更麻烦的是,每个系统的字段命名、更新节奏、统计口径都不一样,“订单金额”在 CRM 里和在财务系统里的含义就不同。
反过来想,一个合格的业务分析师是怎么回答这些问题的?他会先打开报表,看一眼指标定义,再下钻到明细,最后结合自己对业务的理解给出分析。分析师之所以能做这件事,是因为他脑中有“业务语义”和“数据模型”。智能体如果只拿到一个数据库连接串,没有一个语义模型,它就像被蒙着眼睛派进一个巨大的仓库,让它找一件它连长相都不知道的东西。
所以,我越来越倾向于把“业务运作学习”这四个字拆成这样:学习 = 数据事实 + 语义口径 + 实时状态 + 反馈修正。缺任何一个环节,智能体都只是接了一个数据源的“高级聊天框”。
1.2 Fabric 把数据湖、语义层、事件流拼成了业务学习底座
微软 Fabric 的定位,恰好是覆盖了这四个环节。它不是一个单纯的数据仓库或者 BI 工具,而是一个把存储、加工、分析、实时事件、治理收拢在同一套管理体系里的 SaaS 平台。
我给它总结了三层能力,对应智能体学习的三个需求:
- 统一的事实存储层:OneLake 把结构化表格、半结构化日志、非结构化文档放进同一个湖里,形成智能体的“记忆体”;
- 可计算的语义层:指标口径、维度层级、业务关系在语义模型里定义清楚,智能体查询时拿到的是“有效销售额”这样有业务含义的结果,而不是让模型自己拼字段;
- 实时事件通道:通过实时智能模块接入订单、库存、设备事件,让智能体能感知“当下正在发生什么”,而不只是事后翻旧账。
在这个结构里,智能体不再是一个直接连库的“裸查询器”,而是一个站在业务语义之上的推理者。你问它“为什么华东区周转天数上升了”,它不是先去猜哪张表里有什么字段,而是先定位到“库存周转天数”这个指标的定义,再按模型下钻到区域、品类,最后结合实时补货事件给出解释。
我实际做完一个项目之后的体会是:Fabric 并不能让模型一夜之间变聪明,但它给了模型一个不扭曲业务真相的“参考系”。智能体给出的结论一旦有异议,你可以回溯到它查询的指标、数据源、时间范围,整个判断过程是可验证的。这一点,对于要上生产环境的智能体来说,价值甚至比准确率还重要。
2. 我实际用到的 Fabric 核心组件与选择逻辑
2.1 OneLake 湖仓一体:让散落的业务数据先住进同一个仓库
智能体学业务的第一步,是先解决“数据在哪”的问题。我在项目里最常见的数据环境是:销售在 SQL Server,库存在一个老旧的 ERP 系统,客户主数据又在另一套 CRM,偶尔还有手工维护的 Excel 表。
过去我们做数仓,第一步就是写一堆 ETL 把数据“抽”到统一存储。Fabric 里的 OneLake 给了我一个更省事的答案:它依托云对象存储,但对外暴露的是一个逻辑数据湖。这意味着你既可以物理搬数据进来,也可以用快捷方式指向外部存储,让数据看起来都住在同一个湖里,实际上没有产生冗余拷贝。
我自己最常用的做法有这么几个:
- 用 Data Factory 管道,把 SQL Server 的业务表按增量策略复制为 Delta 表;
- CSV 和 Excel 这种小数据源,直接扔到 Notebook 里清洗后写回湖里;
- 对于已经存在其他数据湖的历史数据,用快捷方式直接挂载,避免重复迁移;
- 在 Data Hub 里做好表登记和描述,让智能体工具能“看到”有哪些表可用。
有一个实际体验值得单独拎出来说:OneLake 里的每张表都会自动暴露一个 SQL 分析端点,这意味着智能体可以用标准 SQL 直接查询湖里的数据,不需要你再去封装一套 HTTP API。我项目里给智能体配查询工具时,几乎没写后端接口,客户端就是对着分析端点跑 SQL。这让整个链路清爽了一个量级。
2.2 语义模型与指标库:把“口径”变成智能体能直接复用的资产
数据进了湖,下一道坎是口径。这一步是智能体能不能“说人话”的分水岭。
什么叫口径问题?我举一个具体例子。业务那边说“门店毛利”,听起来简单。但实际算起来,要不要扣掉后台分摊成本?租金和人工是算在总部还是算在门店?退款订单的毛利是红冲还是忽略?促销赠品的成本算不算进去?如果这些口径不统一,你问智能体“华东和华南哪个毛利高”,它可能因为双方的算法不同,给出一份完全错误的对比。
Fabric 里的语义模型,本质上就是把这类口径问题固化下来,变成可复用、可审计的指标资产。我通常在模型里做这样几件事:
- 用计算列和度量值,把有效销售额、毛利、库存周转天数等核心指标定义好;
- 建好维度层级,比如大区→城市→门店→柜台,让智能体可以逐层下钻;
- 把指标描述写清楚,在语义模型的描述字段里说明“适用于什么场景、排除哪些数据”,相当于给智能体一本指标说明书。
这里有个细节我特别想提醒:语义模型的描述文本质量,直接决定智能体能否正确选指标。模型会读这些描述来判断“当前问题该用哪个指标”。如果你只在度量值里写一行公式,没有任何业务说明,智能体很可能把“现金流量”和“营业收入”混着用。我在项目上花了大量时间打磨描述文本,收益比继续调 Prompt 大得多。
2.3 实时智能与事件通道:让智能体感知“正在发生的业务”
大部分企业的分析场景是 T+1 的,昨天的数据今天看,这没有错。但智能体要做的很多事,并不适合等一天。比如库存预警、门店客流异常、订单积压告警,这些都是分钟级的问题,等到第二天再发现,损失已经造成了。
Fabric 的实时智能模块,本质是一个托管式的 Kusto 分析环境。我可以把订单事件流、库存变动流、门店打卡流接进去,再让智能体通过 KQL 查询实时表。我自己实验时,接了两路模拟事件流,一路是订单创建,一路是退换货,然后给智能体加了一个工具:“查询最近 15 分钟退货率超过 10% 的门店”。效果很直观:智能体给出的答案不再是延迟半天的旧数据,而是刚刚发生的事实。
但我要坦白一句:实时事件流是要花钱的,吞吐量越大成本越高。所以我的建议不是“所有数据都上实时”,而是按需分层。普通经营分析继续走 T+1,运营监控走准实时,只有真正需要秒级响应的风控、告警才上事件流。智能体在工具描述里标明数据延迟,让模型自己判断该查哪一层,这是我在项目里用起来最顺的折衷方案。
2.4 Copilot 与开发链:降门槛可以,别指望全自动
Fabric 平台内置的 Copilot,在 Notebook 和 SQL 编辑场景里确实能帮忙。比如我写管道清洗逻辑时,让它先生成一段 Dataflow 表达式,或者在一个长 SQL 里让它补全一段 Window 函数的写法,这些场景它发挥得不错,能省掉不少查文档的时间。
不过,我基本不指望 Copilot 直接帮我把整个智能体链路搭好。原因很简单:智能体项目最大的复杂度不在“写代码”,而在“理解业务”。业务口径、权限边界、事件路由这些问题,Copilot 看不到也猜不出来,它们需要的是人去梳理和定义。所以我的定位是:Copilot 当副驾驶用,主干工程还是自己来。把助手当主力,容易在项目收尾时发现一堆隐性问题。
3. 搭建“业务学习智能体”的完整实操链路(零售门店诊断场景)
3.1 选场景:先找一个边界清晰、容易见效的业务问题
智能体学业务,我不建议一上来就做一个“全知全能”的超级智能体。边界越宽,不可控因素越多,最后往往连及格都很难。我做第一个验证项目时,刻意选了一个边界很窄的场景:零售连锁门店的经营异常诊断。
选择它有三个原因。第一,数据边界清楚,门店销售、库存、客流事件,都是相对标准的数据,不需要跨十几个系统。第二,判断规则可以明确定义,比如毛利波动、库存周转、退货率这些指标都能预先设置阈值。第三,动作可审计,智能体输出的结论只是“建议”,最终由门店运营人员确认,不会造成不可逆的后果。
如果你也想复制这条路,我建议用这四个标准筛选场景:数据可得且稳定、业务规则可以描述、判断结果可以验证、失败不会造成大损失。满足这四个条件,就能作为第一个智能体项目落地。
3.2 数据管道落地:从 SQL Server 和 CSV 汇入 OneLake
我的数据源主力是一套 SQL Server 业务库,外带几张手工维护的 CSV。整个汇数过程分四步:
- 在 Fabric 里建好工作区,按业务域拆出销售域、库存域、门店域三个子域;
- 用 Data Factory 管道把 SQL Server 的订单表、退货表、产品表、门店表复制到 OneLake,格式选 Delta,并设置增量刷新;
- 手工 CSV 在 Notebook 里读取,做字段标准化、去重后写出到湖里,并在 Data Hub 登记;
- 历史数据本来有一部分在外部数据湖里,我直接建快捷方式挂载,没有重复搬迁。
这个环节最常见的坑有三个,我逐个说。
第一个坑是时间字段时区混乱。门店分布在多个时区时,如果统一用本地时间存,做跨区域汇总就会乱。我的处理方式是清洗层统一存 UTC,展示时再按门店时区转换。智能体查询时,时间筛选条件一律用 UTC,安全性会高很多。
第二个坑是增量同步的机制。订单表一旦量大,每天全量复制既慢又费钱。我后来在源表加了水印字段,管道按“大于上次最大水印值”增量拉取,才算把这个坑填平。
第三个坑是脏数据拦截。比如订单金额为负数、日期早于门店开业日期这类问题,如果不在一开始拦截,后面会污染所有指标。我在管道出湖前加了数据质量断言,不符合规则的行直接进异常表,方便后续处理。
3.3 定义语义模型:让智能体知道毛利到底怎么算
数据进湖之后,我花了一天时间建语义模型,这是整个项目里性价比最高的一天。
我建了一张“门店经营指标”语义模型,核心指标大概是这样的:
| 指标 | 计算口径 | 使用说明 |
|---|---|---|
| 有效销售额 | 订单金额 - 退款金额 - 赠品金额 | 所有销售额分析的基础,排除测试订单 |
| 门店毛利 | 有效销售额 - 已售商品成本 - 门店分摊租金及人工 | 仅用于含分摊成本的经营分析 |
| 库存周转天数 | 平均库存 / 日销售成本 | 按 30 天滚动窗口计算 |
| 门店退货率 | 退货订单数 / 有效订单数 | 退货率分析统一用此口径 |
这个表的价值不在于公式本身,而在于它成了智能体和业务之间唯一的“契约”。业务人员说“毛利下降”,智能体第一时间就通过语义模型知道:这个毛利是扣了分摊成本的,不是一个简单的账面数字。这样双方讨论的才是同一件事。
在语义模型描述里,我还标注了指标适用的边界条件,比如“新店开业前三个月不参与同比分析”。这个细节在后来的反馈环节起了很大作用,它是“学习”的起点。
3.4 接智能体:工具调用 + SQL 端点 + 结果解读
有了数据,有了语义,接下来就是把智能体接上。我采用的是目前最主流的 LLM + 工具调用方案,整体结构是这样的:
- 给智能体配一个工具,函数名
query_sql_endpoint,参数是标准 SQL 查询语句; - System Prompt 里写清楚业务摘要、指标定义、常用维度层级;
- 用户提问进来后,模型自己判断:该查哪些指标、生成什么 SQL、调用工具、拿到结果、再结合规则输出结论。
我给智能体的提示词里有一段类似下面这样的定义(简化后):
你是门店经营诊断助手。可查询指标包括: - effective_sales:有效销售额(订单金额-退款-赠品,排除测试订单) - store_gross_margin:门店毛利(扣除货品成本、门店分摊租金及人工) - inventory_turnover_days:库存周转天数(平均库存/日销售成本,30天滚动) - return_rate:门店退货率(退货订单数/有效订单数) 规则:新店开业前3个月不参与同比分析;所有结论必须标注数据来源时间窗口;如果查询结果为空,回答“暂无足够数据”。这个设计有个关键点,我想强调三遍:查询要拆碎,不要写大而全的 SQL。我一开始也试过让模型一次把“各地区销售、毛利、周转率”全查出来,结果它经常写出一大段 JOIN,不是性能差就是结果错。后来改成一次只查一张明细或一个指标,模型分析错误率明显下降,速度也快很多。
工具层我做了两个保护:一是查询限定到指定 schema 视图,不允许它扫整表;二是单次查询最多返回 200 行,避免结果集过大。这两个限制看起来简单,但能挡掉大多数性能事故。
3.5 反馈闭环:把人的纠正“喂”回语义层
这节我想聊“学习”这个词,因为这是最容易被忽视的一步。
智能体上线两星期后,我发现它对“新店”这个场景还是会误判。新店没有历史销量,但模型不知道这一点,经常会拿新店和成熟店做同比,得出“异常下滑”的结论。这其实不是模型笨,而是我漏掉了重要的业务知识。
后来我在语义模型里加上“是否新店”标记,并在提示词里写明“新店前 3 个月不参与同比分析”,问题就明显缓解了。这件事让我意识到,智能体的“业务学习”不是模型自己长出来的,而是要有一个反馈机制,把人的纠正持续灌回语义层和规则层。
我的做法是在业务端加了一个简单入口,运营人员可以对智能体回答点“有用”“没用”“口径不对”。这些动作记录会写回 OneLake,每周做一次复盘,把高频错误转化为语义模型或规则调整。跑了一个多月之后,智能体在常见问题上的表现肉眼可见地变好。没有反馈闭环的智能体,本质上只是一个查询工具;有了它,才谈得上“学习业务运作”。
4. 智能体学业务时最容易踩的四个坑
4.1 权限边界:智能体只准看它该看的
很多团队在给智能体配数据权限时,图省事直接给一个高权限账号。这在我这里是要坚决拦住的做法。智能体的查询路径是可被攻击的,你给了它全局读取权限,就等于让任何能调用它的人都越权读数据。
Fabric 这块我推荐的做法是三步走。第一,调用的数据连接统一走固定身份,启用行级安全性;第二,语义模型按组织架构配置 RLS 规则,数据行自动带区域标签;第三,在智能体工具层做二次过滤,只暴露预先定义好的视图,让模型没有机会去查模型之外的内容。
另外一个容易被忽略的地方是审计。智能体的每一次查询、每一个建议最好都落日志。我在 Fabric 里开了操作审计,把智能体的查询 SQL、返回结果、时间点都记录下来。做到这一步,权限和追溯才算闭环。
4.2 新鲜度分层:实时数据不是免费的
实时很好,但每个实时事件流都有成本,而且不是所有问题都需要秒级响应。我帮业务把数据分成三层:T+1 的离线层用于月度趋势和战略分析,5 到 15 分钟的准实时层用于运营监控和异常预警,秒级实时层用于订单风控和设备告警。这个分层的核心是让智能体在回答问题时,能根据问题性质选择正确的数据源。
具体到落地,我会在工具描述里写明“本工具数据延迟约 X 分钟”,让模型自己判断。比如“本月华东区销售趋势”就没必要查实时流,离线层足够;而“现在哪些门店排队异常”必须走实时层。模型读工具描述做选择,比人在代码里写死路由要灵活,也更不容易出错。
4.3 幻觉治理:让结论带着来源说话
LLM 的幻觉问题在智能体里会被放大,因为模型会用非常自信的口吻给你一个不存在的数字。我在项目里实测最有效的四条办法如下:
- 强制结论标注来源:智能体每次回答都必须写“数据来源:XX分析端点,时间窗口:XX”,没有来源的结论视为无效;
- 空结果回退:查询结果为空或行数过少时,明确让模型回答“暂无足够数据”,禁止它脑补;
- 规则优先:明确的业务规则放到提示词或校验函数里,模型只做判定,不做规则发明;
- 人工复核标记:当某指标波动超过预设阈值,系统自动给结论打上“需人工复核”标签。
第四点是我最想分享的。它的思路是:既然模型的不确定性没法完全消除,那就把不确定性显式地变成产品的一部分。当智能体说“华东区毛利率异常下降,需人工复核”的时候,业务人员知道这个时候要谨慎,而不是无条件信任。这个设计比反复调试提示词有用得多。
4.4 别把智能体当决策者:先让它做有脑子的分析师
最后一个坑,也是最常见的坑:项目做一半,就想着让智能体自动做决策,自动下采购单、自动改价。我的态度很明确,有脑子的分析师是当前最务实、最安全的阶段。
智能体真正自主决策,需要极其严苛的校验、回退和审计机制,而大多数企业的数据质量和系统连接根本撑不起这个目标。与其在一开始就追求“无人化”,不如先实现“人机协同”:智能体负责发现问题、给出建议、生成方案,人负责确认和拍板。这个阶段的价值一点不少,而且风险小、容错高。等你积累一段时间的数据反馈和信任,再逐步扩大智能体的自主范围,这条路才走得通。
5. 实测感受、局限和后续可以扩展的方向
5.1 一周跑完链路后的真实体感
从数据导入到智能体上线,我差不多花了一周。给我最大工作量的不是智能体框架,而是数据整理和口径定义,这个结论我说过好几次,但每次项目都会再验证一次。
跑完整个链路,我最满意的部分是“语义模型 + SQL 端点”的组合。它让智能体回答问题时,基于的是企业真实指标,而不是模型的内部记忆。相比我之前做的纯文档 RAG,这种结构化语义检索的方式,在数字、比例、时间窗口这些容易出错的点上,准确率要好不少。
当然,它也远没到完美。比如有几个情况它依然处理得不够好:一个模糊的问题里同时涉及多个指标和多个维度的复杂下钻,模型生成 SQL 的成功率会下降;首次出现的新业务场景,它依然会因为缺少知识而给出比较泛的结论。这些都需要靠持续的反馈积累来改善,急不来。
5.2 从“读数据”到“做动作”的延伸思路
如果后续想进一步,有几个方向我觉得值得关注。
一是 Fabric 工作流和自动化的联动。如果智能体判断某门店需要补货,它可以触发一个 Data Factory 管道,把补货明细清单生成好,再由业务人员在系统里确认。这相当于给智能体接上了执行的手脚,但每一步依旧可以审计。
二是多智能体协同。等数据域足够规范,可以拆出销售智能体、库存智能体、客服智能体各管一摊,再由一个主智能体做汇总决策。这个方向很诱人,但它对 Fabric 各域之间的血缘关系和指标一致性要求极高,一旦两个域对同一指标口径不一致,智能体之间的对话就会变成鸡同鸭讲。
三是和 Copilot 的融合。平台本身也在持续强化自然语言能力,比较理想化的前景是业务人员直接说“把华东退货异常门店列出来”,平台自动完成取数、摘要、推送建议的全流程。这个体验如果能做好,智能体学习业务运作的成本会被进一步压到极低。
5.3 关于这类项目,我最后想说的建议
如果让我给一个还没开始做智能体数据平台的人一句话,我会说:把“审计”放在“智能”前面。智能体每做一次查询、每给一个建议,都要留下完整日志。将来你纠错、复盘、优化提示词,靠的全是这些日志。我见过太多团队兴致勃勃做智能体,结果数据链路混乱、口径没有收敛、日志丢失,最后整个项目变成一个黑盒——谁都不知道智能体为什么这么回答,那才是真正的灾难。
微软 Fabric 在这里承担的,不只是数据存储或者报表平台的角色。它更像是一张可以持续生长的“业务事实网络”,而智能体只是在这张网上爬行、推理、学习的乘客。把网织好,比换一个更聪明的乘客更重要。