You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何为CrewAI代码解释器配置本地MySQL数据库连接?

问题解决方案

一、在CrewAI代码解释器Docker镜像中安装MySQL依赖模块

方法1:自定义Dockerfile构建镜像

  1. 基于官方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
  1. 构建自定义镜像:
docker build -t custom-crewai-code-interpreter .
  1. 使用自定义镜像启动代码解释器服务。

方法2:临时进入容器安装(仅测试用)

  1. 查找运行中的代码解释器容器ID:
docker ps
  1. 进入容器交互式终端:
docker exec -it <container-id> /bin/bash
  1. 安装依赖:
apt-get update && apt-get install -y gcc python3-dev default-libmysqlclient-dev
pip install mysqlclient

注意:容器重启后依赖会丢失,仅适合临时验证。

方法3:通过Docker Compose挂载需求文件

  1. 项目目录下创建requirements.txt
mysqlclient
  1. 修改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

火山引擎 最新活动