Amazon Bedrock Converse API和数据库MCP服务器集成
此示例演示了AWS Bedrock的会话式AI功能通过以下方式与关系数据库的集成 模型上下文协议(MCP) 服务器架构。该示例利用Bedrock的Converse API,在查询模式下实现与数据库的自然语言交互,而MCP服务器则处理数据库操作和安全协议的复杂性。
该架构为希望将生成式AI功能整合到数据库应用程序中的开发人员提供了参考实现。虽然该示例侧重于RDS PostgreSQL和SQLite,但该模式可以很容易地适用于支持MCP服务器集成的其他数据库系统。
此示例演示了:
- 使用模型上下文协议(MCP)将RDS PostgreSQL和SQLite与AWS Bedrock的基础模型集成
- Bedrock Converse API与MCP服务器集成
- 使用基岩基础模型对数据库进行自然语言查询(只读)
- 通过MCP服务器实现安全高效的数据库操作
- 将GenAI功能添加到现有应用程序中
- 跨数据库GenAI解决方案的基础
AWS组件
此示例中使用的AWS资源列表
- Bedrock Converse API:通过管理与基础模型(FM)的多个交互中的上下文、内存和状态,实现实时对话体验。 链接
- 基岩模型:克洛德·十四行诗3.5或基岩中可用的其他LLM。 链接
- 基岩护栏:实施根据您的应用程序要求和负责任的人工智能政策定制的保障措施。 链接
- RDS Postgres:用于查询数据库。 链接
先决条件
- 具有AWS身份和访问管理(IAM)权限以创建RDS PostgreSQL数据库的AWS帐户
- 获取基岩LLM
- 用户与 只读的 访问RDS Postgress
- Python与Boto3库一起安装
- 类似于Visual Studio代码的IDE
- 本地系统上的SQLite数据库
- 从下载AWS RDS根证书 这里
- 可选设置 基岩护栏 在LLM级别停止DDL查询。这将确保即使数据库用户允许DDL操作,也不会在数据库中执行任何DDL操作。
克隆仓库
git clone https://github.com/aws-samples/sample-for-bedrock-integration-with-database-mcp-server步骤1
使用VS Code IDE设置您的开发环境。
确保您已安装Node.js(v10.13.0或更高版本)
安装AWS CDK
npm install -g aws-cdk使用您的凭据配置AWS CLI并使用 基岩可用的地区
aws configure在MacOS和Linux上手动创建虚拟环境:
python3 -m venv .venv激活您的虚拟环境
source .venv/bin/activate激活虚拟环境后,您可以安装所需的依赖项。
pip install -r requirements.txt使用npm安装PostgreSQL MCP服务器:
npm install -g @modelcontextprotocol/server-postgres
pip install mcp psycopg2-binary
基岩通道
用户必须能够访问用于样品的基岩模型。此示例正在进行以下设置
- 区域:这是在中设置的 agent.py 从您的AWS会话
- LLM:美国.人择.claude-3-5-connect-20240620-v1:0#使用跨区域推理 mcpmain.py。如果不需要跨区域,请使用 LLM端点 相反。
步骤2:RDS Postgres设置和访问
创建和设置RDS
改变 dbconfig.ini 包含以下信息的文件
- db_user=“xxx”
- db_password=“xxx”//出于安全原因,已将其从文件中删除。请确保将其添加回
- db_host=“xxx.us-east-1.rds.amazonaws.com”
- db_port=“5432”
- db_name=“xxx”
- ssl_cert_path=“/xxx/global bundle.pem”//.pem文件的位置
步骤3:运行应用程序并使用自然语言查询配置的数据库
使用适当的数据库类型选项运行。如果没有提供数据库类型,聊天会话将假定SQLite为默认数据库,并在src/data文件夹中创建一个名为mymcpdb.db的数据库。您可以通过修改来指向现有的SQLite数据库 这个文件
cd src
python3 chat.py --db-type [sqlite / postgres]
提出以下问题:(数据库用户有权在数据库中执行这些操作)
- 在产品表中列出所有可用的产品
- 价格超过50.00的产品列表
运行此示例的成本
以下服务将根据使用情况和正常运行时间产生成本。请在最后根据需要删除/禁用对此资源的访问。
附加信息
用于测试的RDS Postgres表和数据示例。这只是为了快速测试。
配置的数据库用户必须具有足够的权限来执行这些操作。由于此示例仅适用于只读指令,因此必须使用数据库工具在此示例之外执行这些操作
创建TABLE用户( id串行主键, 名称VARCHAR(255)非空, 电子邮件VARCHAR(255)唯一非空, created_at带有时区默认电流的时间戳_TIMESTAMP );
在用户(姓名、电子邮件)中插入值 (“无名氏”john.doe@example.com'), (“简·史密斯”jane.smith@example.com'), (“鲍勃·威尔逊”bob.wilson@example.com'), (“爱丽丝·约翰逊”alice.j@example.com'), (“汤姆·布朗”tom.brown@example.com');
创建TABLE产品( product_id序列主键, 名称VARCHAR(255)非空, 价格决策(10,2)不为空 );
插入产品(名称、价格)值 (《亚马逊回声点(第五代)》,49.99), (“Kindle Paperwhite 8GB”,139.99), (“Fire TV Stick 4K”,49.99), (“红色视频门铃”,99.99), (“亚马逊智能插头”,24.99);
