如何为CrewAI代码解释器配置本地MySQL数据库连接?
问题解决方案
一、在CrewAI代码解释器Docker镜像中安装MySQL依赖模块
方法1:自定义Dockerfile构建镜像
- 基于官方CrewAI代码解释器镜像创建Dockerfile:
FROM crewai/code-interpreter:latest # 安装mysqlclient编译依赖 RUN apt-get update && apt-get install -y gcc python3-dev default-libmysqlclient-dev # 安装Python数据库驱动 RUN pip install mysqlclient
- 构建自定义镜像:
docker build -t custom-crewai-code-interpreter .
- 使用自定义镜像启动代码解释器服务。
方法2:临时进入容器安装(仅测试用)
- 查找运行中的代码解释器容器ID:
docker ps
- 进入容器交互式终端:
docker exec -it <container-id> /bin/bash
- 安装依赖:
apt-get update && apt-get install -y gcc python3-dev default-libmysqlclient-dev pip install mysqlclient
注意:容器重启后依赖会丢失,仅适合临时验证。
方法3:通过Docker Compose挂载需求文件
- 项目目录下创建
requirements.txt:
mysqlclient
- 修改
docker-compose.yml,挂载文件并自动安装:
services: code-interpreter: image: crewai/code-interpreter:latest volumes: - ./requirements.txt:/app/requirements.txt command: > sh -c "pip install -r /app/requirements.txt && python main.py"
二、实现代码解释器与本地MySQL数据库的连接
1. 调整数据库连接字符串
根据Docker运行环境修改连接地址:
- Windows/macOS:将
127.0.0.1替换为host.docker.internal(Docker内置域名,解析到宿主机):
SQL_LOCALHOST = "mysql+mysqldb://root:123@host.docker.internal:3306/analytics_db"
- Linux:使用宿主机局域网IP(如
192.168.1.100),或启动容器时添加--network host参数共享宿主机网络,此时连接字符串可保留127.0.0.1:
docker run --network host custom-crewai-code-interpreter
2. 配置MySQL访问权限
确保MySQL用户允许从Docker容器IP段访问,执行以下SQL:
GRANT ALL PRIVILEGES ON analytics_db.* TO 'root'@'%' IDENTIFIED BY '123'; FLUSH PRIVILEGES;
生产环境建议替换%为具体IP段,提升安全性。
三、「基于用户查询分析数据库」的更优方案
方案1:分离SQL执行与结果分析逻辑
让已实现的SQL Agent负责所有数据库交互(列表、查 schema、执行SQL等),代码解释器Agent仅接收SQL返回的结构化数据,专注于数据可视化和分析。优势:
- 避免代码解释器直接连接数据库,降低安全风险
- 无需在代码解释器环境安装数据库驱动,解决依赖问题
- 职责划分清晰,符合单一职责原则
方案2:替换为纯Python数据库驱动
将mysqldb替换为pymysql(纯Python实现,无需编译系统依赖),修改连接字符串:
SQL_LOCALHOST = "mysql+pymysql://root:123@host.docker.internal:3306/analytics_db"
仅需在代码解释器环境安装pymysql:
pip install pymysql
该方式无需安装编译依赖,更适配Docker轻量环境。
方案3:搭建数据中间层API
开发简单的API服务作为数据库访问中间层,代码解释器通过HTTP请求获取数据,完全规避直接数据库连接。适合复杂多Agent协作场景,提升系统扩展性与安全性。
内容的提问来源于stack exchange,提问作者Pamudu Ranasinghe




