项目简介

这是一个来自Microsoft AI Agentic Workshop仓库的服务组件,它基于Model Context Protocol (MCP) 提供标准化接口,将内部数据源和功能(如客户数据库、知识库)暴露为可供LLM代理调用的工具(Tools)。它实现了MCP服务器规范的一部分,专注于工具和资源访问能力,通过SSE协议进行通信。

主要功能点

  • 工具托管与执行: 提供一套丰富的工具,用于查询和管理客户信息、订阅详情、账单与支付、数据使用、订单、支持工单、安全日志等。
  • 知识库检索: 提供语义搜索工具,允许LLM查询内部知识文档,获取策略、流程等信息。
  • 数据访问: 工具通过SQLite数据库 ('contoso.db') 提供结构化数据的访问能力。
  • 标准化接口: 实现MCP over SSE协议,提供标准化的JSON-RPC接口供LLM客户端调用。
  • 数据模型: 使用Pydantic定义工具的输入参数和输出结构,确保数据交换的规范性。

安装步骤

  1. 克隆仓库: 将Microsoft AI Agentic Workshop仓库克隆到本地。
    git clone https://github.com/microsoft/OpenAIWorkshop.git
    cd OpenAIWorkshop/agentic_ai
  2. 安装依赖: 安装必要的Python库,包括'fastmcp'、'uvicorn'、'sqlite3'、'dotenv'、'openai'、'faker'等。建议使用虚拟环境。
    pip install -r requirements.txt # 确保requirements.txt包含了所有依赖,或手动安装
    (注:如果需要知识库嵌入功能,还需要配置Azure OpenAI的API密钥、Endpoint和Embedding部署名称,并安装'openai'库)。
  3. 创建数据库: 运行脚本生成示例SQLite数据库 'contoso.db' 及场景描述文件。
    python backend_services/data/create_db.py
  4. 设置环境变量: 创建 '.env' 文件,配置数据库路径和(可选的)Azure OpenAI embedding信息。
    DB_PATH=./backend_services/data/contoso.db
    # 如果需要知识库嵌入,请配置以下变量
    # AZURE_OPENAI_API_KEY=your_api_key
    # AZURE_OPENAI_ENDPOINT=your_endpoint
    # AZURE_OPENAI_API_VERSION=2024-02-01
    # AZURE_OPENAI_EMBEDDING_DEPLOYMENT=your_embedding_deployment_name
  5. 运行MCP服务器: 启动MCP服务。
    python backend_services/mcp_service.py
    服务默认将在 'http://0.0.0.0:8000' 监听SSE连接。

服务器配置 (供MCP客户端使用)

为了让兼容MCP协议的LLM客户端(如Autogen、Semantic Kernel中支持MCP的Agent)能够连接并使用此服务,客户端需要以下信息来初始化其MCP连接器:

  • 服务器名称: 'Contoso Customer API as Tools'
  • 描述: 提供客户、账单、产品和知识库等工具访问服务。
  • 协议: 'sse' (Server-Sent Events)
  • 地址 (URL): 'http://<服务器地址或主机名>:8000/sse'
  • 能力声明: 客户端应能通过MCP发现服务支持的能力,此服务主要提供 'tools' 和 'resources' 能力。

MCP客户端通常会通过其自身的配置机制(如JSON文件、编程配置)来指定这些信息,例如:

{
  "type": "mcp_server",
  "name": "ContosoMCP",
  "description": "Contoso Customer Data and Tools",
  "protocol": "sse",
  "address": "http://localhost:8000/sse"
}

(请注意:上面的JSON仅为示例,实际客户端配置格式可能因客户端框架而异,但核心信息是相同的。)

基本使用方法

一旦MCP服务器运行起来,任何兼容MCP协议并配置了正确服务器地址和协议的LLM客户端都可以连接到该服务器,查询其提供的工具清单,并通过标准化的JSON-RPC请求调用这些工具,获取数据或执行操作。例如,LLM客户端可以调用 'get_customer_detail' 工具来获取指定客户的详细信息。

此仓库中的代理实现(如基于Autogen和Semantic Kernel的Agent)即是此类MCP客户端的示例,它们通过读取配置的环境变量 ('MCP_SERVER_URI') 来发现并连接此MCP服务,然后利用其暴露的工具能力来响应用户请求。

信息

分类

商业系统