项目简介

'.NET AI Workshop' 仓库是微软为开发者提供的 AI 应用构建指南,其中包含了 Model Context Protocol (MCP) 服务器的实现示例和开发教程。这些 MCP 服务器通过标准化方式向大型语言模型(LLM)客户端提供上下文信息和外部功能调用,支持资源托管、工具执行和 Prompt 模板定义。本项目展示了如何使用 .NET 框架构建基于 Stdio 传输协议的 MCP 服务器,并注册可供 LLM 调用的工具,如天气查询、随机数生成和模拟业务订单管理等。

主要功能点

  • 工具注册与执行:服务器能够注册并托管多种工具,LLM 客户端可以通过 JSON-RPC 协议调用这些工具以执行特定功能,例如:
    • 获取当前天气或未来天气预报。
    • 生成指定范围内的随机数。
    • 查询模拟的 Contoso 业务订单详情、按客户搜索订单或检查产品库存。
  • 上下文信息提供:通过执行工具,服务器能够向 LLM 提供动态生成的、与特定查询相关的上下文数据。
  • JSON-RPC 通信:服务器通过 JSON-RPC 协议与 LLM 客户端进行通信,接收请求并返回结构化响应。
  • Stdio 传输协议:默认使用标准输入/输出(Stdio)作为通信通道,易于集成和调试。
  • 可扩展的 .NET 框架:基于 .NET Host Application Builder 构建,便于扩展和添加新的工具及服务。

安装步骤

  1. 克隆仓库
    git clone https://github.com/dotnet-presentations/ai-workshop.git
    cd ai-workshop
  2. 安装 .NET SDK:确保您已安装 .NET 10.0 SDK(preview 6 或更高版本),这是 MCP 服务器开发所必需的。 可以通过访问 dotnet.microsoft.com/download 获取最新版本。
  3. 安装所需的 .NET AI 模板
    dotnet new install Microsoft.Extensions.AI.Templates
    这些模板包含了 MCP 服务器开发所需的基础结构和依赖。

服务器配置(针对 MCP 客户端)

MCP 服务器本身是可执行的应用程序。MCP 客户端需要知道如何启动这些服务器。以下是两个示例 MCP 服务器的配置信息,您的 MCP 客户端可以使用这些信息来启动并连接到它们:

1. 天气工具 MCP 服务器 ('MyMcpServer')

  • 服务器名称: MyMcpServer
  • 描述: 提供天气查询和随机数生成功能的 MCP 服务器。
  • MCP 客户端配置:
    • 'command': 'dotnet' (用于执行 .NET 应用程序)
    • 'args': 'run --project "Part 7 - MCP Server Basics/MyMcpServer/MyMcpServer.csproj"' (指定要运行的项目路径)

2. 业务订单 MCP 服务器 ('ContosoOrdersMcpServer')

  • 服务器名称: ContosoOrdersMcpServer
  • 描述: 提供模拟 Contoso 业务订单查询和库存管理功能的 MCP 服务器。
  • MCP 客户端配置:
    • 'command': 'dotnet'
    • 'args': 'run --project "Part 8 - Enhanced MCP Server/ContosoOrdersMcpServer/ContosoOrdersMcpServer.csproj"'

请注意: 上述 'args' 中的项目路径是相对于 'ai-workshop' 仓库根目录的。在实际使用时,请确保客户端能够正确解析并执行这些命令。

基本使用方法

一旦 MCP 客户端配置并启动了服务器,LLM 客户端即可通过 JSON-RPC 调用服务器注册的工具。

例如,对于 'MyMcpServer':

  • LLM 可能会调用名为 'GetCurrentWeather' 的工具,并提供 'city' 参数(例如,'"London"'),服务器将返回模拟的当前天气信息。
  • LLM 也可以调用 'GetRandomNumber' 工具,提供 'min' 和 'max' 参数,获取一个随机数。

对于 'ContosoOrdersMcpServer':

  • LLM 可以调用 'GetOrderDetails' 工具,提供 'orderId' 参数(例如,'"12345"'),服务器将返回订单的详细信息。
  • 调用 'SearchOrdersByCustomer' 工具,提供 'customerName' 参数,获取该客户的所有订单列表。
  • 调用 'GetProductInventory' 工具,提供 'productName' 参数,查询产品的库存状态。

这些服务器作为独立的进程运行,与 LLM 客户端通过标准 I/O 进行通信,实现 AI 应用的上下文扩展和功能增强。

信息

分类

AI与计算