项目启动的时候,团队内部争论最多的问题不是技术选型,而是“我们到底需不需要 Agentic AI”。当时很多人觉得,D365 里已经有 Power Automate 了,流程都能自动跑,再引入智能体是不是有点重复建设。但真正把业务场景摊开看,结论就变了——传统自动化擅长处理“规则明确”的流程,而业务侧的实际情况是大量请求进到系统里后,第一步的“理解、判断、分工”根本没人做,也没法用固定规则写死。Agentic AI 在 D365 里的落地,本质上是把“人读消息、人做判断、人去操作”这一段补上,让系统从“按规则执行”进化到“按意图行动”。
这篇内容我会完整拆解这个项目的落地过程:为什么选择 Agentic AI 而不是纯提示词调用,技术架构里每个组件负责什么,从提示词到自动执行到底要过哪几道坎,以及真实场景里踩过的坑和排查方法。适合正在评估 D365 智能化的顾问、负责业务流程优化的业务分析师,以及准备在微软生态里做智能体落地的开发者参考。
1. 项目背景与整体设计思路
1.1 业务痛点:为什么传统自动化不够用
先说说项目启动时的业务背景。客户是某制造业企业,用的是 D365 的客户服务模块和销售模块,日常有大量来自邮件、表单、内部系统的请求需要录入到系统里并分派处理。举个例子,售后邮箱每天能收到上百封客户邮件,有的是报修、有的是查订单、有的是投诉、有的只是询问营业时间。以前的做法是靠一个运营专员人工阅读、分类、录入、分派,一天下来光是机械操作就要占掉大半天。
早先团队尝试过用 Power Automate 做自动化,邮件触发器接到新邮件后,用关键词规则判断主题和正文,匹配到对应队列就创建工单。这套方案在规则有效的范围内确实能跑,但问题也明显:客户写邮件不会按你设定的关键词来,一句话里有多个意图,同一个词在不同语境下含义不同。规则的覆盖率撑死到 60% 左右,剩下的邮件还是得靠人。更麻烦的是,规则越多维护成本越高,每次业务调整都要改一遍判断逻辑。
当时我们评估过直接用大模型 API 做提示词调用,让模型输出邮件的分类结果和结构化字段,然后交给 Power Automate 去创建记录。这个方案能解决“理解”的问题,但新的问题又来了:模型只负责“输出建议”,没有任何机制去验证建议是否合理、也没有能力去处理字段缺失或歧义。比如模型判断这是一封投诉邮件,但客户没留订单号,这时候谁来追问客户?模型不会,流程只能报错。
1.2 Agentic AI 的定位:把“理解、决策、执行、反馈”串成闭环
所以这个项目的核心思路,不是用 AI 替换掉某一段流程,而是用 Agentic AI 把整条链路串起来。所谓 Agentic AI,通俗讲就是一个具备“目标拆解、工具调用、自主决策”能力的智能体,它不再只是“回答你的问题”,而是能“根据你的目标,自己规划步骤、调用系统功能、完成操作,并且根据操作结果调整下一步动作”。
放到 D365 场景里,这个智能体需要做四件事:第一,理解用户输入的意图,不管是邮件、表单还是聊天消息;第二,调用 D365 的 API 或 Power Automate 流去执行具体操作,比如创建工单、更新客户信息、分配负责人;第三,根据执行结果判断是否需要补充信息或升级人工处理;第四,整个过程有日志、有监控,关键节点必须经过确认。
这四个能力对应到微软生态里,分别由不同组件承担:理解部分靠 Azure OpenAI 的模型能力,工具调用部分靠 Copilot Studio 的智能体技能和 Power Automate 的连接器,决策和状态管理靠智能体的编排逻辑,监控和治理靠 D365 的审核日志和自定义反馈机制。整个链路里没有一个组件是多余的,后面会逐个拆。
1.3 方案选型:为什么选 Copilot Studio 而不是纯代码开发
项目组内部其实有过另一条路线:完全自己写代码,用 Azure OpenAI 的 Function Calling 能力配合 D365 的 Web API 做一套自定义智能体。这套方案的好处是灵活,想怎么编排就怎么编排,但坏处也很明显——开发成本高、维护成本更高,而且很难和 D365 原有的安全模型、业务流程、审核机制天然集成。
最后选 Copilot Studio 作为智能体编排层,是基于三个判断。第一,Copilot Studio 里创建的智能体可以直接发布到 D365 的嵌入体验中,用户不需要离开业务系统就能发起请求,这符合实际使用习惯。第二,Copilot Studio 的“技能(Skills)”机制可以原生绑定 Power Automate 流,意味着我们不用自己去对接 D365 API 的认证和权限,微软的连接器已经把这块封装好了。第三,智能体可以复用 D365 里的 Microsoft Dataverse 数据权限,用户能操作什么数据、不能操作什么数据,由 D365 原有的角色权限控制,不需要额外做一套授权逻辑。
这个选型决定直接影响了后面的整体架构。整个系统的设计思路是“智能体做大脑,Power Automate 做手脚,D365 做账本”,每一层只负责自己该做的事,减少耦合,方便后面的扩展和维护。
2. 核心架构与工具选型解析
2.1 整体架构分层:从用户输入到系统落库
整个架构可以分成四层。最上层是入口层,也就是用户发起请求的渠道,包括 D365 的客户服务空间嵌入聊天、Teams 里的消息、以及邮件触发。入口层不直接对接模型,而是把请求统一格式化成文本传到智能体。
第二层是智能体层,核心是 Copilot Studio 里创建的自主智能体(Custom Agent),负责语义理解、意图识别、任务规划。这一层相当于传统流程里的“大脑”,它不直接操作数据,而是决定要调用哪些技能、需要哪些参数、如果信息不够要怎么向用户追问。
第三层是执行层,由 Power Automate 流和自定义连接器组成。智能体把任务拆解成一个个具体的动作后,通过技能调用触发对应的流。流负责对接 D365 的 API,完成记录的创建、更新、分配等操作,并把结果结构化返回给智能体。
最底层是数据层,也就是 D365 里的 Dataverse,所有业务数据、附件、审核日志都存在这里。智能体本身不存业务数据,它只通过技能去读写 Dataverse,所以天然继承了 D365 的安全权限和数据治理能力。
这样的分层设计有一个明显的好处:每一层都可以独立升级。模型换了、入口渠道加了、业务流程改了,都不会牵动整条链路重做。
2.2 核心组件逐一拆解
先说说 Copilot Studio 在这个项目里扮演的角色。Copilot Studio 里可以创建两种智能体,一种是“辅助型助手”,偏向对话问答;另一种是“自主智能体”,可以配置触发条件、技能和知识源,在无人盯着的情况下主动完成任务。这个项目用的是后者。自主智能体的底子是一套指令(Instructions),里面定义了它的角色定位、工作流程、决策边界和输出规范,相当于给智能体写的一份“岗位说明书”。
然后是技能(Skills)。技能是智能体执行动作的通道,既可以绑定 Power Automate 流,也可以配置自定义连接器直接调 API。在这个项目里,我们建了五个技能:创建工单、更新工单状态、查询客户信息、查询订单信息、分派负责人。每个技能都定义好了输入参数和输出结构,比如“创建工单”需要客户邮箱、主题、描述、优先级,输出则是工单编号和状态。
接下来是 Azure OpenAI 的部分。虽然 Copilot Studio 底层已经接了 GPT 模型,但我们还是单独配置了 Azure OpenAI 的资源,主要用来做两件事:一是自定义系统提示词,把 D365 的业务术语和操作规范写进去,提高意图识别的准确率;二是用结构化输出(Structured Output)把模型的判断结果固定成 JSON 格式,方便后面的流去解析。
最后是 Power Automate 执行层。这里不仅仅是简单的“触发器 + 动作”,而是每个技能对应一个独立的云端流,流内部做了参数校验、错误捕获和结果格式化。设计上有一条红线:流程只做确定性操作,比如查数据、建记录、发通知,所有需要判断的地方全部上抛给智能体,不在流里写复杂的条件分支。
2.3 关键选型的对比与理由
列表里对比三条技术路线最直观:
| 方案 | 理解能力 | 与D365集成 | 开发成本 | 决策灵活性 | 适用场景 |
|---|---|---|---|---|---|
| 纯提示词调用(模型只做分析) | 强 | 弱,需自行对接API | 低 | 无,只输出建议 | 辅助人工决策,不追求自动化 |
| 传统Power Automate自动化 | 弱,依赖关键词/规则 | 强,原生连接器 | 中 | 无,固定分支 | 规则明确的重复性流程 |
| Agentic AI + Copilot Studio | 强,可理解复杂意图 | 强,原生集成 | 中高 | 强,可自主规划 | 动态性强的业务请求处理 |
这个项目最终选的显然是第三条路线,但不是全盘替换第二条。实际落地时,能靠规则解决的简单场景(比如特定表单提交自动建客户)仍然走 Power Automate 原生流程,只有需要“理解+判断+多步骤操作”的场景才交由智能体处理。这也是一条经验:不要为了智能化而智能化,Agentic AI 解决的是复杂动态问题,规则能搞定的事情用规则,性价比最高。
3. 从提示词到自动执行的完整实现路径
3.1 第一步:把业务需求翻译成提示词架构
很多人以为提示词就是写一段话告诉 AI 该干嘛,实际上在 Agentic AI 项目里,提示词是一个结构化的配置文件,决定智能体的行为边界。这个项目里,智能体指令分成四个模块:角色定义、任务流程、决策规则、输出规范。
角色定义部分写明“你是 D365 客户服务团队的智能助理,负责处理客户邮件和聊天消息,你在 Dynamics 365 环境中工作,可以调用工单管理相关的工具”。任务流程部分写明收到请求后的步骤:先理解意图,再识别必要字段,缺少必要字段则追问,信息齐全后调用对应技能,根据技能返回结果决定是否结束或升级。决策规则部分写明什么情况可以自动执行(比如客户留了完整订单号、诉求清晰)、什么情况必须转人工(比如客户情绪激烈、涉及赔偿金额、收到的请求超出智能体的权限范围)。输出规范部分则要求智能体在每次操作后简明总结做了什么、结果如何、是否需要人工介入。
这份指令不是一次性写好的,前后改了七八版。最大的一个教训是:不要试图在提示词里穷举所有业务场景,而是把决策原则写清楚,让模型根据原则去推理。比如一开始我们写了“如果客户提到发票问题,走 A 流程;如果提到退换货,走 B 流程”,结果模型在意图交叉时经常判断错。后来改成“根据客户诉求判断属于售后、销售还是咨询类别,对应调用技能”,准确率反而上去了。
3.2 第二步:设计确定性的技能边界
技能设计是整个项目里最需要花心思的部分。技能是智能体与系统之间的接口,接口规不规范,直接决定后面流程能不能稳定跑起来。我们给“创建工单”这个技能定义了一份输入参数规范,核心字段包括:
- CustomerEmail(客户邮箱,必填,格式校验)
- Subject(工单主题,必填,50字以内)
- Description(详细描述,非必填)
- Priority(优先级,枚举:Low/Normal/High/Urgent)
- OrderNumber(关联订单号,非必填,但提供后需校验存在性)
- RequestType(请求类型,枚举:Inquiry/Warranty/Complaint/Return/Other)
参数设计上有两个容易被忽视的细节。第一,所有字段都必须定义枚举值或格式校验规则,不要让模型自由发挥,否则会出现优先级填了“非常紧急”、类型填了“退换货问题”这类无法映射的数据。第二,必填字段越少越好。智能体的一个核心价值就是能在信息不全时主动追问,所以技能接口只保留真正的必填项,其他全部做成可选,这样才能给模型留出判断空间。
技能返回值的结构同样重要。我们统一采用了一个 Result 结构,包含 Status(Success/Partial/Failed)、Data(操作结果对象或错误信息)、Message(给用户看的自然语言摘要)。这个结构的好处是智能体不需要去解析复杂的业务对象,只需根据 Status 判断下一步:Success 就总结收尾,Partial 就追问缺失部分,Failed 就切换到错误处理逻辑。
3.3 第三步:搭建“规划-执行-验证”循环
有了提示词和技能,接下来要解决的是怎么让智能体真正“动起来”。Copilot Studio 的自主智能体默认支持多轮规划循环:接收用户目标后,智能体会把目标拆解成步骤清单,逐步执行技能,并根据每次技能返回的结果重新规划下一步。
我们在这个基础上多做了一层“验证”环节。智能体在调用“创建工单”技能后,不能直接告诉用户“已完成”,必须调用“查询工单信息”技能去确认工单真的创建成功了。这个设计来源于一次真实事故——有段时间技能返回 Success,但工单实际没落库,原因是流里有一处字段映射错了,导致 D365 API 调用失败但流本身没抛异常。从那以后我们就立了一条规矩:所有写操作完成后必须做一次读操作验证,这也成了后面项目的一大亮点,实际运行中多次拦截了偶发性的集成故障。
为了让这个循环稳定运行,我们还在提示词里明确了“每个技能调用前必须先列出参数,参数确认后再调用”的约束,避免模型跳过必要步骤直接执行。这一步对调试帮助很大,因为每一步都有迹可循。
3.4 第四步:最关键的安全闸门
自动化程度越高,风险控制就越重要。这个项目里设了三道安全闸门。
第一道是权限边界。智能体本身不做任何数据权限校验,它调用的 Power Automate 连接器使用的是服务账号权限,但 Dataverse 层面的行级安全和列级安全依然生效,而且在流里显式限制了只能访问特定队列和特定字段。
第二道是“人工回环”。我们把操作分成了三类:自动执行类(查客户、查订单、创建草稿工单)、需确认类(正式创建工单、分派负责人)、强制人工类(修改客户等级、处理退款、删除记录)。需确认类操作执行前,智能体必须向用户输出操作摘要,拿到确认后才继续。这条规则很朴素,但实际效果极好,业务部门的信任感就是这么建立起来的。
第三道是审计追踪。每一条智能体的操作记录都会写入 Dataverse 的自定义表,包含触发消息、识别意图、调用的技能、传入的参数、返回结果、耗时、采用的模型版本。出了问题可以精确回溯到是哪一次调用、哪一个环节出的错,不用靠猜。
4. 实际场景落地举例全流程盘点
4.1 场景一:售后工单自动创建与分派
这个场景是项目里最早落地的,也是最有代表性的一条链路。客户发邮件到售后邮箱,邮件触发 Power Automate 把邮件内容导入 Dataverse 的自定义队列表,然后触发智能体进入处理循环。
智能体收到邮件文本后,第一步是意图识别,判断这是售后请求还是其他类型。如果是售后请求,就继续提取客户邮箱、订单号、问题描述。订单号往往是客户在邮件里提到的,模型需要从正文中抽取,并调用“查询订单”技能校验订单是否存在。如果订单号和客户邮箱对不上,智能体会先查客户信息,再决定是否为该客户创建新工单还是补充到已有工单。
接下来进入确认环节。智能体把识别到的信息整理成摘要卡片,发给运营人员确认。运营人员在 D365 的嵌入面板里点一下确认,智能体再调用“创建工单”技能正式落库,并自动按产品线和客户等级分派到对应队列,同时给客户发一封自动回复邮件。整个过程中运营人员只做一次点击确认,剩下的理解、抽取、校验、落库、分派全部自动完成。
上线后这个场景把每封邮件的平均处理时间从 12 分钟降到了不到 2 分钟,而且因为多了模型理解这一步,之前完全处理不了的复杂邮件(比如客户把保修和退货写在同一封邮件里)也能被拆分成两个独立任务处理。
4.2 场景二:潜在客户信息智能补全
这个场景属于销售模块。D365 的潜在客户表单里,经常出现只填了公司名、负责人名,但邮箱、电话、行业规模这些关键字段全部留空的情况。传统做法是靠销售代表手动去查或者靠规则从邮件签名里抓,效率低而且经常抓错。
智能体落地后,每次潜在客户记录创建时,如果发现关键字段缺失,就触发智能体去补全。智能体先去查邮件历史记录(从 Exchange 集成拿),如果历史邮件里能提取到签名信息,就用签名填充;提取不到的话,就去查该公司的已有业务往来记录;还不行的话,就生成一个带固定问题的补全请求发送给信息提供人,等对方回复后再回填。
值得注意的是,这个场景涉及数据更新,所以我们把它设成了“需确认类”。虽然补全的信息来自系统内部记录,正确率很高,但一旦更新错字段会影响后续评分,所以每次回填前都会给对应的销售代表发一条预览消息。实际跑下来,字段完整率从 43% 提到了 86%,而且因为记录质量上去了,后续的线索评分准确度也跟着提升。
4.3 场景三:跨系统状态联动
这个场景稍微复杂一点,涉及 D365 之外的一个旧系统。客户的旧 CRM 里有一些历史工单状态,之前需要每天手动同步一次到 D365,不仅延迟高,还容易漏。项目后期我们做了一个自定义连接器,封装了旧 CRM 的读取和更新接口,然后用智能体来驱动同步逻辑。
智能体每天定时触发,先读取旧 CRM 中状态有变更的工单列表,逐条调用“查询工单”技能确认 D365 这边对应工单是否存在。存在的话就直接更新状态,不存在就把工单的完整信息返回给智能体,由智能体判断是否需要创建新工单。跑了两周后发现,这个智能体还能主动发现数据不一致的情况,比如旧系统显示工单已关闭,但 D365 这边还有未完成的子任务,它会把这些工单标记为“待人工检查”,并通知对应负责人。
这个案例带来的一个启发是:Agentic AI 的价值在跨系统场景里体现得更明显。因为智能体天然具备“发现矛盾 -> 做出判断 -> 采取行动 -> 报告结果”的能力,这在传统 ETL 工具里很难实现。
4.4 场景落地中的数据指标对比
上线三个多月后,我们拉了一组对比数据。这里选取的是最核心的四个指标,都是一手实测数据:
| 指标 | 传统人工处理 | 纯规则自动化 | Agentic AI方案 |
|---|---|---|---|
| 工单平均创建耗时 | 12分钟 | 8分钟 | 2分钟 |
| 意图识别准确率 | - | 62% | 91% |
| 工单字段完整率 | 73% | 68% | 95% |
| 需人工介入比例 | 100% | 38% | 21% |
需要说明的是,21% 的人工介入比例不是模型能力不够,而是项目设计上刻意留出的安全阀。所有涉及金额、投诉升级、客户资料修改的请求都会强制转人工。如果只看纯售后类工单,自动完成的比例能到 90% 以上。数据最能说明问题的一点是:智能体不是取代了运营人员,而是把运营人员从机械录入中解放出来,让他们只处理真正需要人的判断的 21% 的请求。
5. 常见问题与排查技巧实录
5.1 问题一:提示词里的业务规则不生效
项目初期遇到过很诡异的现象:指令里明明写了“当客户情绪激烈时直接转人工”,但实际测试时故意输入一段情绪激烈的邮件,智能体还是照常创建了工单。排查后发现,问题出在条件判断的表述上——原话是“客户情绪激烈”,模型对这个抽象描述的理解范围和业务人员的想法不一致。
解决办法是把模糊描述改为可被模型识别的具体信号,比如“客户多次使用感叹号”“出现‘投诉’‘愤怒’‘最差’等情绪化词汇”“邮件正文超过一百字但未留订单号”,这样模型在推理时就有明确的参照锚点。这类语义模糊问题在项目里反复出现,现在我们的原则是:提示词里的规则必须是“可验证的状态描述”或“明确的行为指令”,不带主观评价。
5.2 问题二:技能返回值字段对不上
智能体调用的技能返回结构是动态的,按理说不会对不上,但有一次“创建工单”技能明明返回了工单号,智能体却报告说“无法获取工单号,需要人工处理”。后来查了日志才知道,技能的返回值里有工单号,但返回结构里字段名写的是 TicketId,而提示词里让智能体读取的是 WorkOrderId,一个字段的命名差异导致智能体误判。
这类问题的排查思路是:只要智能体反馈异常,第一件事去查 Dataverse 里的技能调用日志,看实际返回的 JSON 结构,再和提示词里的字段引用做对比。为减少这类问题,我们在迭代中做了一个规范:所有技能返回的字段名,一律和 D365 实体字段的 SchemaName 保持一致,不允许出现“业务别名”。这个规范看起来严格,但能省掉大量排查时间。
5.3 问题三:Power Automate 流偶发超时导致任务中断
另一个高频问题是执行层不稳定。智能体调用“创建工单”技能绑定的是 Power Automate 流,有一次因为流里调用的一个自定义连接器响应慢,导致整个流超时,技能返回 Failed,智能体的规划循环直接放弃了这个任务。
排查流程分三步。第一步,在流里加了“超时重试”机制,失败时自动重试一次,重试还是失败就返回明确的错误码。第二步,把所有流的响应超时设置从默认值调大,并给 HTTP 请求动作单独配置分步超时。第三步,在智能体指令里补充了一条规则——“如果技能返回 SystemTimeout 错误,不要放弃,改用‘查询任务状态’技能确认操作是否已部分完成,再决定是否重试”。这个组合拳解决掉了九成以上的超时问题。
5.4 问题四:模型对话历史太长导致决策漂移
智能体处理复杂任务时,对话一旦超过一定轮次,模型很容易“忘掉”初始目标,出现答非所问或重复执行技能的情况。我们曾经遇到过智能体在确认阶段反复调用查询接口,把同一个订单查了四次的案例。
定位后发现是上下文管理的问题。Copilot Studio 的自主智能体会自动维护对话历史,但过多无关的中间步骤会稀释模型对核心目标的注意力。我们的解决办法是把智能体指令里加上“核心目标锁定”机制,要求智能体每次开始新步骤前先用自己的话简述一下“我正在处理的原始请求是什么”,然后再执行操作。这样每轮对话都会重提目标,模型不容易跑偏。同时,我们优化了技能返回内容,把长文本尽可能截成摘要,减少不必要的上下文占位。
5.5 避坑清单汇总
以下是整个项目里最有价值的几条经验,直接汇总成清单:
- 创建技能时,所有参数必须有明确的枚举值或正则校验,别让模型自由发挥
- 提示词里的规则必须写行为、写具体信号,不要写抽象描述
- 所有写操作执行完成后,必须调读接口做验证
- 智能体的操作日志是排障的第一现场,必须从一开始就设计好,不要事后补
- 技能返回的字段名直接对齐 Dataverse 物理字段名,不要引入内部叫法
- 需确认类操作不要省确认环节,哪怕确认率 100% 也要保留,这是信任的底线
- 在智能体指令里强制加入“目标回述”,避免长对话导致行为漂移
这类问题排查下来,大部分其实不是模型能力不够,而是在“智能体与应用系统之间”的连接处出的问题。字段命名、超时策略、上下文管理、日志追踪,这些都是工程问题,跟大模型本身关系不大。这也是 Agentic AI 项目与传统 AI 项目最不一样的地方——它的成败往往取决于工程细节,而不是模型参数。
6. 后续迭代方向与实际使用体会
最后再分享一点我自己的体会。Agentic AI 在 D365 里的落地,真正难的不是技术而是“信任”。这里的信任有两层,一层是业务部门对系统自动执行的信赖,另一层是系统自己在面对不确定性时能不能做出可靠判断。第一层靠确认机制来建立,第二层靠大量的日志和验证来兜底。这两个东西做好,就算模型本身表现平平,整体体验也能远超预期。
项目上线到现在,智能体每个月要处理五千多条请求,自动完成的占比稳定在八成左右。但我们也清楚,这个数字不是越高越好,安全边界内的自动化才有价值。后续的计划是把智能体扩展到库存查询和报价生成场景,同时给智能体增加自我评估机制,让它能根据每次操作的用户反馈来微调自己的执行策略。就目前跑下来的表现看,这套架构的扩展性比预期好,每个新场景的接入成本在逐步降低,这条路是走得通的。