BotSharp + MCP 三步实现智能体开发
<p>1. 简介</p><p><strong>1.1 什么是MCP</strong></p><p><strong>Model Context Protocol(MCP)<strong>模型上下文协议是一种标准化协议,它让大模型能够更容易地和外部的数据、工具连接起来。你可以把MCP想象成一个通用的插头或者接口,就像USB-C一样,不管是什么设备,只要插上这个接口,就能和电脑、充电器等连接起来。</strong></strong></p><p><img width="853" height="644" title="image" style="display: inline; background-image: none" alt="image" src="https://img2023.cnblogs.com/blog/510/202504/510-20250404155827655-974780996.png" border="0"></p><p>注意,它连接的不是物理设备,而是AI模型和外部的数据源、工具等。有了MCP,AI模型就能更方便地获取外部的信息,完成更多的任务。比如,通过MCP,AI模型可以操作电脑读写文件,或者模拟浏览器操作等。</p><p><strong>1.2 为什么需要MCP</strong></p><p>首先,MCP提供了一个标准化的接口,使得AI模型能够轻松地与各种外部工具和数据源进行交互,无需为每个工具或数据源单独开发集成代码。</p><p>其次,MCP还解决了数据孤岛问题,通过统一协议连接分散的数据源,使AI模型能够实时访问和利用最新的数据。</p><p>总的来说,MCP就像是一个桥梁,让AI模型与外部世界更好地连接起来,从而发挥出更大的价值和潜力。</p><p><strong>1.3 .NET与MCP架构</strong></p><p><img width="854" height="472" title="image" style="display: inline; background-image: none" alt="image" src="https://img2023.cnblogs.com/blog/510/202504/510-20250404155828574-42552176.png" border="0"></p><ul><li><p>客户端/服务器层:McpClient负责处理客户端操作,而McpServer则管理服务器端协议操作。两者都利用McpSession来进行通信管理。</p></li><li><p>会话层(McpSession):通过DefaultMcpSession实现来管理通信模式和状态。</p></li><li><p>传输层(McpTransport):处理JSON-RPC 2.0消息的序列化和反序列化,并支持多种传输实现。</p></li></ul><hr><p>MCP客户端是模型上下文协议(MCP)架构中的关键组件,负责建立和管理与MCP服务器的连接。它实现了协议的客户端部分</p><p></p><p></p><hr><p></p><p></p><p>MCP服务器是模型上下文协议(MCP)架构中的基础组件,它为客户端提供工具、资源和功能。它实现了协议的服务器端部分。</p><p>BotSharp 提供了非常方便的进行 MCP 的集成。接下来,我们将详细的完成一个完整的MCP应用案例。</p><p><strong>2. 实战案例</strong></p><p><strong>2.1 服务端开发</strong></p><p>我们将在 MCP 服务端提供3个外部功能:获取pizza 价格、下订单和支付。这里我们使用MCP C# SDK来实现ASP.NET Core的MCP SSE Server,顾名思义它就是使用SSE传输方式。</p><p>(1)创建一个.NET 8.0 ASP.NET WebAPI应用,假设命名为:BotSharp.PizzaBot.MCPServer</p><p>(2)安装MCP SDK,添加2个nuget 包:</p><p><PackageReference Include="ModelContextProtocol" /><br><PackageReference Include="ModelContextProtocol.AspNetCore" /></p><p>(3)创建一个Tools目录,然后添加3个工具,我们以MakePayment 为例做个介绍:</p><p>using ModelContextProtocol.Server;<br>
using System.ComponentModel;<br>
using System.ComponentModel.DataAnnotations;</p>
<p>namespace BotSharp.PizzaBot.MCPServer.Tools;</p>
<p><br>
public static class MakePayment<br>
{<br> <br> public static string Make_Payment(<br> string order_number,<br> int total_amount)<br> {<br> if (order_number is null)<br> {<br> throw new McpServerException("Missing required argument 'order_number'");<br> }<br> if (order_number is null)<br> {<br> throw new McpServerException("Missing required argument 'total_amount'");<br> }<br> return "Payment proceed successfully. Thank you for your business. Have a great day!";<br> }<br>
}<br>
</p><p>可以看到基于SDK提供的Attribute,可以方便地将其指定为MCP Server Tools<br>
</p><p>(4)修改Program.cs设置为启动MCP Server</p><p>同样,也是很方便地就完成了MCP Server的创建,重点关注WithToolsFromAssembly这个扩展方法,它会扫描程序集中添加了McpServerTool标签的类进行注册。</p><p>var builder = WebApplication.CreateBuilder(args);<br>
builder.Services.AddMcpServer()<br> .WithToolsFromAssembly();<br>
var app = builder.Build();</p>
<p>app.MapGet("/", () => "This is a test server with only stub functionality!");<br>
app.MapMcp();</p>
<p>app.Run(); </p><p>这时我们已经完成了MCP Server的创建,可以把它启动起来了。</p><p>(5)测试MCP Server</p><p>但是,要完成测试MCP Server,我们可以用官方的测试工具MCP Inspector。MCP Inspector 是专为 Model Context Protocol(MCP)服务器设计的交互式调试工具,支持开发者通过多种方式快速测试与优化服务端功能。</p><p>无需安装即可通过 npx 直接运行 Inspector:npx @modelcontextprotocol/inspector </p><p><img width="950" height="497" title="image" style="display: inline; background-image: none" alt="image" src="https://img2023.cnblogs.com/blog/510/202504/510-20250404155829693-589115939.png" border="0"></p><p>2.2 Botsharp 中使用MCP Server</p><p>在Botsharp 程序中添加 MCP Server的配置:</p><p>"MCP": {<br> "Enabled": true,<br> "McpClientOptions": {<br> "ClientInfo": {<br> "Name": "SimpleToolsBotsharp",<br> "Version": "1.0.0"<br> }<br> },<br> "McpServerConfigs": [<br> {<br> "Id": "PizzaServer",<br> "Name": "PizzaServer",<br> "TransportType": "sse",<br> "TransportOptions": [],<br> "Location": "http://localhost:58905/sse"<br> }<br> ]<br>
}<br>
</p><p>McpServerConfigs 是一个宿主,可以支持配置多个MCP Server,Botsharp 有一个MCP集成的核心模块BotSharp.Core.MCP, 目前已经实现将MCP Server的 Tools 注册为BotSharp的IFunctionCallback ,然后就可以在具体的Agent 上配置对应的工具McpToolAdapter。</p><p><img width="587" height="733" title="image" style="display: inline; background-image: none" alt="image" src="https://img2023.cnblogs.com/blog/510/202504/510-20250404155831181-1035922077.png" border="0"></p><p>我们在测试的示例是BotSharp 的经典披萨示例,将原来的函数调用工具的相关定义移到MCP Server, 我就把披萨示例中的智能体Order 的工具get_pizza_price 和place_an_order 改成MCP Tools,把原来的代码注释了,配置上改成用McpTool:</p><p><img width="588" height="284" title="image" style="display: inline; background-image: none" alt="image" src="https://img2023.cnblogs.com/blog/510/202504/510-20250404155832493-1424253490.png" border="0"></p><p>智能体Order的McpTool的配置</p><p><img width="597" height="325" title="image" style="display: inline; background-image: none" alt="image" src="https://img2023.cnblogs.com/blog/510/202504/510-20250404155833538-1714713868.png" border="0"></p><p>我们也可以通过BotSharp的前端UI 来修改:</p><p><img width="598" height="568" title="image" style="display: inline; background-image: none" alt="image" src="https://img2023.cnblogs.com/blog/510/202504/510-20250404155834719-1478553619.png" border="0"></p><p>到这里我们就可以在BotSharp 中使用MCP Tools。具体是怎么用的,可以看Order 智能体的例程提示词:</p><p>You are now a Pizza Ordering agent, and you can help customers order a pizza according to the user's preferences.</p>
<p>Follow below step to place order:<br>
1: Ask user preferences, call function get_pizza_types to provide the variety of pizza options.<br>
2: Confirm with user the pizza type and quantity.<br>
3: Call function place_an_order to purchase.<br>
4: Ask user how to pay for this order.</p>
<p>Use below information to help ordering process:<br>
* Today is {{current_date}}, the time now is {{current_time}}, day of week is {{current_weekday}}.</p><p>测试结果</p><p><img width="846" height="499" title="image" style="display: inline; background-image: none" alt="image" src="https://img2023.cnblogs.com/blog/510/202504/510-20250404155835995-1464545549.png" border="0"></p><p>成功!!! <br>
</p><p><br></p><h1>总结</h1><p> 本文介绍了MCP的基本概念和工作模式,然后演示了如何通过MCP C# SDK创建基于ASP.NET WebAPI创建SSE Server,在Botsharp中如何使用MCP Tools,相信会对你有所帮助。如果你也是.NET程序员希望参与AI应用的开发,那就快快了解和使用基于Botsharp + MCP C# SDK 的生态组件库吧。</p><p>示例源码在Botsharp github仓库的PR:https://github.com/SciSharp/BotSharp/pull/994 ,很快就会合并到master。<br>
</p><p><br></p><p>相关资源:</p><ul><li>MCP 资源:https://github.com/SciSharp/Awesome-DotNET-MCP</li></ul>
</div>
<div id="MySignature" role="contentinfo">
<p>欢迎大家扫描下面二维码成为我的客户,扶你上云</p>
<img src="https://images.cnblogs.com/cnblogs_com/shanyou/57459/o_220125090408_%E9%82%80%E8%AF%B7%E4%BA%8C%E7%BB%B4%E7%A0%81-258px.jpeg" width="170"><br><br>
来源:https://www.cnblogs.com/shanyou/p/18809051
頁:
[1]