第2系列_第6期_.NET C# SubAgent多智能体架构
.NET C# SubAgent 多智能体架构独立 Kernel 设计与编排系列.NET C# Semantic Kernel 集成深度解析 ⑥/6完结篇难度⭐⭐⭐进阶源码需.NET基础源码仓库github.com/zongge0812/zonggeAgent适用环境.NET 9.0 WPF一、引言多智能体Multi-Agent架构是 AI 应用从单兵作战走向团队协奏的关键一步。zonggeAgent 的 SubAgent 设计遵循一个核心理念主 Agent 负责协调和决策SubAgent 负责执行具体任务——每个 SubAgent 拥有独立的 Kernel 和工具调用上下文。┌─────────────────────────────────────────────────────────────┐ │ 场景示例 │ │ │ │ 用户帮我分析这个项目的架构生成一份报告 │ │ │ │ 主Agent 接到任务 → 拆解为 3 个子任务 │ │ ├─ SubAgent①扫描项目目录结构FileToolRead │ │ ├─ SubAgent②分析代码架构ArchitectureRecognition │ │ └─ SubAgent③生成报告文档DocumentGeneration │ │ │ │ 主Agent 汇总 3 个 SubAgent 的结果 → 返回给用户 │ └─────────────────────────────────────────────────────────────┘二、SubAgentService 整体架构SubAgent 服务通过ISubAgentService接口暴露由SubAgentService类实现。2.1 接口设计// ISubAgentService.cspublicinterfaceISubAgentService{TaskSubAgentResponseExecuteAsync(SubAgentRequestrequest,CancellationTokencancellationTokendefault);voidUpdateWorkspaceSnapshot(string?workspacePath);string?GetCurrentWorkspacePath();}接口非常精简——只暴露了执行对话和工作区管理两个核心能力。2.2 类结构SubAgentService │ ├── 状态 │ ├── _subAgentKernel ← 独立 Kernel缓存模式切换时重置 │ ├── _currentWorkspaceSnapshot ← 继承主 Agent 的工作区 │ ├── _currentChatMode ← 当前模式Chat / Development │ └── _settingsService ← 配置服务 │ └── _providerFactory ← Provider 工厂 │ ├── 核心方法 │ ├── ExecuteAsync() ← 入口执行 SubAgent 对话 │ ├── CreateSubAgentKernelAsync()← 创建独立 Kernel │ ├── LoadSubAgentTools() ← 加载子 Agent 专用工具 │ └── ExecuteConversationWithToolsAsync() ← 带工具调用的对话执行 │ ├── 辅助方法 │ ├── BuildEnhancedSystemPrompt() ← 构建系统提示含模式说明 │ ├── BuildUserPrompt() ← 构建用户提示 │ ├── CreateSubAgentExecutionSettings() ← 工具调用配置 │ ├── ExecuteFallbackConversationAsync() ← 工具失败回退 │ ├── IsContentComplete() ← 是否完成检测 │ ├── IsNonRetryableError() ← 不可重试错误检测 │ └── EstimateTokens() ← Token 估算 │ └── 公共方法 ├── UpdateWorkspaceSnapshot() ← 更新工作区快照 ├── UpdateChatMode() ← 更新模式重置 Kernel 缓存 └── GetCurrentWorkspacePath() ← 获取当前工作区三、独立 Kernel 设计SubAgent 拥有完全独立的 Kernel不共享主 Agent 的 Kernel。3.1 Kernel 创建privateasyncTaskKernelCreateSubAgentKernelAsync(AIProviderConfigproviderConfig,IAIProviderServiceproviderService,CancellationTokencancellationTokendefault){// 缓存如果 Kernel 已存在直接返回if(_subAgentKernel!null){return_subAgentKernel;}// 创建新的 Kernel_subAgentKernelnewKernel();// 加载子 Agent 专用工具LoadSubAgentTools(_subAgentKernel);return_subAgentKernel;}3.2 Kernel 缓存与重置事件Kernel 状态行为首次调用未创建创建新 Kernel后续调用已缓存直接返回避免重复创建模式切换重置为 null_subAgentKernel null下次调用重新创建publicvoidUpdateChatMode(ChatModemode){_currentChatModemode;// 模式切换时重置 Kernel 缓存下次调用时重新创建并加载对应工具集_subAgentKernelnull;}为什么要重置 Kernel因为不同模式下需要加载不同的工具集聊天模式移除写插件。不重置的话切换到聊天模式后写插件仍然存在。3.3 工具加载privatevoidLoadSubAgentTools(Kernelkernel){// ① 热加载所有插件PluginLoader 负责扫描和注册PluginLoader.RegisterPlugin(kernel);// ② 在 Kernel 中注入模式信息供后续使用kernel.Data.Add(ChatMode,_currentChatModeChatMode.Chat?Chat:Development);}与主 Agent 的工具加载对比对比项主 AgentSubAgent工具来源PluginLoader 热加载✅ 同左Kernel 生命周期每次对话重建✅ 缓存重用模式过滤ApplyChatModeFilter❌ SubAgent 自行控制Tools 接口通过 ITools 标记✅ 同左四、对话执行完整流程4.1 ExecuteAsync 入口publicasyncTaskSubAgentResponseExecuteAsync(SubAgentRequestrequest,CancellationTokencancellationTokendefault){varstopwatchStopwatch.StartNew();try{// ① 获取配置的 Providervar(providerConfig,providerService)GetConfiguredProvider();if(providerConfignull||providerServicenull){returnSubAgentResponse.Error(AI提供商未正确配置);}// ② 确定工作区路径继承主 Agent 的vareffectiveWorkspacerequest.WorkspacePath??_currentWorkspaceSnapshot??WorkspaceBridge.CurrentWorkspacePath;// ③ 执行对话带工具调用varresultawaitExecuteConversationWithToolsAsync(request,providerConfig,providerService,effectiveWorkspace,cancellationToken);result.ExecutionTimeMsstopwatch.ElapsedMilliseconds;result.ProviderTypeproviderConfig.ProviderType;returnresult;}catch(Exceptionex){varerrorResponseSubAgentResponse.Error($Sub Agent执行失败:{ex.Message});errorResponse.ExecutionTimeMsstopwatch.ElapsedMilliseconds;returnerrorResponse;}}4.2 执行链路全景用户触发 SubAgent ↓ ExecuteAsync() ├─ GetConfiguredProvider() → 获取当前 AI Provider ├─ 确定工作区路径 → 主 Agent → 快照 → WorkspaceBridge └─ ExecuteConversationWithToolsAsync() │ ├─ CreateSubAgentKernelAsync() → 创建/获取缓存 Kernel │ └─ LoadSubAgentTools() → PluginLoader 加载工具 │ ├─ 重试循环maxRetries 次 │ ├─ BuildEnhancedSystemPrompt() → 构建系统提示 │ ├─ BuildUserPrompt() → 构建用户提示 │ ├─ 上下文体积检查 → EstimateTokens() │ ├─ 创建 SubAgent 执行设置 → CreateSubAgentExecutionSettings() │ ├─ providerService.SendMessageAsync() → 调用 AI │ ├─ 检查是否完成 → IsContentComplete() │ └─ 如果工具调用失败 → ExecuteFallbackConversationAsync() │ └─ 返回 SubAgentResponse4.3 重试机制对话执行采用重试循环不是一次调用就结束while(currentRetrymaxRetries){// 连续失败检测if(consecutiveFailuresmaxConsecutiveFailures){returnSubAgentResponse.Error($连续失败{consecutiveFailures}次);}// 执行对话...varresponseawaitproviderService.SendMessageAsync(...);if(!string.IsNullOrEmpty(response.Content)){collectedContent.Append(response.Content);consecutiveFailures0;// 重置连续失败计数// 检查是否完成if(IsContentComplete(response.Content,collectedContent.ToString())){returnSubAgentResponse.Success(collectedContent.ToString(),true);}}else{consecutiveFailures;}}重试策略参数值说明maxRetries从 SubAgentRequest 传入最大重试次数maxConsecutiveFailures3连续失败 3 次立即终止IsContentComplete()智能检测判断是否已收集到完整内容4.4 不可重试错误检测if(IsNonRetryableError(ex)){// 永不重试的错误类型returnSubAgentResponse.Error($检测到不可重试错误:{ex.Message});}// 可重试等待下次循环尝试4.5 工具调用失败的自动回退try{varresponseawaitproviderService.SendMessageAsync(userPrompt,chatHistory,providerConfig,executionSettings);// ...}catch(Exceptionex){// 工具调用失败 → 自动回退到纯文本对话varfallbackResponseawaitExecuteFallbackConversationAsync(request,providerConfig,providerService,workspacePath);if(!string.IsNullOrEmpty(fallbackResponse.Content)){collectedContent.Append(fallbackResponse.Content);consecutiveFailures0;}}五、SubAgent 的执行设置SubAgent 拥有独立的ExecutionSettings配置根据模式自动选择不同的工具调用行为privatePromptExecutionSettingsCreateSubAgentExecutionSettings(AIProviderConfigconfig){// 聊天模式让 AI 看到工具但需要明确请求才调用// 开发模式自动调用工具正常读写vartoolBehavior_currentChatModeChatMode.Chat?ToolCallBehavior.EnableKernelFunctions:ToolCallBehavior.AutoInvokeKernelFunctions;returnnewOpenAIPromptExecutionSettings{MaxTokensconfig.MaxTokens,Temperature(float)config.Temperature,ToolCallBehaviortoolBehavior};}重要差异模式主 Agent 的 ToolCallBehaviorSubAgent 的 ToolCallBehavior 聊天AutoInvokeKernelFunctions插件被 Kernel 移除写工具EnableKernelFunctionsAI 看到工具但不自动调用 开发AutoInvokeKernelFunctions全自动AutoInvokeKernelFunctions全自动为什么聊天模式下 SubAgent 使用EnableKernelFunctions而非主 Agent 的AutoInvokeKernelFunctions主 Agent 通过ApplyChatModeFilter物理移除了写插件SubAgent 通过EnableKernelFunctions让 AI 可以看见工具但不会自动调用双重保险即使写插件存在也不会被自动调用六、提示词构造SubAgent 的提示词构造非常完整包含 3 个核心部分6.1 系统提示BuildEnhancedSystemPromptprivatestringBuildEnhancedSystemPrompt(SubAgentRequestrequest,string?workspacePath){varbasePromptrequest.CustomSystemPrompt;// ① 模式说明最优先展示if(_currentChatModeChatMode.Chat){basePrompt当前模式聊天模式只读模式只看不写...;}else{basePrompt当前模式开发模式读写全开...;}// ② 工作区信息继承主 Agentif(!string.IsNullOrEmpty(workspacePath)){basePrompt$\n**当前工作区**{workspacePath};}// ③ 工具使用指南basePrompt工具使用指南节能高效...;returnbasePrompt;}6.2 上下文体积保护varestimatedTokensEstimateTokens(chatHistory.ToString()userPrompt);constintmaxTokens900000;// 留 10% 安全余量if(estimatedTokensmaxTokens){returnSubAgentResponse.Error($上下文Token数过大{estimatedTokens}超过{maxTokens}限制);}设置 900,000 Token 的安全上限超过则立即报错而不是悄悄截断。七、SubAgentRequest 与 SubAgentResponse7.1 请求模型字段类型说明AgentNamestringSubAgent 名称日志标识UserMessagestring用户消息Contextstring?上下文信息WorkspacePathstring?工作区路径不传则继承主 AgentMaxRetriesint最大重试次数CustomSystemPromptstring?自定义系统提示7.2 响应模型字段类型说明Contentstring响应内容IsSuccessbool是否成功IsCompletebool是否完成AgentNamestringAgent 名称ExecutionTimeMslong执行耗时 msProviderTypeAIProviderType使用的 Provider八、安全性设计SubAgent 的安全设计体现在3 层防护层级防护措施说明第 1 层独立 KernelSubAgent 不共享主 Agent 的 Kernel互不干扰第 2 层模式感知的 ToolCallBehavior聊天模式使用EnableKernelFunctions不自动调用工具第 3 层连续失败检测连续 3 次失败立即终止防止级联故障九、UnifiedChatService 中的 SubAgent 调用在UnifiedChatService中SubAgent 通过统一的IAIProviderService接口调用与主 Agent 共享 Provider 配置UnifiedChatService.SendMessageAsync() │ ├─ 判断是否需要 SubAgent │ ├─ 否 → 直接使用当前 Provider 对话 │ └─ 是 → SubAgentService.ExecuteAsync() │ ├─ 继承 Provider 配置GetConfiguredProvider │ ├─ 继承工作区路径 │ ├─ 创建独立 Kernel │ └─ 执行对话 工具调用 │ └─ 返回最终结果十、系列总结第2系列全篇回顾期次标题核心源码关键知识点①SK 核心概念与架构设计BaseAIProviderService, UnifiedAIServiceSK 三件套、6层架构、模板方法②多 AI Provider 统一接入方案AIProviderFactory, 6个Provider工厂模式、模板方法、连接器差异③插件热加载机制PluginLoaderDLL扫描、反射加载、AddFromObject④工具调用与 Function CallingBaseAIProviderService 中 ToolCall 部分ToolCallBehavior、自动调用链路⑤流式响应与性能优化BaseAIProviderService 流式部分, StreamingOptimizationServiceIAsyncEnumerable、Token追踪、智能分块⑥SubAgent 多智能体架构SubAgentService独立Kernel、重试机制、回退对话本系列核心源码文件索引文件路径行数核心职责IAIProviderService.csServices/Interfaces/52统一接口契约BaseAIProviderService.csServices/Abstract/539模板方法基类流式/非流式/Token追踪AIProviderFactory.csServices/Implementations/51工厂模式创建ProviderDeepSeekAIProviderService.csServices/Implementations/59DeepSeek Provider 实现ClaudeAIProviderService.csServices/Implementations/57Claude Anthropic 连接器OllamaAIProviderService.csServices/Implementations/55Ollama 本地模型PluginLoader.csTools/Implementations/258插件热加载核心StreamingOptimizationService.csServices/Implementations/365流式优化 智能分块PerformanceMonitorService.csServices/Implementations/-性能监控SubAgentService.csServices/Implementations/648多Agent架构UnifiedAIService.csServices/-统一入口UnifiedChatService.csServices/-统一对话服务源码仓库github.com/zongge0812/zonggeAgent首发CSDN · zonggeAgent 技术专栏

