AgileAI - 一个新的 .NET AI 库
<h1 id="agileai在-skmaf-之外我想做一个更顺手的-net-ai-组件">AgileAI:在 SK、MAF 之外,我想做一个更顺手的 .NET AI 组件</h1><p>如果把 .NET 生态里的 AI 组件放在一起看,大家最熟悉的通常还是 <strong>Semantic Kernel</strong>,去年开始微软也在持续推进 <strong>Microsoft Agent Framework(MAF)</strong>。但在我自己的实践里,这条路线虽然值得关注,却并不总是足够顺手:MAF 长期带着比较明显的 preview / prerelease 色彩,而真正拿它去快速拼一个能跑、能扩展、还能继续往产品层走的东西,体验也没有我期待得那么轻。</p>
<p>于是我开始想:</p>
<blockquote>
<p><strong>在 .NET 世界里,除了 SK 和 MAF 之外,能不能有另一种更轻量、更直接、更适合快速做 AI 应用和 Agent 的组件化方案?</strong></p>
</blockquote>
<p>这就是 <strong>AgileAI</strong> 的起点。<br>
对我来说,AgileAI 也是一次 AI 编程实验。整个项目<strong>从头到尾全部由 AI 完成</strong>,我本人<strong>没有手写一行代码</strong>。而它给出的答案是:<strong>可以,而且已经接近能持续演进的程度。</strong></p>
<hr>
<h2 id="agileai-是什么">AgileAI 是什么?</h2>
<p>一句话说,<strong>AgileAI 是一个面向 .NET 的 AI SDK / Agent 组件,同时仓库里还自带一个本地优先的 AI 工作台 AgileAI.Studio</strong>。</p>
<h2 id="懒的读文字的可以看视频">懒的读文字的可以看视频</h2>
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=116353633617781&bvid=BV17nSQBeERY&cid=37271570061&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
<p>它大致分成两层:</p>
<h3 id="第一层底层-sdk--runtime">第一层:底层 SDK / Runtime</h3>
<p>这一层主要用来:</p>
<ul>
<li>快速接入不同 LLM</li>
<li>管理对话和流式输出</li>
<li>支持 Tool Calling</li>
<li>管理 Session 持久化</li>
<li>支持 Skill</li>
<li>提供 Agent Runtime</li>
</ul>
<h3 id="第二层上层产品-agileaistudio">第二层:上层产品 AgileAI.Studio</h3>
<p>这一层主要负责:</p>
<ul>
<li>可视化管理模型连接</li>
<li>创建 Agent</li>
<li>发起和保存对话</li>
<li>审批本地工具执行</li>
<li>展示工具/技能使用情况</li>
<li>作为一个真正的本地 AI 工作台运行</li>
</ul>
<p>换句话说,它既可以被当成一个 <strong>.NET AI 开发组件</strong>,也可以被当成一个 <strong>完整可运行的本地 AI 产品原型</strong>。</p>
<hr>
<h2 id="agileai-能做什么">AgileAI 能做什么?</h2>
<p>如果只看结果,AgileAI 主要做了两件事:</p>
<h3 id="1快速对接-llm">1)快速对接 LLM</h3>
<p>AgileAI 当前支持的 Provider 包括:</p>
<ul>
<li>OpenAI Chat Completions</li>
<li>OpenAI-compatible Chat Completions</li>
<li>Azure OpenAI</li>
<li>OpenAI Responses API</li>
<li>Gemini</li>
<li>Claude</li>
</ul>
<p>如果你在 .NET 里做 AI 应用,不想每换一个模型供应商就改一套代码,AgileAI 提供了一层统一抽象,让你可以用相对一致的方式发起请求、处理响应、接流式输出和工具调用。</p>
<p>它底层的核心接口围绕这些概念组织:</p>
<ul>
<li><code>IChatClient</code></li>
<li><code>IChatModelProvider</code></li>
<li><code>IChatSession</code></li>
<li><code>IAgentRuntime</code></li>
</ul>
<p>这套抽象的意义,不只是“写得优雅”,而是实实在在地降低了切 Provider、切模型和做统一封装的成本。</p>
<h3 id="2快速打造-agent">2)快速打造 Agent</h3>
<p>除了“调用模型”,AgileAI 更想解决的是“怎么快速搭一个 Agent”。</p>
<p>所以它在核心层里内建了这些东西:</p>
<ul>
<li>多轮对话 <code>ChatSession</code></li>
<li>流式响应</li>
<li>Tool Calling</li>
<li>Session 持久化</li>
<li>Skill 选择和延续</li>
<li>Middleware 风格的执行拦截</li>
<li>本地工具注册与调用</li>
</ul>
<p>它不是只解决“问模型一句话”,而是解决“让 Agent 真正运行起来”的那一层。</p>
<hr>
<h2 id="一个最简单的使用示例">一个最简单的使用示例</h2>
<p>如果你想快速感受 AgileAI 的风格,可以看一个非常典型的用法:先注册 Provider,然后创建 <code>ChatSession</code>,最后直接发请求。</p>
<p>下面这个例子来自文件系统工具 sample,挺能代表它的思路:</p>
<pre><code class="language-csharp">using AgileAI.Abstractions;
using AgileAI.Core;
using AgileAI.DependencyInjection;
using AgileAI.Extensions.FileSystem;
using AgileAI.Providers.OpenAICompatible.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddAgileAI();
services.AddOpenAICompatibleProvider(options =>
{
options.ProviderName = "openapi";
options.ApiKey = Environment.GetEnvironmentVariable("OPENAI_COMPATIBLE_API_KEY")!;
options.BaseUrl = Environment.GetEnvironmentVariable("OPENAI_COMPATIBLE_BASE_URL")!;
options.RelativePath = "chat/completions";
});
var serviceProvider = services.BuildServiceProvider();
var chatClient = serviceProvider.GetRequiredService<IChatClient>();
var toolRegistry = new InMemoryToolRegistry()
.RegisterFileSystemTools(options =>
{
options.RootPath = @"D:\workspace\MyProject";
options.MaxReadCharacters = 12000;
});
var session = new ChatSessionBuilder(chatClient, "openapi:gpt-5.4")
.WithToolRegistry(toolRegistry)
.Build();
var response = await session.SendAsync(
"Use search_files to find mentions of AgileAI.Studio, then use read_files_batch to inspect the best matching files and summarize them.");
Console.WriteLine(response.Message?.TextContent);
</code></pre>
<p>这个例子很能说明 AgileAI 的定位:</p>
<ul>
<li>先接上模型</li>
<li>再注册工具</li>
<li>然后直接进入 Agent 式调用</li>
</ul>
<p>中间没有太重的 ceremony,也没有一大堆必须先理解完才能开始用的框架概念。它的目标很明确:</p>
<blockquote>
<p><strong>尽快跑起来。</strong></p>
</blockquote>
<hr>
<h2 id="内置-tool不仅能调用还考虑了安全边界">内置 Tool:不仅能调用,还考虑了安全边界</h2>
<p>AgileAI 里很值得单独拿出来说的一块,是它的 <strong>tool 系统</strong>。</p>
<h3 id="文件系统工具">文件系统工具</h3>
<p>仓库里已经实现了一组本地文件系统工具,包括:</p>
<ul>
<li><code>list_directory</code></li>
<li><code>search_files</code></li>
<li><code>read_file</code></li>
<li><code>read_files_batch</code></li>
<li><code>write_file</code></li>
</ul>
<p>除此之外,源码里其实还实现了更多文件操作工具,比如:</p>
<ul>
<li><code>create_directory</code></li>
<li><code>move_file</code></li>
<li><code>patch_file</code></li>
<li><code>delete_file</code></li>
<li><code>delete_directory</code></li>
</ul>
<p>它不只是一个“让模型看文件”的小插件,而是已经开始具备比较完整的本地工作区操作能力。</p>
<h3 id="run_local_command"><code>run_local_command</code></h3>
<p>这是 Studio 里最关键的一个工具之一。<br>
它允许 Agent 请求执行本地命令,比如 shell / bash / pwsh 命令。</p>
<p>但这里最重要的不是“它能执行命令”,而是:</p>
<blockquote>
<p><strong>它不是直接执行,而是走审批流程。</strong></p>
</blockquote>
<p>也就是:</p>
<ul>
<li>模型提出命令执行请求</li>
<li>系统暂停当前工具流程</li>
<li>用户看到待执行命令</li>
<li>用户手动批准或拒绝</li>
<li>批准后再继续后续执行</li>
</ul>
<p>这个设计很关键。因为 AI Tool Calling 真正落地时,最大的风险之一就是<strong>本地执行能力</strong>。AgileAI 没有回避这件事,而是把它做成了显式审批流程。</p>
<h3 id="web_fetch"><code>web_fetch</code></h3>
<p>Studio 里还内置了一个 <code>web_fetch</code> 工具,可以让 Agent 拉取网页内容。</p>
<p>这类工具看起来简单,但很有用。只要进入 Agent 场景,你很快就会遇到“需要主动获取外部信息”的问题。与其让调用端自己绕很多逻辑,不如把它收敛成统一的 tool 能力。</p>
<hr>
<h2 id="skill-支持让-agent-有角色能力包">Skill 支持:让 Agent 有“角色能力包”</h2>
<p>AgileAI 的另一个亮点,是它支持 <strong>Skill</strong>。</p>
<p>这里的 Skill,不是那种非常重的插件生态,而更像是:</p>
<blockquote>
<p><strong>一组基于本地文件、带有元信息和提示约束的能力包。</strong></p>
</blockquote>
<p>仓库里 Skill 的实现包括:</p>
<ul>
<li>本地 Skill 文件加载</li>
<li>Skill Manifest 解析</li>
<li>Skill Registry</li>
<li>Skill Planner</li>
<li>Skill Continuation Policy</li>
<li>Prompt-based Skill Execution</li>
</ul>
<hr>
<h2 id="agileaistudio全功能演示项目">AgileAI.Studio:全功能演示项目</h2>
<p>如果说前面的 AgileAI 更像“底层能力”,那 <strong>AgileAI.Studio</strong> 就是它的产品化形态。</p>
<p>Studio 的技术栈很直接:</p>
<ul>
<li>后端:ASP.NET Core + EF Core + SQLite</li>
<li>前端:Vue 3 + Vite + Pinia + Naive UI</li>
<li>通信方式:REST + SSE 流式响应</li>
<li>测试:Playwright</li>
</ul>
<p>它目前已经能完成这些事情:</p>
<ul>
<li>配置 Provider Connection</li>
<li>添加和测试模型</li>
<li>创建 Agent</li>
<li>管理会话</li>
<li>流式聊天</li>
<li>显示 Tool 使用记录</li>
<li>显示 Skill 使用状态</li>
<li>对 <code>run_local_command</code> 进行审批</li>
<li>用 <code>web_fetch</code> 拉网页内容</li>
</ul>
<p>也就是说,Studio 已经不是一个“摆拍式 Demo UI”,而是一个有真实工作流的本地 AI Workspace 雏形。</p>
<hr>
<h2 id="几张-studio-截图">几张 Studio 截图</h2>
<p>仓库里已经带了几张 Playwright 生成的截图,正好能对应它现在的几个主要页面。</p>
<h3 id="models-页面">Models 页面</h3>
<p>这里可以管理模型连接和模型配置。<br>
如果你要做一个真正能切换不同 Provider 的 AI 工作台,这一页其实是基础中的基础。</p>
<p><img src="https://img2024.cnblogs.com/blog/36200/202604/36200-20260406221751393-642392461.png" alt="ScreenShot_2026-04-06_221658_564" loading="lazy"></p>
<h3 id="agents-页面">Agents 页面</h3>
<p>这一页是 Agent 的核心配置区。<br>
你可以在这里定义:</p>
<ul>
<li>Agent 名称</li>
<li>Prompt</li>
<li>温度</li>
<li>最大 Token</li>
<li>可用 tools</li>
<li>可用 skills</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/36200/202604/36200-20260406221738121-787020850.png" alt="ScreenShot_2026-04-06_221719_709" loading="lazy"></p>
<h3 id="chat-页面">Chat 页面</h3>
<p>这是 Studio 最像“产品”的部分。不仅能聊天,还能看到:</p>
<ul>
<li>流式回复</li>
<li>Agent 当前使用的 skill</li>
<li>用过哪些 tools</li>
<li>工具审批状态</li>
<li>历史会话列表</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/36200/202604/36200-20260406221557699-1333891444.png" alt="ScreenShot_2026-04-06_024944_006" loading="lazy"></p>
<hr>
<h2 id="结语">结语</h2>
<p>如果你最近正打算使用 .NET 来开发 Agent 或许可以试试这个新的框架 AgileAI 。有什么意见或者建议都可以给我提 Issue。</p>
<p>👉👉👉 https://github.com/kklldog/AgileAI</p>
</div>
<div id="MySignature" role="contentinfo">
<div id="AllanboltSignature">
<p id="PSignature" style="border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed; border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; font-family: 微软雅黑; font-size: 11px">
QQ群:1022985150 VX:kklldog 一起探讨学习.NET技术
<br>
作者:Agile.Zhou(kklldog)
<br>
出处:http://www.cnblogs.com/kklldog/
<br>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
</p>
</div><br><br>
来源:https://www.cnblogs.com/kklldog/p/19827135/agile-ai
頁:
[1]