news 2026/9/21 11:57:09

.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/9/21 0:11:39

46、掌握企业项目管理:从模板构建到资源配置

掌握企业项目管理:从模板构建到资源配置 在企业项目管理中,拥有统一标准来描述项目工作至关重要。企业模板是实现这一目标的有效工具,它能确保项目结构、进度逻辑、任务名称和初始资源分配的一致性,对多项目或投资组合管理意义重大。在基于Project Server的企业项目管理(E…

作者头像 李华
网站建设 2026/9/21 12:03:37

57、掌握项目管理利器:全面解析项目规划与执行技巧

掌握项目管理利器:全面解析项目规划与执行技巧 1. 项目管理基础与入门 项目管理是确保项目顺利进行的关键,它涉及到项目计划的制定、资源的管理、进度的跟踪等多个方面。在开始项目之前,我们需要了解一些基本概念。 项目规划有两种主要方法:自下而上和自上而下规划。自下…

作者头像 李华
网站建设 2026/9/20 21:16:29

31、深入解析IIS管理脚本与数据库操作

深入解析IIS管理脚本与数据库操作 1. FTP和SMTP站点管理 1.1 创建新FTP站点 创建新FTP站点可使用 Iisftpdr.vbs 脚本,其语法为: Iisftpdr /create site/alias_path alias physical_Path该脚本由微软提供,借助Windows Management Instrumentation (WMI) 修改IIS 6.0元…

作者头像 李华
网站建设 2026/9/21 12:50:52

常见快捷键

一、Ctrlc强制停止Ctrlc例如在 tail -f 监视中可以直接退出监视二、Ctrld退出或登出Ctrld例如使用root用户时,可以Ctrld直接退出root用户以及退出某些特定程序页面,比如python程序页面三、history命令可以查看历史输入过的命令history(然后可…

作者头像 李华
网站建设 2026/9/21 7:12:52

Linly-Talker支持多种肖像输入格式:证件照、自拍、动漫均可

Linly-Talker:一张图生成会说话的数字人,证件照、自拍、动漫全兼容 在短视频当道的时代,人人都想拥有自己的虚拟形象——一个能说会道、表情自然、风格百变的“数字分身”。但传统数字人制作动辄需要专业建模、绑定骨骼、手动调动画&#xff…

作者头像 李华
网站建设 2026/9/21 20:54:11

智慧城市之城市环境智能监管 非法倾倒行为自动识别 环保执法证据采 垃圾倾倒倾倒物品类型识别数据据 垃圾堆识别数据集 公路垃圾识别10315期

该数据集专注于非法倾倒场景的计算机视觉任务,为相关深度学习模型开发提供基础数据支撑。 类别 Classes (7) 类别(7) dump 垃圾场 furniture 家具 mattress 床垫 pallet 托盘 rubbish 垃圾 trolley 手推车 tyre 轮胎数据集核心信息 信息类别…

作者头像 李华