MCP C# SDK如何集成LLM代码示例

360影视 日韩动漫 2025-04-27 09:33 2

摘要:Stdio:适用于本地进程间通信(如Python/Node.js调用.NET服务)SSE:基于HTTP的轻量级传输,适合Web应用场景WebSocket:实现全双工实时通信,适用于需要高频交互的场景

MCP(Model Context Protocol)作为AI领域的标准化交互协议,其核心价值在于:

1.统一接口规范:通过JSON-RPC标准定义工具调用格式,使LLM可无缝对接数据库、API等外部系统

2.安全通信机制:支持双向认证与数据加密,确保AI与外部系统交互的安全性

3.多传输方式适配:

Stdio:适用于本地进程间通信(如Python/Node.js调用.NET服务)

SSE:基于HTTP的轻量级传输,适合Web应用场景

WebSocket:实现全双工实时通信,适用于需要高频交互的场景

1. 安装和配置 MCP C# SDK

使用 NuGet 包管理器安装 MCP C# SDK。例如:

dotnet add package ModelContextProtocol

在项目中引入必要的命名空间:

using ModelContextProtocol;using ModelContextProtocol.Server;

2. 实现 MCP 服务器创建

使用 MCP C# SDK 提供的工具和方法,创建一个支持 LLM 的服务器。

示例代码:

// 程序入口配置var builder = Host.CreateApplicationBuilder(args);builder.Services .AddMcpServer .WithHttpListenerSseServerTransport // 选用SSE传输方式 .WithToolsFromAssembly; // 自动注册带[McpServerTool]特性的工具// 工具注册示例[McpServerToolType]public static class DocumentProcessor{ [McpServerTool, Description("PDF文档摘要生成")] public static async Task SummarizePdf( HttpClient httpClient, [Description("文档URL")] string url) { var content = await httpClient.GetStringAsync(url); return await LlmService.GenerateSummary(content); // 调用LLM服务 }}

3. MCP 客户端

创建客户端:使用 MCP C# SDK 创建客户端,用于与 MCP 服务器通信。

示例代码:

// 使用Microsoft.Extensions.AI集成OpenAIvar apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");var aiClient = new OpenAIClient( new ApiKeyCredential(apiKey), new OpenAIClientOptions { Endpoint = new Uri("https://api.openai.com") });// 构建带工具调用能力的LLM客户端var chatClient = new ChatClientBuilder(aiClient) .UseFunctionInvocation .Build;// 生成带工具调用指令的Promptvar prompt = """ 请总结以下PDF文档的核心内容: {{$input}} 需要调用工具时请使用:SummarizePdf(url={{$url}}) """;// 执行LLM推理var result = await chatClient.InvokeAsync(new ChatRequest( prompt, parameters: new Dictionary { { "url", "https://example.com/doc.pdf" } }));

集成模式

实现方式

适用场景

直接调用

LLM生成参数→客户端调用工具→返回结果

简单工具调用(如天气查询)

代理模式

MCP服务器封装复杂逻辑

需要状态管理的操作(如订单处理)

流水线模式

多工具串联执行

文档处理(解析→分析→生成)

5. 实现上下文管理

上下文的作用:MCP 通过上下文管理,确保 LLM 在多轮对话中保持一致性和连贯性。

上下文的传递:在每次调用工具时,将上下文信息传递给服务器,服务器根据上下文生成响应。

示例代码:

var context = new McpContext{ UserId = "user123", SessionId = "session456", PreviousMessages = new List { "上次的对话内容" }};var result = await client.CallToolWithContextAsync("GetWeather", new { location = "北京" }, context);

6.生产环境部署最佳实践

传输层优化:

高并发场景建议使用WebSocket传输,实测QPS可达800+

跨网络部署时启用gRPC传输(需自定义实现)

安全加固:

// 配置JWT认证builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Authority = "https://auth.example.com"; options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = false }; });

性能监控:

// 集成Prometheus监控builder.Services.AddMetrics(options => { options.Endpoint = new MetricsEndpointOptions("/metrics");});

未来演进方向

多模态支持:集成图像识别、语音处理等能力

边缘计算优化:通过ONNX Runtime实现模型量化部署

学习集成:支持安全的多方数据协作

来源:opendotnet

相关推荐