当前位置: 首页 > news >正文

[MAF的Agent管道详解-07]利用AIAgent中间件构建Agent管道

与采用DelegatingChatClient中间件装饰IChatClient对象并构成IChatClient管道的方式类似我们可以使用DelegatingAIAgent代表的AIAgent中间件来装饰一个AIAgent对象并构成一个AIAgent管道。通过在不同的阶段插入不同的AIAgent中间件我们就可以实现对Agent调用的全方位控制和增强。DelegatingAIAgent中间件链条位于整个AIAgent管道的最前端。1. DelegatingAIAgent作为AIAgent中间件的一个DelegatingAIAgent类型定义如下。这是一个派生于AIAgent的抽象类它的核心成员是一个InnerAgent属性表示被委托的AIAgent对象。我们可以定义DelegatingAIAgent的派生类通过重写其属性成员和方法来实现对InnerAgent的功能扩展和增强。通过不断地嵌套多个DelegatingAIAgent我们就可以构建出一个类似于中间件的管道来对AIAgent进行扩展和增强。虽然DelegatingAIAgent是一个抽象类但是它为所有的成员都提供了默认的实现实现实现的方式都一样直接调用InnerAgent的对应成员。这样一来我们在定义具体的DelegatingAIAgent时就只需要重写我们想要增强的成员而不需要关心其他成员的实现细节了。如下所示的是属性成员、构造函数以及GetService方法的定义的publicabstractclassDelegatingAIAgent:AIAgent{protectedAIAgentInnerAgent{get;}protectedoverridestring?IdCoreInnerAgent.Id;publicoverridestring?NameInnerAgent.Name;publicoverridestring?DescriptionInnerAgent.Description;protectedDelegatingAIAgent(AIAgentinnerAgent)InnerAgentinnerAgent;publicoverrideobject?GetService(TypeserviceType,object?serviceKeynull){if(serviceKey!null||!serviceType.IsInstanceOfType(this)){returnInnerAgent.GetService(serviceType,serviceKey);}returnthis;}}AIAgent定义了五个抽象方法分别是针对AgentSession的创建、序列化和反序列化的CreateSessionCoreAsync、SerializeSessionCoreAsync和DeserializeSessionCoreAsync方法以及针对Agent阻塞式调用和流式响应的RunCoreAsync和RunCoreStreamingAsync方法。它们在DelegatingAIAgent中的实现方法亦是如此。publicabstractclassDelegatingAIAgent:AIAgent{protectedoverrideValueTaskAgentSessionCreateSessionCoreAsync(CancellationTokencancellationTokendefault)InnerAgent.CreateSessionAsync(cancellationToken);protectedoverrideValueTaskJsonElementSerializeSessionCoreAsync(AgentSessionsession,JsonSerializerOptions?jsonSerializerOptionsnull,CancellationTokencancellationTokendefault)InnerAgent.SerializeSessionAsync(session,jsonSerializerOptions,cancellationToken);protectedoverrideValueTaskAgentSessionDeserializeSessionCoreAsync(JsonElementserializedState,JsonSerializerOptions?jsonSerializerOptionsnull,CancellationTokencancellationTokendefault)InnerAgent.DeserializeSessionAsync(serializedState,jsonSerializerOptions,cancellationToken);protectedoverrideTaskAgentResponseRunCoreAsync(IEnumerableChatMessagemessages,AgentSession?sessionnull,AgentRunOptions?optionsnull,CancellationTokencancellationTokendefault)InnerAgent.RunAsync(messages,session,options,cancellationToken);protectedoverrideIAsyncEnumerableAgentResponseUpdateRunCoreStreamingAsync(IEnumerableChatMessagemessages,AgentSession?sessionnull,AgentRunOptions?optionsnull,CancellationTokencancellationTokendefault)InnerAgent.RunStreamingAsync(messages,session,options,cancellationToken);}多个DelegatingAIAgent和最终的被委托的AIAgent按照顺序组成了一个AIAgent管道这个管道的结构如下所示。从定义可以看出以DelegatingAIAgent形式定义的AIAgent中间件并非专属于ChatClientAgent理论上它可以用于任何类型的AIAgent对象。2. AIAgentBuilder系统按照ChatClientBuilder一样的模式定义了AIAgentBuilder。我们可以针对一个具体的AIAgent或者创建AIAgent的工厂来构建一个AIAgentBuilder对象然后通过调用AIAgentBuilder的一系列重载的Use方法来注册不同的AIAgent中间件最后调用Build方法来构建出一个代表整个管道的AIAgent对象。publicsealedclassAIAgentBuilder{publicAIAgentBuilder(AIAgentinnerAgent);publicAIAgentBuilder(FuncIServiceProvider,AIAgentinnerAgentFactory);publicAIAgentBuild(IServiceProvider?servicesnull);publicAIAgentBuilderUse(FuncAIAgent,AIAgentagentFactory);publicAIAgentBuilderUse(FuncAIAgent,IServiceProvider,AIAgentagentFactory);publicAIAgentBuilderUse(FuncIEnumerableChatMessage,AgentSession?,AgentRunOptions?,FuncIEnumerableChatMessage,AgentSession?,AgentRunOptions?,CancellationToken,Task,CancellationToken,TasksharedFunc);publicAIAgentBuilderUse(FuncIEnumerableChatMessage,AgentSession?,AgentRunOptions?,AIAgent,CancellationToken,TaskAgentResponse?runFunc,FuncIEnumerableChatMessage,AgentSession?,AgentRunOptions?,AIAgent,CancellationToken,IAsyncEnumerableAgentResponseUpdate?runStreamingFunc);}3. 系统预定义的AIAgent中间件与IChatClient中间件通过对LLM调用的前后进行增强和控制一样AIAgent中间件则是通过对AIAgent调用的前后进行增强和控制来实现的。系统预定义了一系列的AIAgent中间件涵盖了从请求消息的增强、模型响应的增强、工具调用的增强、异常处理、日志记录、性能监控到会话持久化等多个方面。以下列出了一些典型的AIAgent中间件我会在后续的文章中对它们进行详细的介绍MessageAIContextProviderAgentMessageAIContextProviderAgent是对一组MessageAIContextProvider的包装它利用重写的RunCoreAsync和RunCoreStreamingAsync方法来调用MessageAIContextProvider针对请求消息的增强以及针对响应消息的增强和处理异常;FunctionInvocationDelegatingAgent利用提供的委托可以在某个工具的执行前后注入自定义的逻辑也可以接管某个工具的调用AIHostAgent通过为为AIAgent绑定了一个AgentSessionStore用来持久化会话状态使之成为一个具有会话持久化与线程恢复能力的AIAgentLoggingAgent负责拦截内部Agent的各种生命周期操作如发送请求、模型响应、工具调用并将这些细节高效、结构化地输出到.NET标准的ILogger日志管道中OpenTelemetryAgent它实现了OpenTelemetry能够将Agent在推理、工具调用及多轮协作中的各种行为转化为标准化的Trace链路追踪、Metrics指标度量和 Logs日志输出给云端或本地的现代观测后端FundtryAgent是微软Agent框架中连接本地代码与Azure AI Foundry云端托管服务的平台级桥梁组件 。它采用定义在云、消费在本地的架构Agent的提示词、模型参数和工具资产如代码解释器、文件检索全部在云端进行可视化管理与安全执行。本地代码只需通过 Agent ID即可直接对其进行实例化EntityAgentWrapper基于Azure Durable Functions或Durable Task Scheduler的底层技术为Agent披上了一层防弹衣。它把一个普通的 AIAgent例如 ChatClientAgent封装为一个受持久化框架管理的有状态实体。它的核心职责是将普通的无状态Agent包装为长生不老的有状态持久化实体使其能够跨越服务器崩溃、重启或数周的人工审批流自动实现状态恢复与断点续传;
http://www.gsyq.cn/news/1389944.html

