朱凡松 發表於 2026-3-23 09:48:00

基于.NET AgentFramework开发OpenClaw智能体框架

<h2 id="基于net-agentframework开发openclaw智能体框架">基于.NET AgentFramework开发OpenClaw智能体框架</h2>
<p>本文档详细介绍了基于.NET AgentFramework开发OpenClaw智能体框架的设计理念、核心功能、技术实现、使用方法和注意事项,为开发人员提供全面的技术指导,帮助其理解、使用和扩展该框架。</p>
<h2 id="概述-11-项目背景">概述 1.1 项目背景</h2>
<ul>
<li>OpenClaw作为2026年全球流行的开源AI智能体框架,以其多通道接入能力、灵活的Skill技能系统和工程化治理能力而闻名。然而,其原生基于Node.js/TypeScript的技术栈给.NET生态企业带来了额外的运维成本和学习门槛。</li>
<li>本文档将介绍如何利用Microsoft Agent<br>
Framework(Preview)在.NET平台实现OpenClaw的核心功能,为.NET开发者提供一个生产级AI智能体框架的参考方案。</li>
</ul>
<h2 id="12-目标">1.2 目标</h2>
<ul>
<li>
<p>实现OpenClaw五大核心层级:用户接口层、Gateway核心层、消息处理层、扩展层和基础设施层</p>
</li>
<li>
<p>提供生产级特性支持:包括多通道并发、会话隔离、幂等去重、记忆压缩等 支持插件化通道接入和动态Skill加载机制</p>
<p>基于.NET依赖注入与配置体系,实现开箱即用的易用性</p>
</li>
</ul>
<h2 id="13-术语表">1.3 术语表</h2>
<p><strong>术语        说明</strong></p>
<ul>
<li>
<p>Agent        智能体,基于大语言模型(LLM)执行任务的核心实体。 Gateway        网关,负责连接管理、消息路由、并发控制等运行时治理。</p>
</li>
<li>
<p>Channel        通道,对接外部消息平台(如钉钉、飞书、Telegram)的适配器。 Skill        技能,通过 SKILL.md</p>
<p>描述的可调用能力,模型按需加载。 MCP        Model Context Protocol,模型上下文协议,用于工具调用。<br>
Session        会话,标识一个对话上下文(如私聊或群聊)。 Memory        记忆,包括短期(会话内)、中期(每日摘要)和长期(用户偏好)。</p>
</li>
<li>
<p>架构设计</p>
</li>
</ul>
<h2 id="21-整体架构图"><strong>2.1 整体架构图</strong></h2>
<p>┌─────────────────────────────────────────────────────────────┐<br>
│ 第1层:用户接口层 │<br>
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │<br>
│ │ 钉钉 │ │ 飞书 │ │Telegram│ │ 控制台 │ ... │<br>
│ └────────┘ └────────┘ └────────┘ └────────┘ │<br>
├─────────────────────────────────────────────────────────────┤<br>
│ 第2层:Gateway核心层 │<br>
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │<br>
│ │ 连接管理 │ │ 配置热加载 │ │ 健康监控 │ │<br>
│ └───────────────┘ └───────────────┘ └───────────────┘ │<br>
├─────────────────────────────────────────────────────────────┤<br>
│ 第3层:消息处理层 │<br>
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │<br>
│ │ Agent执行器 │ │ 路由分发 │ │ 会话管理 │ │<br>
│ └───────────────┘ └───────────────┘ └───────────────┘ │<br>
├─────────────────────────────────────────────────────────────┤<br>
│ 第4层:扩展与插件层 │<br>
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │<br>
│ │ 通道插件 │ │ Skill系统 │ │ 多Agent编排 │ │<br>
│ └───────────────┘ └───────────────┘第5层:基础设施层<br>
┌───────────────┐ ┌───────────────┐ ┌───────────────┐<br>
│ 配置管理 │ │ 记忆检索 │ │ 沙箱安全 │<br>
└───────────────┘ └───────────────┘ └───────────────┘</p>
<h2 id="22-消息处理流程">2.2 消息处理流程</h2>
<p>消息流转路径:</p>
<ol>
<li>消息源(如钉钉)</li>
<li>通道适配器</li>
<li>Gateway接收</li>
<li>幂等去重处理</li>
<li>会话锁控制</li>
<li>消息处理器(上下文构建)</li>
<li>Agent循环(工具调用)</li>
<li>生成响应</li>
<li>持久化存储(会话历史+记忆)</li>
<li>通过通道返回用户</li>
</ol>
<h2 id="23-技术栈选型">2.3 技术栈选型</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>技术选型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>框架</td>
<td>.NET 9/10</td>
<td>采用长期支持版本</td>
</tr>
<tr>
<td>AI 抽象</td>
<td>Microsoft Agent Framework</td>
<td>统一模型与工具调用标准</td>
</tr>
<tr>
<td>LLM 集成</td>
<td>OpenAI/Azure OpenAI/DeepSeek/Ollama</td>
<td>基于 Microsoft.Agents.AI 实现</td>
</tr>
<tr>
<td>依赖注入</td>
<td>Microsoft.Extensions.DependencyInjection</td>
<td>原生支持</td>
</tr>
<tr>
<td>配置</td>
<td>Microsoft.Extensions.Configuration</td>
<td>支持 JSON/环境变量/热加载</td>
</tr>
<tr>
<td>日志</td>
<td>Microsoft.Extensions.Logging</td>
<td>可扩展至 Seq/ELK</td>
</tr>
<tr>
<td>工具调用</td>
<td>函数技能/Skill/MCP</td>
<td>标准化协议</td>
</tr>
<tr>
<td>存储</td>
<td>Sqlite/json文件</td>
<td>轻量化本地存储方案</td>
</tr>
<tr>
<td>界面</td>
<td>Vue/HTML/JS</td>
<td>可视化交互界面</td>
</tr>
</tbody>
</table>
<h2 id="24-microsoft-agent-framework-框架简介">2.4 Microsoft Agent Framework 框架简介</h2>
<p>该框架融合了 AutoGen 的简洁代理抽象与语义内核的企业级功能(包括会话状态管理、类型安全、中间件及遥测),并新增了图形化工作流支持,实现了显式多代理业务流程控制。</p>
<p>作为 AutoGen 和语义内核的直接继任者,Agent Framework 整合了两者的核心优势:</p>
<ul>
<li>继承 AutoGen 的单/多代理模式抽象</li>
<li>保留语义内核的企业级特性(会话状态管理、类型安全、筛选器、遥测及多模型支持)</li>
<li>新增工作流机制,支持显式控制多代理执行路径</li>
<li>提供可靠的状态管理,适用于长时间运行和人机循环场景</li>
</ul>
<p>迁移指南请参考语义内核迁移文档和 AutoGen 迁移文档。本框架将继续保持开源,欢迎社区贡献。</p>
<h3 id="241-代理">2.4.1 代理</h3>
<p>支持多种派生自 AIAgent 基类的代理类型,提供统一接口。</p>
<h3 id="242-工具概述">2.4.2 工具概述</h3>
<h3 id="243-技能">2.4.3 技能</h3>
<p>代理技能是可移植的功能包(包含指令、脚本和资源),遵循开放规范并采用渐进式上下文加载机制。</p>
<h3 id="244-工作流">2.4.4 工作流</h3>
<p>实现智能自动化系统,通过类型安全架构简化复杂业务流程开发:</p>
<p><strong>核心区别:</strong></p>
<ul>
<li>代理:LLM 驱动的动态任务执行</li>
<li>工作流:预定义的多步骤流程,支持代理集成</li>
</ul>
<p><strong>核心功能:</strong></p>
<ul>
<li>类型安全:强类型消息流转</li>
<li>灵活控制流:图形化建模(条件路由/并行处理)</li>
<li>外部集成:支持 API 和人机交互</li>
<li>检查点:状态持久化恢复</li>
<li>多代理编排:支持多种协作模式</li>
</ul>
<p><strong>核心概念:</strong></p>
<ul>
<li>执行器:工作流处理单元(代理/自定义逻辑)</li>
<li>边缘:执行器间带条件的消息路由</li>
<li>事件:执行过程可观测性</li>
<li>工作流引擎:基于有向图的管理框架</li>
<li>核心模块实现</li>
</ul>
<h2 id="31-用户接口层通道插件">3.1 用户接口层:通道插件</h2>
<p><strong>3.1.1 插件接口定义</strong><br>
MsgContext数据结构:</p>
<pre><code class="language-csharp">public class MsgContext
{
public string Body { get; set; }
public string SessionKey { get; set; } // 用于会话隔离
public string Provider { get; set; } // 通道标识
public string ChatType { get; set; } // direct / group
public string SenderId { get; set; }
public string MessageSid { get; set; } // 消息唯一ID
public Dictionary&lt;string, object&gt; Metadata { get; set; }
}
</code></pre>
<p><strong>3.2 Gateway核心层</strong><br>
通过API控制实现对全部通道的并行监听,具备以下核心功能:<br>
• 消息去重:采用Provider|SessionKey|MessageSid复合键进行幂等校验,避免重复处理<br>
• 会话锁机制:同一Session的消息串行处理,确保上下文一致性<br>
• 配置热更新:实时监听appsettings.json文件变更并动态刷新配置</p>
<p><strong>3.3 消息处理层:Agent执行循环</strong><br>
AgentLoop作为处理核心,通过维护ChatHistory实现多轮工具调用支持</p>
<p><strong>3.3.1 上下文构建</strong><br>
系统提示词由三个模块组合生成:<br>
• AGENTS.md:定义统一行为规范<br>
• SOUL.md:配置个性化人格特征(从数据库动态获取)<br>
• 技能列表:自动扫描skills目录生成的工具描述</p>
<pre><code class="language-csharp">var skillsProvider = new FileAgentSkillsProvider(
   skillPaths: [Path.Combine(AppContext.BaseDirectory + "/Skills", "expense-report-skills"),
      Path.Combine(AppContext.BaseDirectory + "/Skills", "system-ops-skills"),
      Path.Combine(AppContext.BaseDirectory + "/Skills", "hello-python-skills"),
          Path.Combine(AppContext.BaseDirectory + "/Skills", "agent-browser-skills")
      ],
   options: new FileAgentSkillsProviderOptions
   {
         SkillsInstructionPrompt = """
                              你可借助以下技能获取领域知识与操作指引。
                              所有文件目录均位于服务器的/Skills文件夹内,技能文件夹以“技能名称-skills”命名,文件夹中包含技能指令文件instruction.txt、参考资料文件夹resources及可执行脚本文件夹scripts。
                              若scripts文件夹内包含Python脚本,可通过RunPythonPy或RunPythonCode执行;若为其他类型脚本,则使用RunShell执行。
                                             
                              重要流程:
                              每个技能均提供专业指令、参考文档及可执行脚本
                              当用户任务与技能描述匹配时,调用`load_skill`加载该技能的完整指令
                              技能指令中会明确标注可用脚本及其执行命令
                              必要时通过`read_skill_resource`读取参考资料
                              重要原则:先加载知识,再执行操作
                              #相关技能文档若需执行命令,可直接通过RunShell执行,无需用户二次确认
                              具体技能如下:
                              {0}
                        
      """
   });
