使用说明

项目简介

本项目是一个示例,演示了如何利用 Model Context Protocol (MCP) 服务器将 AWS Bedrock 的强大语言模型能力与关系型数据库(PostgreSQL 和 SQLite)集成。通过 MCP 服务器,用户可以使用自然语言向数据库提问,Bedrock 模型理解问题并转化为数据库查询,MCP 服务器负责执行查询并返回结果,从而实现便捷的数据库自然语言交互。

主要功能点

  • AWS Bedrock 集成: 利用 Bedrock Converse API 和 Claude Sonnet 模型实现自然语言理解和生成。
  • 数据库集成 (PostgreSQL & SQLite): 支持连接和查询 RDS PostgreSQL 和 SQLite 数据库。
  • 自然语言查询: 允许用户使用自然语言提问,无需编写 SQL 语句即可查询数据库。
  • MCP 服务器: 作为桥梁,处理与数据库的交互,并以 MCP 标准协议与客户端通信。
  • 工具注册与执行: MCP 服务器注册数据库查询工具,Bedrock 模型可以调用这些工具来执行数据库操作。
  • 安全访问控制: 通过 MCP 服务器管理数据库连接和权限,提供更安全的数据访问方式。
  • 可扩展架构: 展示了如何构建可扩展的 GenAI 数据库应用的基础架构。

安装步骤

  1. 克隆仓库

    git clone https://github.com/aws-samples/sample-for-bedrock-integration-with-database-mcp-server
    cd sample-for-bedrock-integration-with-database-mcp-server
  2. 配置 AWS CLI 和 Bedrock 访问

    • 确保已配置 AWS CLI 并拥有访问 Bedrock 模型的权限。
    • 使用 'aws configure' 命令配置 AWS 凭证和区域(确保是 Bedrock 可用的区域)。
  3. 安装 Node.js 和 AWS CDK (可选)

    • 虽然本示例主要使用 Python,但 PostgreSQL MCP 服务器依赖 Node.js 环境。请确保已安装 Node.js (v10.13.0 或更高版本)。
    • AWS CDK 是可选的,本示例不直接使用 CDK,但安装 CDK 可能有助于某些依赖的解决。
    npm install -g aws-cdk
  4. 创建并激活 Python 虚拟环境

    python3 -m venv .venv
    source .venv/bin/activate  # Linux/macOS
    # .venv\Scripts\activate  # Windows
  5. 安装 Python 依赖

    pip install -r requirements.txt
  6. 安装 PostgreSQL MCP 服务器 (如果使用 PostgreSQL)

    npm install -g @modelcontextprotocol/server-postgres
    pip install mcp psycopg2-binary
  7. 下载 AWS RDS 根证书 (如果使用 PostgreSQL)

  8. 配置数据库连接信息

    • 修改 'src/config/dbconfig.ini' 文件,填入您的 PostgreSQL 数据库连接信息(如果使用 PostgreSQL):
      [rdspostgresql]
      db_user = "您的数据库用户名"
      db_password = "您的数据库密码"  ; 请务必添加数据库密码
      db_host = "您的数据库主机地址"
      db_port = "5432"
      db_name = "您的数据库名称"
      ssl_cert_path = "/证书路径/global-bundle.pem"  ; 替换为证书文件的实际路径
    • 如果使用 SQLite,默认情况下会在 'src/data' 目录下创建 'mymcpdb.db' 文件。您也可以通过修改 'src/config/database_config.py' 文件中的 '_get_sqlite_config' 函数来指定现有的 SQLite 数据库文件路径。

服务器配置

本示例中,MCP 服务器的启动命令和参数由 'src/factory/server.py' 文件中的 'MCPServerFactory' 类动态生成,并传递给 MCP 客户端 ('MCPClient')。 您无需手动配置 MCP 服务器的启动命令。

MCP 客户端配置示例 (非手动配置,仅供参考):

对于 PostgreSQL 数据库,客户端实际上会通过 'StdioServerParameters' 启动如下命令的 MCP 服务器:

{
  "serverName": "postgres-mcp-server",
  "command": "npx",
  "args": [
    "-y",
    "@modelcontextprotocol/server-postgres",
    "postgresql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}?sslmode=verify-full&sslrootcert={ssl_cert_path}"
  ]
}

