MCP数据库集成简介 本实验内容 本入门实验全面介绍了如何构建与数据库集成的模型上下文协议(MCP)服务器。通过Zava零售分析案例(https://github.com/microsoft/MCP-Server-and-PostgreSQL-Sample-Retail),您将了解业务场景、技术架构以及实际应用。 概述 模型上下文协议(MCP)使得AI助手能够安全地实时访问和交互外部数据源。结合数据库集成后,MCP为数据驱动的AI应用解锁了强大的功能。 本学习路径将教您构建生产级MCP服务器,通过PostgreSQL将AI助手连接到零售销售数据,同时实现企业模式,如行级安全性、语义搜索和多租户数据访问。
本入门实验全面介绍了如何构建与数据库集成的模型上下文协议(MCP)服务器。通过Zava零售分析案例(https://github.com/microsoft/MCP-Server-and-PostgreSQL-Sample-Retail),您将了解业务场景、技术架构以及实际应用。
**模型上下文协议(MCP)**使得AI助手能够安全地实时访问和交互外部数据源。结合数据库集成后,MCP为数据驱动的AI应用解锁了强大的功能。
本学习路径将教您构建生产级MCP服务器,通过PostgreSQL将AI助手连接到零售销售数据,同时实现企业模式,如行级安全性、语义搜索和多租户数据访问。
完成本实验后,您将能够:
现代AI助手功能强大,但在处理现实世界业务数据时面临显著局限:
| 挑战 | 描述 | 业务影响 |
|---|---|---|
| 静态知识 | AI模型基于固定数据集训练,无法访问当前业务数据 | 过时的洞察,错失机会 |
| 数据孤岛 | 信息锁定在数据库、API和AI无法访问的系统中 | 分析不完整,工作流程分散 |
| 安全限制 | 直接数据库访问带来安全和合规问题 | 部署受限,数据需手动准备 |
| 复杂查询 | 业务用户需要技术知识才能提取数据洞察 | 采用率降低,流程低效 |
模型上下文协议通过以下方式解决这些挑战:
在整个学习路径中,我们将为Zava零售构建一个MCP服务器,这是一个虚构的DIY零售连锁店,拥有多个门店位置。此场景展示了企业级MCP实施的实际应用。
Zava零售运营:
门店经理和高管需要AI驱动的分析工具来:
MCP服务器必须提供:
我们的MCP服务器实现了针对数据库集成优化的分层架构:
┌─────────────────────────────────────────────────────────────┐ │ VS Code AI Client │ │ (Natural Language Queries) │ └─────────────────────┬───────────────────────────────────────┘ │ HTTP/SSE ▼ ┌─────────────────────────────────────────────────────────────┐ │ MCP Server │ │ ┌─────────────────┐ ┌─────────────────┐ ┌───────────────┐ │ │ │ Tool Layer │ │ Security Layer │ │ Config Layer │ │ │ │ │ │ │ │ │ │ │ │ • Query Tools │ │ • RLS Context │ │ • Environment │ │ │ │ • Schema Tools │ │ • User Identity │ │ • Connections │ │ │ │ • Search Tools │ │ • Access Control│ │ • Validation │ │ │ └─────────────────┘ └─────────────────┘ └───────────────┘ │ └─────────────────────┬───────────────────────────────────────┘ │ asyncpg ▼ ┌─────────────────────────────────────────────────────────────┐ │ PostgreSQL Database │ │ ┌─────────────────┐ ┌─────────────────┐ ┌───────────────┐ │ │ │ Retail Schema │ │ RLS Policies │ │ pgvector │ │ │ │ │ │ │ │ │ │ │ │ • Stores │ │ • Store-based │ │ • Embeddings │ │ │ │ • Customers │ │ Isolation │ │ • Similarity │ │ │ │ • Products │ │ • Role Control │ │ Search │ │ │ │ • Orders │ │ • Audit Logs │ │ │ │ │ └─────────────────┘ └─────────────────┘ └───────────────┘ │ └─────────────────────┬───────────────────────────────────────┘ │ REST API ▼ ┌─────────────────────────────────────────────────────────────┐ │ Azure OpenAI │ │ (Text Embeddings) │ └─────────────────────────────────────────────────────────────┘
| 组件 | 技术 | 用途 |
|---|---|---|
| MCP框架 | FastMCP (Python) | 现代MCP服务器实现 |
| 数据库 | PostgreSQL 17 + pgvector | 关系数据与向量搜索 |
| AI服务 | Azure OpenAI | 文本嵌入和语言模型 |
| 容器化 | Docker + Docker Compose | 开发环境 |
| 云平台 | Microsoft Azure | 生产部署 |
| IDE集成 | VS Code | AI聊天和开发工作流 |
| 工具 | 用途 |
|---|---|
| asyncpg | 高性能PostgreSQL驱动 |
| Pydantic | 数据验证和序列化 |
| Azure SDK | 云服务集成 |
| pytest | 测试框架 |
| Docker | 容器化和部署 |
| 服务 | Azure资源 | 用途 |
|---|---|---|
| 数据库 | Azure Database for PostgreSQL | 托管数据库服务 |
| 容器 | Azure Container Apps | 无服务器容器托管 |
| AI服务 | Azure AI Foundry | OpenAI模型和端点 |
| 监控 | Application Insights | 可观察性和诊断 |
| 安全 | Azure Key Vault | 密钥和配置管理 |
让我们探索不同用户如何与我们的MCP服务器交互:
用户:Sarah,西雅图门店经理
目标:分析上一季度的销售表现
自然语言查询:
"显示我门店在2024年第四季度收入最高的前10种产品"
发生了什么:
用户:Mike,库存经理
目标:找到与客户需求类似的产品
自然语言查询:
"我们有哪些产品类似于‘用于户外使用的防水电连接器’?"
发生了什么:
用户:Jennifer,区域经理
目标:比较所有门店的销售表现
自然语言查询:
"比较过去6个月所有门店的类别销售情况"
发生了什么:
我们的实现优先考虑企业级安全性:
PostgreSQL RLS确保数据隔离:
-- Store managers see only their store's data CREATE POLICY store_manager_policy ON retail.orders FOR ALL TO store_managers USING (store_id = get_current_user_store()); -- Regional managers see multiple stores CREATE POLICY regional_manager_policy ON retail.orders FOR ALL TO regional_managers USING (store_id = ANY(get_user_store_list()));
每个MCP连接包括:
多层安全措施:
完成本入门后,您应该了解:
✅ MCP价值主张:MCP如何连接AI助手与现实世界数据
✅ 业务背景:Zava零售的需求和挑战
✅ 架构概述:关键组件及其交互方式
✅ 技术栈:学习路径中使用的工具和框架
✅ 安全模型:多租户数据访问和保护
✅ 使用模式:实际查询场景和工作流程
准备深入学习了吗?继续学习:
了解MCP服务器架构模式、数据库设计原则以及支持我们零售分析解决方案的详细技术实现。
免责声明:这是一个使用虚构零售数据的学习练习。在生产环境中实施类似解决方案时,请始终遵循您组织的数据治理和安全政策。
免责声明:
本文档使用AI翻译服务 Co-op Translator 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。