news 2026/5/23 14:17:20

.NET+AI | Agent | 中间件执行次序剖析(12)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
.NET+AI | Agent | 中间件执行次序剖析(12)


MAF 中间件执行顺序:深入理解洋葱模型

一句话简介

MAF 中间件遵循"洋葱模型"执行,请求从外向内,响应从内向外,正确理解执行顺序是构建企业级 Agent 的关键。


🎯 核心价值

  • 洋葱模型:请求依次经过外层→内层,响应按相反顺序返回

  • 三层触发频率:Agent Run 1次、ChatClient N次、Function M次

  • 精确时序:通过时间戳追踪完整执行链路


📝 执行顺序详解

触发次数对比

中间件层

触发时机

单次 Agent 调用触发次数

Agent RunRunAsync()1 次
ChatClient

每次 LLM 调用

2-N 次

(工具调用会增加)

Function

每次工具调用

0-M 次

(取决于工具数量)


💻 时序验证示例

带时间戳的中间件

var startTime = DateTime.UtcNow; double GetTimestamp() => (DateTime.UtcNow - startTime).TotalMilliseconds; // Agent Run 中间件 .Use(async (messages, thread, options, inner, ct) => { Console.WriteLine($"[T+{GetTimestamp():F0}ms] 🛡️ Agent Run Pre"); var response = await inner.RunAsync(messages, thread, options, ct); Console.WriteLine($"[T+{GetTimestamp():F0}ms] 🛡️ Agent Run Post"); return response; }, null)

典型输出

[T+0ms] 🛡️ Agent Run Pre [T+50ms] 📊 ChatClient Pre (第1次) [T+1200ms] 📊 ChatClient Post (第1次) [T+1210ms] 🔧 Function Pre: GetWeather [T+1320ms] 🔧 Function Post: GetWeather [T+1330ms] 📊 ChatClient Pre (第2次) [T+2500ms] 📊 ChatClient Post (第2次) [T+2510ms] 🛡️ Agent Run Post

📊 触发次数统计

场景:调用 2 个工具

Agent Run 中间件: 1 次 ChatClient 中间件: 2 次(初始调用 + 工具结果后调用) Function 中间件: 2 次(每个工具各 1 次)

计数器验证代码

var agentRunCount = 0; var chatClientCount = 0; var functionCount = 0; // 统计后输出 Console.WriteLine($"Agent Run: {agentRunCount} 次"); Console.WriteLine($"ChatClient: {chatClientCount} 次"); Console.WriteLine($"Function: {functionCount} 次");

🏢 企业级最佳实践

中间件注册顺序

注册顺序

执行顺序

推荐中间件

1️⃣ 最先注册

最外层

日志、监控

2️⃣ 中间注册

中间层

安全、限流

3️⃣ 最后注册

最内层

缓存、重试

注册顺序示例

var agent = chatClient.CreateAIAgent(...) .AsBuilder() .Use(LoggingMiddleware) // 最先注册 → 最外层 .Use(SecurityMiddleware) // 中间注册 → 中间层 .Use(CachingMiddleware) // 最后注册 → 最内层 .Build();

执行顺序:

请求 → Logging → Security → Caching → AI模型 响应 ← Logging ← Security ← Caching ←

🎯 总结

  • 洋葱模型:请求从外向内穿透,响应从内向外返回

  • 触发频率:Agent Run 1次,ChatClient/Function 多次

  • 注册顺序:先注册 = 更外层 = 先执行 Pre、后执行 Post

  • 实践建议:日志最外层,缓存最内层


如需获取文章配套完整代码,可扫码咨询领取。👇

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 15:00:50

Linly-Talker表情驱动算法原理解读(LSTM+FACS)

Linly-Talker表情驱动算法原理解读(LSTMFACS) 在虚拟主播、AI教师和数字员工日益普及的今天,用户早已不再满足于一个“会动嘴”的数字人。真正打动人的,是那个能随着语调变化微微皱眉、在讲到兴奋处嘴角上扬、甚至在停顿中流露出思…

作者头像 李华
网站建设 2026/5/23 15:00:48

42、项目管理中的关键分析与资源整合

项目管理中的关键分析与资源整合 在项目管理过程中,我们常常会面临两个关键问题:一是项目是否有足够的时间完成,二是是否有足够的资金来完成项目。接下来,我们将深入探讨如何通过挣值分析来解答这些问题,以及如何创建资源池来管理多个项目的资源。 1. 查看挣值成本指标 …

作者头像 李华
网站建设 2026/5/22 11:29:46

电商直播新利器:用Linly-Talker创建专属虚拟主播

电商直播新利器:用Linly-Talker创建专属虚拟主播 在直播间里,一个“主播”正声情并茂地介绍着新款面膜的成分与适用肤质。她眼神自然、口型精准,语气亲切得像你身边的朋友。可实际上,她从未真实存在过——没有化妆师为她打光&…

作者头像 李华
网站建设 2026/5/23 16:27:59

19、文件服务器管理实用脚本与工具指南

文件服务器管理实用脚本与工具指南 1. 磁盘配额信息检索脚本 1.1 脚本功能概述 该脚本借助 WMI(Windows Management Instrumentation)来获取指定卷的 Win32_DiskQuota 类的所有实例,接着展示(或者写入文件)每个类的选定属性。 1.2 核心代码 Dim cQuotas, oQuota, …

作者头像 李华
网站建设 2026/5/22 7:52:54

20、Windows Server 文件与网络管理工具使用指南

Windows Server 文件与网络管理工具使用指南 在Windows Server环境中,文件和网络管理是系统管理的重要组成部分。合理运用相关工具可以提高管理效率,减少错误发生。本文将详细介绍几个实用的管理工具及其使用方法。 1. Rmtshare.exe:管理共享文件夹权限与删除共享文件夹 …

作者头像 李华
网站建设 2026/5/22 11:29:41

29、网络与安全管理及 IIS 6.0 网站管理脚本详解

网络与安全管理及 IIS 6.0 网站管理脚本详解 1. 安全与网络管理任务脚本 在网络和系统管理中,有许多脚本可以帮助我们自动化完成一些常见的任务,这些脚本在 Windows 系统的登录脚本和网络配置中起着重要作用。 1.1 写入事件日志条目(Write an Event Log Entry) 脚本位置…

作者头像 李华