使用说明
项目简介
本项目是一个示例,演示了如何利用 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 数据库应用的基础架构。
安装步骤
-
克隆仓库
git clone https://github.com/aws-samples/sample-for-bedrock-integration-with-database-mcp-server cd sample-for-bedrock-integration-with-database-mcp-server -
配置 AWS CLI 和 Bedrock 访问
- 确保已配置 AWS CLI 并拥有访问 Bedrock 模型的权限。
- 使用 'aws configure' 命令配置 AWS 凭证和区域(确保是 Bedrock 可用的区域)。
-
安装 Node.js 和 AWS CDK (可选)
- 虽然本示例主要使用 Python,但 PostgreSQL MCP 服务器依赖 Node.js 环境。请确保已安装 Node.js (v10.13.0 或更高版本)。
- AWS CDK 是可选的,本示例不直接使用 CDK,但安装 CDK 可能有助于某些依赖的解决。
npm install -g aws-cdk -
创建并激活 Python 虚拟环境
python3 -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows -
安装 Python 依赖
pip install -r requirements.txt -
安装 PostgreSQL MCP 服务器 (如果使用 PostgreSQL)
npm install -g @modelcontextprotocol/server-postgres pip install mcp psycopg2-binary -
下载 AWS RDS 根证书 (如果使用 PostgreSQL)
- 从 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem 下载 AWS RDS 根证书 'global-bundle.pem'。
- 将证书文件放置在您希望的目录下,并在下一步的配置文件中指定路径。
-
配置数据库连接信息
- 修改 '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 数据库文件路径。
- 修改 'src/config/dbconfig.ini' 文件,填入您的 PostgreSQL 数据库连接信息(如果使用 PostgreSQL):
服务器配置
本示例中,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) 中的数据库路径即可。
基本使用方法
-
切换到 'src' 目录
cd src -
运行 'chat.py' 脚本
- 使用 SQLite 数据库 (默认):
python3 chat.py - 使用 PostgreSQL 数据库:
python3 chat.py --db-type postgres
- 使用 SQLite 数据库 (默认):
-
在终端中输入自然语言查询
- 脚本启动后,您将看到提示 "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 助手将返回查询结果或相应的回复。
-
结束会话
- 输入 '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与计算