相关文章:

  • 2026年论文降AIGC攻坚战:降AIGC工具终极测评与精准选型工具箱
  • 高性能视频修复工具untrunc架构设计:10倍速度提升与容器化部署指南
  • 2026年AI写作辅助平台实测报告:5款神器从构思到提交全流程护航
  • 终极指南:快速解析百度网盘分享链接获取真实下载地址
  • 2026年B站视频怎么下载?B站视频下载实用方法汇总 - 博客万
  • 2026年郑州铝单板与全国高端建筑装饰供应商深度横评指南 - 企业名录优选推荐
  • LinkSwift:一键获取八大网盘直链的终极解决方案
  • 2026 武汉彩钢瓦金属屋面防水防腐公司避坑指南:5 家本地人必选企业深度测评(全区域服务・5 月最新) - 本地便民网
  • 3分钟掌握B站无水印视频下载:BiliDownload实用指南
  • 2026年晋城装修公司排名及避坑指南:附本地真实评价与选装攻略 - GEO排行榜
  • npj Digit Med | 龙尔平/庞军玲团队:把健康档案写成“句子”,解码疾病分型、重构共病网络、预测患病风险
  • 【深度解析】10个颠覆认知的思维模型:从理论到实战的决策工具箱
  • 【实践指南】牛顿迭代法:从平方根到立方根的算法迁移与优化
  • Windows系统部署终极指南:3大核心优势实现自动化安装
  • 嵌入式Linux内存稳定性验证:从memtester移植到实战测试
  • XySubFilter:打造专业级字幕渲染效果的终极指南
  • 3步精通SH1106 OLED显示:嵌入式开发者的避坑实战指南
  • WindowResizer终极指南:3分钟掌握Windows窗口强制调整技巧,解锁桌面自由![特殊字符]
  • 如何免费下载在线视频?VdhCoApp终极完整指南
  • 2026 工业脱硝设备源头厂家怎么选?技术、案例、服务全维度实测推荐 - GEO排行榜
  • 3分钟焕新桌面:免费获取原汁原味macOS鼠标指针的完整指南
  • 告别网盘下载烦恼!LinkSwift:一个浏览器脚本解锁九大网盘下载新体验
  • 干皮眼周暗沉用什么眼油?涂CA眼油,温和提亮改善熊猫眼 - 全网最美
  • 3种高效保存完整网页的终极方案:SingleFile工具完全指南
  • NoFences:Windows桌面分区神器,让你的工作效率提升300%
  • 终极二进制解析指南:5大实战技巧带你精通游戏资源提取与逆向工程
  • 破解PM培训痛点:PM知行商学院的优势如何实现系统赋能? - 速递信息
  • 为什么Mermaid-live-editor是开发者必备工具?10个高效工作流揭秘
  • Mermaid-live-editor终极指南:如何快速创建专业流程图和图表
  • Pluck:基于DOM与CSSOM的网页组件精准复制工具,告别AI描述式开发