参数注释:

  • 'serverName': 服务器名称,用于标识服务器类型。
  • 'command': 启动服务器的命令,这里使用 'npx' 来运行 npm 包。
  • 'args': 传递给服务器命令的参数列表:
    • '"-y"': 'npx' 的参数,用于自动确认安装包。
    • '"@modelcontextprotocol/server-postgres"': 要运行的 PostgreSQL MCP 服务器 npm 包。
    • '"postgresql://..."': PostgreSQL 数据库连接字符串,包含用户名、密码、主机、端口、数据库名以及 SSL 证书路径等信息,这些信息会从 'dbconfig.ini' 文件中读取并动态填充。

对于 SQLite 数据库,客户端会启动如下命令的 MCP 服务器:

{
  "serverName": "sqlite-mcp-server",
  "command": "uvx",
  "args": [
    "mcp-server-sqlite",
    "--db-path",
    "{db_path}"
  ]
}

参数注释:

  • 'serverName': 服务器名称,用于标识服务器类型。
  • 'command': 启动服务器的命令,这里使用 'uvx' 来运行 'mcp-server-sqlite'。
  • 'args': 传递给服务器命令的参数列表:
    • '"mcp-server-sqlite"': 要运行的 SQLite MCP 服务器命令。
    • '"--db-path"': 指定 SQLite 数据库文件路径的参数。
    • '"{db_path}"': SQLite 数据库文件路径,默认指向 'src/data/mymcpdb.db',也可以通过环境变量 'SQLITE_DB_PATH' 或修改代码配置。

请注意: 用户 无需 手动配置这些 JSON 信息。 'src/factory/server.py' 和 'src/chat.py' 代码已经处理了服务器的启动和连接。 您只需要按照 "配置数据库连接信息" 步骤修改 'dbconfig.ini' (PostgreSQL) 或检查 'database_config.py' (SQLite) 中的数据库路径即可。

基本使用方法

  1. 切换到 'src' 目录

    cd src
  2. 运行 'chat.py' 脚本

    • 使用 SQLite 数据库 (默认):
      python3 chat.py
    • 使用 PostgreSQL 数据库:
      python3 chat.py --db-type postgres
  3. 在终端中输入自然语言查询

    • 脚本启动后,您将看到提示 "Enter your database query in natural language: "。
    • 输入您想查询数据库的问题,例如:
      • 'List all products that are available in products table'
      • 'List of products which cost above 50.00'
    • 按回车键发送查询。
    • AI 助手将返回查询结果或相应的回复。
  4. 结束会话

    • 输入 'bye', 'quit', 'q', 或 'exit' 即可结束聊天会话。

示例数据库表和数据 (PostgreSQL/SQLite)

为了快速测试,您可以使用 README.md 文件中提供的示例 SQL 语句在您的 PostgreSQL 或 SQLite 数据库中创建 'users' 和 'products' 表,并插入示例数据。 请确保配置的数据库用户拥有执行这些操作的权限 (对于本示例,只需要只读权限即可)。

-- users 表
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (name, email) VALUES
    ('John Doe', '[email protected]'),
    ('Jane Smith', '[email protected]'),
    ('Bob Wilson', '[email protected]'),
    ('Alice Johnson', '[email protected]'),
    ('Tom Brown', '[email protected]');

-- products 表
CREATE TABLE products (
    product_id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    price DECIMAL(10,2) NOT NULL
);

INSERT INTO products (name, price) VALUES
    ('Amazon Echo Dot (5th Gen)', 49.99),
    ('Kindle Paperwhite 8GB', 139.99),
    ('Fire TV Stick 4K', 49.99),
    ('Ring Video Doorbell', 99.99),
    ('Amazon Smart Plug', 24.99);

成本注意事项

请注意,运行此示例可能会产生 AWS 服务的费用,包括:

  • Amazon RDS for PostgreSQL (如果使用)
  • Amazon Bedrock (Claude 模型调用)

请在使用完毕后及时清理或停用相关资源,以避免不必要的费用。

信息

分类

AI与计算