相关新闻

C++实现BMP图像180度旋转:从文件格式解析到内存操作实战

C++实现BMP图像180度旋转:从文件格式解析到内存操作实战

1. 项目概述:从BMP旋转看图像处理的基石最近在整理一些老项目的代码,翻到了一个当年学习C和图像处理时写的“BMP图像旋转180度”的小程序。别看功能简单,就一个旋转180度,但它几乎涵盖了本地图像文件处理的完整链路:从…

2026/7/20 12:24:18 阅读更多 →
Klipper架构深度解析:高性能3D打印固件的设计哲学与性能调优

Klipper架构深度解析:高性能3D打印固件的设计哲学与性能调优

Klipper架构深度解析:高性能3D打印固件的设计哲学与性能调优 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper 在3D打印固件领域,Klipper以其独特的架构设计实现了传统固件…

2026/7/20 12:24:18 阅读更多 →
26个阅读APP书源免费一键导入:解锁海量小说阅读新体验

26个阅读APP书源免费一键导入:解锁海量小说阅读新体验

26个阅读APP书源免费一键导入:解锁海量小说阅读新体验 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 阅读APP作为一款开源小说阅读工具,本身不提供内容,而是通过书源…

2026/7/20 12:24:17 阅读更多 →

最新新闻

AI人工智能随机森林分类器:原理、实现与应用