3.4.2 技能执行器(工具函数)
通过AgentFramework Tools将技能暴露给模型:
    if (chatClientAgentOptions.ChatOptions != default &amp;&amp; (chatClientAgentOptions.ChatOptions?.Tools == default || chatClientAgentOptions.ChatOptions?.Tools.Count == 0))
    {
      // 🔑 能力层:工具
      chatClientAgentOptions.ChatOptions.Tools = new List&lt;&lt;AITool&gt;() {
            AIFunctionFactory.Create(KevinBasicAI.GetNetCoreKevinInfo, new AIFunctionFactoryOptions{ Name = "GetNetCoreKevinInfo",Description = "获取NetCoreKevin框架的介绍信息" }),
            AIFunctionFactory.Create(ShellTools.RunShell,new AIFunctionFactoryOptions{ Name = "RunShell",Description = "执行Shell命令。通过操作系统原生Shell执行命令(Windows可使用cmd执行bash相关命令,Linux/Mac使用bash)。包含安全防护机制:危险命令拦截、输出截断(50KB)、超时控制(60秒)。" }),
            AIFunctionFactory.Create(PythonTools.RunPythonPy,new AIFunctionFactoryOptions{ Name = "RunPythonPy",Description = "执行Python脚本。支持Skills工具运行scripts目录下后缀为.py的脚本,通过PythonNet库调用Python.py脚本并返回执行结果;若执行结果为空或报错,可使用RunShell提取脚本代码,自行调整定义main函数后通过RunPythonCode执行。" }),
             AIFunctionFactory.Create(PythonTools.RunPythonCode,new AIFunctionFactoryOptions{ Name = "RunPythonCode",Description = "执行Python代码。使用IronPython库直接执行Python代码,代码必须定义main函数。" })
            };
}
</code></pre>
<p><strong>3.5 基础设施层:三层记忆</strong><br>
短期记忆:内存/sqlite数据库<br>
中期记忆:Mysql/sqlite数据库<br>
长期记忆:Mysql/sqlite数据库</p>
<ul>
<li>部署与配置<br>
配置文件(appsettings.json)</li>
</ul>
<pre><code class="language-csharp">{
//根据模型类型配置,默认使用智谱Ollama API,原生模式不可传入apikey
"OllamaApiSetting": {
    "Url": "https://open.bigmodel.cn/api/paas/v4/embeddings",
    "DefaultModel": "embedding-3",
    "ApiKey": "***"
},
"AISetting": {
    "AIUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1/",
    "AIKeySecret": "*****",
    "AIDefaultModel": "deepseek-v3",
    "IsHttpLog": false //是否开启AI请求日志记录
},
}
</code></pre>
<h1 id="运行">运行</h1>
<p>dotnet run --project OpenClawDotNet</p>
<ul>
<li>扩展开发指南</li>
</ul>
<h3 id="51-开发新通道插件未实现">5.1 开发新通道插件(未实现)</h3>
<ol>
<li>实现 <code>IChannelPlugin</code> 接口</li>
<li>在 <code>Program.cs</code> 中注册服务:<code>builder.Services.AddSingleton&lt;IChannelPlugin, MyChannel&gt;()</code></li>
<li>如需配置,可从 <code>IConfiguration</code> 读取</li>
</ol>
<h3 id="52-开发新技能已实现">5.2 开发新技能(已实现)</h3>
<ol>
<li>创建目录 <code>skills/{技能名}/</code></li>
<li>编写 <code>SKILL.md</code>,包含 YAML 前置元数据与技能描述</li>
<li>放置可执行文件(<code>.exe</code>/<code>.py</code>/<code>.sh</code>)或 API 调用脚本</li>
<li>模型将根据描述自动判断是否调用该技能</li>
<li>也可通过下载 <code>openclaw</code> 补全技能</li>
</ol>
<h3 id="53-替换记忆存储已实现">5.3 替换记忆存储(已实现)</h3>
<ul>
<li>实现 <code>IMemoryService</code> 接口,改用 Redis/PostgreSQL/Azure Cosmos DB 作为存储方案</li>
<li>在依赖注入(DI)容器中替换默认实现</li>
</ul>
<h3 id="54-集成向量数据库已实现">5.4 集成向量数据库(已实现)</h3>
<ul>
<li>通过 <code>Microsoft.Extensions.VectorData</code> 与 Qdrant/Azure AI Search 集成</li>
<li>在 <code>GetRelevantMemoryAsync</code> 方法中实现向量相似度搜索,提升检索精度</li>
</ul>
<hr>
<h3 id="性能与安全">性能与安全</h3>
<h4 id="61-性能优化">6.1 性能优化</h4>
<ul>
<li><strong>并发控制</strong>:通过 <code>SemaphoreSlim</code> 限制全局并发与会话并发,避免系统过载</li>
<li><strong>记忆压缩</strong>:当会话历史超过阈值(如 30 条)时,调用大语言模型(LLM)进行总结,并保留最近 10 条记录,显著降低 token 消耗</li>
<li><strong>异步 I/O</strong>:所有文件操作、网络请求均采用异步方法执行</li>
</ul>
<h4 id="62-可观测性">6.2 可观测性</h4>
<ul>
<li>目前通过日志输出与实时窗口输出来实现</li>
</ul>
<hr>
<h3 id="后续优化方向">后续优化方向</h3>
<ol>
<li><strong>多 Agent 协同</strong>:利用 <code>Microsoft Agent Framework</code> 工作流实现多智能体协作(规划-执行-验证模式)</li>
<li><strong>前端可视化</strong>:开发管理界面,用于监控会话状态与技能调用统计</li>
<li><strong>全平台发布</strong>:打包为跨平台单文件应用,并提供一键安装脚本</li>
<li><strong>支持远程下载 Skills 技能</strong></li>
<li><strong>动态添加定时任务</strong></li>
<li><strong>扩展本机命令技能</strong></li>
<li><strong>增加系统安全护栏</strong></li>
</ol>
<h2 id="相关开源框架">相关开源框架</h2>
<p>NetCoreKevin框架下的kevin.AI.AgentFramework模块<br>
基于.NET构建的企业级SaaSAI智能体应用架构,采用前后端分离设计,具备以下核心特性:</p>
<ul>
<li>AI智能体框架RAG检索增强</li>
<li>AI知识库</li>
<li>AI智能体技能集成</li>
<li>多级缓存机制</li>
<li>SignalR实时通信</li>
<li>等等......</li>
<li>项目地址:github:https://github.com/junkai-li/NetCoreKevin<br>
Gitee: https://gitee.com/netkevin-li/NetCoreKevin</li>
</ul>
<h2 id="相关文档链接">相关文档链接</h2>
<p>Microsoft Agent Framework 工作流 |<br>
Microsoft LearnMicrosoft代理框架概述 |<br>
Microsoft Learn智能体技能 |</p><br><br>
来源:https://www.cnblogs.com/net-kevin-li/p/19755870
頁: [1]
查看完整版本: 基于.NET AgentFramework开发OpenClaw智能体框架