关于 AI Chat Application with RAG and MCP Servers
此 .NET Aspire 示例将 AI 聊天与自定义 PDF 数据检索及 MCP 上下文扩展结合,面向探索 RAG 和 MCP 的开发者,并提供 GitLab 组搜索工具,支持 GitHub Models 和 OpenAI 端点。
主要功能
- 01基于上传的 PDF 内容对话
- 02从 Markdown 创建 PDF
- 03通过 MCP 工具搜索 GitLab 组
- 04使用 GitHub Models 或 OpenAI 端点
适用场景
- 01围绕上传的 PDF 内容提问
- 02将 Markdown 转成 PDF 素材
- 03按搜索模式查找 GitLab 组
- 04探索 .NET Aspire 中的 RAG 和 MCP 配置
MCP 相关
包含一个 HTTP MCP 服务,提供 WhoIs 和 GitLab SearchGroups 工具。聊天应用将这些工具用作上下文扩展。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
使用 RAG 和 MCP 服务的 AI 聊天应用
一个 .NET Aspire AI 聊天应用,演示如何使用 AI 语言模型和 Qdrant 作为向量存储,与自定义数据聊天(RAG - 事件驱动)并扩展上下文(MCP 服务)。
说明
此版本尚未部署到 Azure。完成这项小规模工作后,Web 应用(聊天和管理)、MCP 服务和 Functions 应用都将运行在 Azure Container Apps 上。通过 .NET Aspire 集成 Functions 应用仍处于
Preview阶段,目前唯一支持的部署目标是 ACA(Azure Container App)。
目录
项目概述
使用自定义数据的 AI 聊天应用可让用户通过自己的数据源(RAG 和 MCP 服务)与 AI 模型交互。它支持多个提供商,包括 GitHub Models 和 OpenAI 端点。
功能
- 使用模板提供的 2 份 PDF 与 AI 模型交互(通过 Microsoft.Extensions.AI.Templates 开箱即用)
- MCP 服务 WhoIs 工具
new - MCP 服务 GitLab SearchGroups 工具(需要 2 项用户机密)
new - 上传预先编写的 PDF,以便与 AI 模型交互时使用
new - 将 Markdown 动态转换为 PDF,以便与 AI 模型交互时使用
new
HLD

解决方案结构
MyChatApp.sln
├── MyAdminApp.Web/
├── MyChatApp.AppHost/
├── MyChatApp.ServiceDefaults/
├── MyChatApp.Web/
├── MyFunctionApp/
└── MyMcpServerHttpApi/
先决条件
-
Visual Studio 2022+ 或 Visual Studio Code
-
GitHub 账户(已启用 Copilot)
-
用于运行 Azurite 的 Docker(用于模拟 Azure Blob Storage、队列和 Azure Functions)
-
(可选,如果要使用 MCP Inspector)NodeJS
-
(可选)如果要使用 MCP SearchGroup 工具,需要 GitLab 账户
-
(可选)VS Code 的 C# Dev Kit 扩展
-
(可选,用于创建自己的项目)安装 .NET AI 模板:
dotnet new install Microsoft.Extensions.AI.Templates -
(可选,用于调试和测试 MCP 服务工具)
npx @modelcontextprotocol/inspector dotnet run -
(可选,用于确认 Blob 上传和队列)安装 Microsoft Azure Storage Explore
安装
- 克隆仓库:
git clone <your-repo-url> cd MyChatApp - 还原依赖项:
dotnet restore
配置与机密
运行前,请为所选提供商配置 API 密钥和端点。
使用 GitHub Models
- 创建不带任何范围或权限的 GitHub 个人访问令牌(PAT)。指南
- 设置机密:
dotnet user-secrets set "GitHubModels:Token" "<your-token-value>"
使用 OpenAI(通过 Azure)
- 设置连接字符串:
dotnet user-secrets set "ConnectionStrings:openai" "Endpoint=https://models.inference.ai.azure.com;Key=<your-token-value>"
MyMcpServerHttpApi(GitLab)
- 设置 GitLab PAT:
dotnet user-secrets set "GitLab:Token" "<your-token-value>" - 设置 GitLab 域:
dotnet user-secrets set "GitLab:Domain" "<your-domain-value>"
注意: 用户机密存储在源代码管理之外。在 Visual Studio 中,右键单击项目并选择“Manage User Secrets”即可直接编辑。
使用方法
运行应用程序
- Visual Studio:
- 打开
.sln文件。 - 按
Ctrl+F5或单击“Start”。
- 打开
- Visual Studio Code:
- 打开文件夹。
- 安装 C# Dev Kit 扩展。
- 在
MyChatApp.AppHost中打开Program.cs。 - 在“Debug”视图中单击“Run”。
信任本地主机证书
如果是首次运行,请信任自签名开发证书:
dotnet dev-certs https --trust
请参阅 .NET Aspire 中不受信任的本地主机证书故障排除。
示例提示词
-
Markdown 表格
获取 GitLab 组列表,并以 Markdown 表格展示,包含 name、web_url(显示为“点我”)、parent_id,以及一个表示是否有子组的表情符号。按 parent id 分组。在名称后面的方括号中包含组 id。

-
树形结构
创建一个树形结构,按 parent id 和 group id 嵌套显示各组。

-
动态创建 PDF
原始请求未返回任何内容:

这里我输入了 Markdown,随后将其转换为 PDF 并上传:

上传上述 Markdown 后的响应:

-
PDF 上传
Druperts
以下是关于 Druperts 的一些事实。这个列表中可能也有一些与 Drupert 无关的事实:
- Drupert 是一种虚构生物
- Sleepert 是用来让你在上课时间睡着的
- Chicken Jockie!
- Drupert 的作用是分散注意力
- Drupert 唯一的目的是逗你笑
- 如果有人在上课时画了一个 Drupert,而你笑了,老师很可能会批评你
-
有趣故事提示词
给我创作一个关于 Drupert 的有趣故事。不超过 5 句话。结尾必须在新的一行加上一个拥抱脸表情符号。请附上引用
部署
- 适用标准的 .NET 部署方式。若部署到云端或容器中,请确保通过环境变量或安全存储设置机密。
故障排除
- 不受信任的证书: 请参阅故障排除指南。
- 未找到机密: 请确保已按照上述说明为每个项目设置用户机密。
- Microsoft Azure Storage Explorer 安装后可查看 Blob 和队列:

- MCP Explorer 运行后可调试和测试 MCP 服务:

常见问题
问:我可以使用其他 AI 提供商吗? 答:可以,按需扩展配置和服务即可。
问:机密存储在哪里? 答:用户机密存储在源代码管理之外的本地 secrets.json 文件中。
贡献
欢迎贡献!请提交问题或拉取请求。对于重大更改,请先提交问题,讨论你的提案。
许可证
本项目基于 MIT License 授权。详情请参阅 LICENSE。
致谢
- .NET Aspire
- .NET 开发者 AI
- 项目中引用的第三方库
联系方式
如需支持或咨询,请提交问题,或通过 GitHub 联系维护者。
参考资料
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。