AI人工智能随机森林分类器:原理、实现与应用

1. 引言在机器学习领域,随机森林(Random Forest)是一种强大且应用广泛的集成学习算法。它通过构建多棵决策树并综合它们的预测结果,有效提升了模型的准确性和鲁棒性,同时降低了过拟合的风险。随着人工智能(…

2026/7/21 5:41:10 阅读更多 →
工业设备智能诊断:WOA-TCN-BiLSTM-Attention混合模型实战

工业设备智能诊断:WOA-TCN-BiLSTM-Attention混合模型实战

1. 项目概述:当工业设备遇上智能诊断工业设备的故障诊断一直是制造业的痛点问题。传统方法在面对振动信号、温度曲线这类复杂时序数据时,往往捉襟见肘——就像用老式收音机接收4K视频信号,虽然能听到声音,但丢失了大量关键信息。这…

2026/7/21 5:41:10 阅读更多 →
看不懂行情时,坚守市场唯一终极规律:涨多必跌,跌多必涨(全景深度量化解析)

看不懂行情时,坚守市场唯一终极规律:涨多必跌,跌多必涨(全景深度量化解析)

二级市场90%的交易亏损,都源于交易者过度沉迷短期消息、分时波动、热点轮动、政策催化,在复杂多变的盘面中迷失方向、频繁主观预判。当主线混乱、分化极致、信号杂糅、看不懂当下行情时,所有高阶交易者都会回归市场唯一永恒、从不失效、穿越牛…

2026/7/21 5:41:10 阅读更多 →
AI产品经理转型指南:核心能力与实战路径

AI产品经理转型指南:核心能力与实战路径

1. 转型AI产品经理的核心价值与挑战最近三年,AI产品经理岗位需求增长了近300%,平均薪资比传统互联网产品经理高出35%。但真正转型成功的比例不足20%——这个数字背后反映的是转型者普遍存在的三个认知误区:第一误区是认为"懂点AI概念就能…

2026/7/21 5:41:10 阅读更多 →
STM32——FreeRTOS - 中断管理*

STM32——FreeRTOS - 中断管理*

STM32——学习总纲-CSDN博客 一、什么是中断 二、中断优先级分组设置 最大 256个中断优先级,一般芯片厂家用不到这么多优先级。 这四位又分为 抢占 优先级 和 子 优先级,由中断优先级分组设置 中断优先级分组设置 Free RTOS为了方便管理,统一…

2026/7/21 5:41:10 阅读更多 →
我把 AI 最容易改坏真实 App 的地方,整理成了 skills

我把 AI 最容易改坏真实 App 的地方,整理成了 skills

1. 引言AI 代码助手(如 Claude Code、Cursor、Copilot)正在改变我们的开发方式。但在真实项目中,AI 生成的代码往往会在一些「看起来没问题」的地方埋下隐患。本文把我踩过的坑和团队总结的经验整理成一套可复用的 skills,帮助你在…

2026/7/21 5:40:09 阅读更多 →

日新闻

Octane Render与C4D汉化版安装与优化指南

Octane Render与C4D汉化版安装与优化指南

1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能&#xff…

2026/7/21 0:00:19 阅读更多 →
GPMC接口设计:异步/同步模式与多路复用配置实战

GPMC接口设计:异步/同步模式与多路复用配置实战

1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…

2026/7/21 0:00:19 阅读更多 →
UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

1. 项目概述:UE5 GAS RPG被动技能的核心价值在UE5里用GAS(Gameplay Ability System)做RPG游戏,主动技能像是你手里的武器,按一下打一下,逻辑直接,反馈也快。但被动技能,它更像是你身…

2026/7/21 0:00:19 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/20 5:57:49 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/20 5:56:42 阅读更多 →

月新闻