今年我的工作被派了一个项目任务,名为“ AI 的研究与落地”。到了2025年才开始琢磨这项工作,显然不会是最早的那批人,但好处是各种 AI 相关的开源项目都已经迭代很多版本,发展相对成熟,所以我主要去做的事情偏向于研究如何用好那些工具。而具体的内容也有过几次转变,从 知识问答(RAG)到问数再到辅助分析,琢磨知识问答的时候理解了分片、召回,琢磨问数的时候理解了流程设计,现在琢磨辅助分析,之前所学全都抛弃,只剩下应用场景。
本文算是学习使用 DB-GPT 这个工具的笔记,照例从部署安装开始记录。
截止记录笔记时,下载的 DB-GPT 最新版本是0.7.3。
一、部署 🔗
1.1.服务器联网部署 🔗
这里说明几个前置条件:1.在 Linux 服务器部署;2.挂了代理可以连接外网;3.Docker 可用。
在可以联网的情况下,部署的方法很简单,即从外网获取官方提供的仓库放到服务器,然后启动就行。获取官方仓库的方式有两种:其一,从 DockerHub 拉取官方镜像仓库;其二,从 github 克隆仓库源码。执行代码启动镜像后,在浏览器打开<服务器 IP:5670>就能访问页面。
如果本来就注册了硅基流动(siliconflow)的 API KEY,那么第一种方法直接可用。否则的话,需要参考下一小节的内容稍作修改,才能用第二种方法。
# 检查 docker 状态是否正常
sudo systemctl status docker
# 1. 从 dockerhub 拉取官方镜像仓库
docker pull eosphorosai/dbgpt:latest
# 启动镜像
docker run -it --rm -e SILICONFLOW_API_KEY=${sk-xxxxxx} \
-p 5670:5670 --name dbgpt eosphorosai/dbgpt-openai
# 关闭按组合键 ctrl+ C
# 2. 从 github 克隆仓库源码,指定目录
git clone https://github.com/eosphoros-ai/DB-GPT.git /user/hadoop/DBGPT/
cd /user/hadoop/DBGPT/
# 启动
docker compose up -d
# 关闭
docker compose down
1.2.改用通义千问的 API KEY 🔗
若是进入项目文件所在目录,使用docker compose来启动镜像,启不起来的话就需要去翻查对应的docker-compose.yml文件,查看各个配置项的细节。在刚下载下来的配置文件里,下面这一部分默认使用硅基流动(siliconflow),我的需求是改用通义千问,于是修改两处,一是改成引用通义的模型配置文件(.toml),二是改为调用通义的 API KEY。
- 修改前
webserver:
image: eosphorosai/dbgpt-openai:latest
command: dbgpt start webserver --config /app/configs/dbgpt-proxy-siliconflow-mysql.toml
environment:
- SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY}
- 修改后
webserver:
image: eosphorosai/dbgpt-openai:latest
command: dbgpt start webserver --config /app/configs/dbgpt-proxy-tongyi.toml
environment:
- DASHSCOPE_API_KEY=sk-xxxxxx
这个版本的 DB-GPT 在切换模型来源和切换模型这两件事上不如 DIFY 简单。如果要切换模型来源,需要手动修改docker-compose.yml文件,然后重启;如果要切换模型,也需要修改对应的模型配置文件,比如往 dbgpt-proxy-tongyi.toml里面增加调用更多模型的配置。
这里踩了一个坑,dbgpt-proxy-tongyi.toml文件里面原本只配置了 llm 和 embedding 两种模型,而我想当然地给加上 rerank 模型的配置信息,重启后发现出了问题。执行docker ps发现相关镜像的状态一直是restart,这代表启动失败,再执行docker logs <容器ID或名称>查看报错原因,错误如下。后来把配置 rerank 模型的信息删掉,然后再重启就正常了。
ValueError: Invalid data for ModelsDeployParameters: Invalid list element type: Invalid data for RerankerDeployModelParameters: Unknown type value: proxy/tongyi, known types: [‘hf’, ‘qwen’, ‘proxy/openapi’, ‘proxy/siliconflow’, ‘proxy/tei’, ‘proxy/infiniai’]
1.3.部到另一套服务器上 🔗
由于一些复杂的权限隔离、网络安全的问题,第一次部署的服务器挂了代理能连上外网,但是使用起来很慢,这里要再部到另一台服务器上,虽然不能连外网但是专门给通义千问的 API KEY 开通了策略,使用起来会很快。
我是从 github 克隆仓库源码,整个项目目录大概如下。
docker-compose.yml文件- docker 文件夹
- configs 文件夹
dbgpt-proxy-tongyi.toml文件
- 其他文件或文件夹
照理说只要打包镜像文件和 docker 文件夹,放到另一台服务器也能启用,但在踩坑折腾的过程中,我比较习惯于打开文件目录根据报错信息去翻项目文件(ps 打开 Xftp 查看),要是只打包 docker 文件夹,再翻项目文件得一层层进镜像里面查找,所以最后选择整个项目文件全打包过去。
# 原服务器:打包镜像文件
docker save -o /user/hadoop/DBGPT_images_20250903.tar eosphorosai/dbgpt-openai:latest mysql/mysql-server
# 原服务器:压缩整个项目文件
cd /user/hadoop
tar -czvf DBGPT.tar.gz docker
# 两个文件转移到新服务器 /user/model 目录下
# 新服务器:解压缩项目文件
cd /user/model/
tar -xzvf DBGPT.tar.gz -C /user/model/
# 新服务起:加载镜像文件
docker load -i /user/model/DBGPT_images_20250903.tar
# 启动
cd /user/model/DBGPT
docker compose up -d
1.4.配置测试数据库 🔗
在官方文档http://docs.dbgpt.cn/docs/application/apps/chat_dashboard里面,配置官方准备好的测试数据库很简单,不过对于不熟悉项目的人比如本菜鸟,看着会很懵。
In order to better experience the report analysis capabilities, we have built some test data into the code. To use this test data, we first need to create a test library.
CREATE DATABASE IF NOT EXISTS dbgpt_test CHARACTER SET utf8;
After the test library is created, you can initialize the test data with one click through the script.
python docker/examples/dashboard/test_case_mysql_data.py
# 查看容器 id
docker ps
# 进 mysql 容器(dbgpt-db-1)
docker exec -it 6eee67836906 bash
# 进 mysql,输入密码 aa123456
mysql -u root -p
# 建数据库
CREATE DATABASE IF NOT EXISTS dbgpt_test CHARACTER SET utf8;
# 查看是否建成功
show database;
# 退出 mysql,退出容器
exit
exit
# 再进 dbgpt 容器(dbgpt-webserver-1)
docker exec -it c0b37ad462e1 bash
# 执行 .py 脚本 写入数据
python /app/docker/examples/dashboard/test_case_mysql_data.py
报错连不上 mysql。
pymysql.err.OperationalError: (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 111] Connection refused)”)
翻查被执行的test_case_mysql_data.py,发现关于连接的配置代码如下。参照项目主目录的docker-compose.yml文件,有两个问题:一是默认值"127.0.0.1"在这里不好用,会导致导致连不上 mysql,而 mysql 对应的服务名应该是“db”;二是test_case_mysql_data.py文件中的 mysql 登录密码是 aa12345678,但是项目主目录的docker-compose.yml文件中默认的 mysql 登录密码是 aa123456。
if __name__ == "__main__":
connection = pymysql.connect(
host=os.getenv("DB_HOST", "127.0.0.1"),
port=int(
os.getenv("DB_PORT", 3306),
),
user=os.getenv("DB_USER", "root"),
password=os.getenv("DB_PASSWORD", "aa12345678"),
database=os.getenv("DB_DATABASE", "dbgpt_test"),
charset="utf8mb4",
ssl_ca=None,
)
不知何故,以上两处差异修改后仍然报错。接下来,直接在 dbgpt 容器中执行下列代码,从执行后的日志可以看到数据已经被正常写入。
DB_HOST=db \
DB_PORT=3306 \
DB_USER=root \
DB_PASSWORD=aa123456 \
DB_DATABASE=dbgpt_test \
python /app/docker/examples/dashboard/test_case_mysql_data.py
下面再检测一遍从 dbgpt 容器是否能正常连接 mysql,依然是在 dbgpt 容器中,使用cat创建多行脚本,执行cat > test_mysql.py,接着复制粘贴以下代码,随后按组合键 CTRL + D 保存并退出。最后执行python test_mysql.py,可以看到连接成功。
import pymysql
try:
conn = pymysql.connect(
host="db",
user="root",
password="aa123456",
database="dbgpt_test",
port=3306
)
print("✅ MySQL 连接成功!")
except Exception as e:
print("❌ 连接失败:", e)
以上步骤分别是在 mysql 创建数据库,通过 python 脚本添加数据,测试能否正常连接。
接下来还要在浏览器中打开页面,在数据库菜单再手动配置一下,之后才能在应用中正常使用测试数据库。根据官方文档的演示截图中,依次输入下面三段文字,输出的结果和截图中并不一样。
help me build a sales report summarizing our key metrics and trends.
Please create an analysis reposrt to help improve product operation efficiency and increase overall sales.
analyze user orders from multiple dimensions.
二、使用 🔗
DB-GPT 提供了六大项基础应用,本文暂不涉及 Chat Normal 和 Chat Knowledge。
| 应用名称 | 数据来源 | 生成与执行 SQL | 输出形式 | 输出内容 | 典型用途 |
|---|---|---|---|---|---|
| Chat Dashboard | 配置数据库 | 多段 SQL(执行) | 仪表板 | Preview 页面展示可视化报告、Editor 页面展示 SQL | 生成报告 |
| Chat Data | 配置数据库 | 一段 SQL(执行) | 问答页面 | 分析思路、Chart(图形)、SQL、Data(数据) | 辅助数据分析 |
| Chat Excel | 上传 csv 格式文件 | 一段 SQL(执行) | 问答页面 | 分析思路、Chart(图形)、SQL、Data(数据) | 辅助数据分析 |
| Chat DB | 配置数据库 | 一段 SQL(不执行) | 问答页面 | SQL及字段释义 | 了解数据的基础信息 |
以上四种应用,可用于以下场景。
- 懂业务、不懂 SQL,了解数据,使用 Chat Excel 辅助数据分析与洞察。
- 懂业务、懂 SQL,不了解数据库中表信息的,先使用 Chat DB 了解数据,然后使用 Chat Data 辅助数据分析与洞察。
- 懂业务、懂 SQL、了解数据,使用 Chat Dashboard 生成报告。
下面是最近试用过程中踩的几个坑,因为使用时间较少,许多地方也还没摸透。
2.1.Chat Excel 🔗
EXCEL 文件需要转换为
.csv格式!
我试了一下,如果上传.xlsx 文件(大小约 15K ),半小时后也能传成功,翻查日志找到以下警告,猜测效率慢的原因有可能是当前版本没有集成解析 EXCEL 格式的插件。后来转成 .csv 格式,30秒能传完。
dbgpt_app.scene.chat_data.chat_excel.excel_reader[1] WARNING Error while reading file: An error occurred while trying to automatically install the required extension ’excel’: Failed to download extension “excel” at URL “http://extensions.duckdb.org/v1.2.2/linux_amd64_gcc4/excel.duckdb_extension.gz" Extension “excel” is an existing extension.For more info, visit https://duckdb.org/docs/extensions/troubleshooting/?version=v1.2.2&platform=linux_amd64_gcc4&extension=excel (ERROR Could not establish connection)
用户输入后,此应用一般会输出4个部分的内容:分析思路、Chart(图形)、SQL、Data(数据)。如果分析思路中不包含绘图,那么仅展示 SQL 和 Data。
2.2.Chart Data 🔗
用户输入后,报错,错误是“Generate view content failed”。
翻查镜像日志,查看到错误如下。这是因为数据库的表中有个字段名称是YEAR_MONTH,这与 MYSQL 有关键词冲突,如果执行的 SQL 语句里面 不对该字段增加反引号,会导致在 MYSQL 中执行时报错。
2025-09-05 08:38:58 a41259b731e6 dbgpt.datasource.rdbms.base[1] ERROR Error in session scope: (pymysql.err.ProgrammingError) (1064, “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘YEAR_MONTH, (add_agents - loss_agent) AS active_agents, income FROM branch_data1’ at line 1”)
解决方法是,要么改字段名称,要么调用其他 AI 。
2.3.Chart Dashboard 🔗
下面仅仅只是瞎碰乱试得到的一些结论,偏于暂时性质的。
- 使用时需要配置合适的知识库和提示词。
比如我在造数测试的时候造了“百元标保成本”和“规模保费收入”,然后输入内容提到让 AI 去分析利润或收益,输出的内容会将这两个指标直接相减,事实上在保险行业这两个指标根本不是一个数量级,不能相减。我猜的是,在垂直领域,需要给 AI 外挂好用的知识库,不然它真会缺少行业常识。
- 规划数据时,维度要保持统一
起初,在我配置直连的数据库里,有的表里分公司的取值是河北、湖北等真实信息,有的表里是编造的分公司A、分公司B等虚假信息,由于 AI 读入暂时只有表结构信息,没有整张表的数据,导致它输出的多个图形里两种信息都存在。
- 尽量让各个表中指标不要重复。
如果编写的指标名称、释义(comments)出现重复,AI 会瞎关联。
三、一些思考 🔗
- DB-GPT 只展示数据,不给出结论。
DB-GPT的分析受限于图形的展现形式,而如何解读图形和数据又是另一件事。从我脑子里统计学的视角来看,只有足够多的数据才能让 AI 辅助分析后做出最贴合现实的决策,但事实是,现在 AI 的能力还不足以获取人类百分百的信任,AI 进入企业后还需要接受权限管控。
- 精确的需求,具体的分析。
企业里通常存在这样一个场景,领导突然关注某个新问题,属下员工去搜集数据然后分析,最后汇报分析结果。如果 AI 不能完全取信于人类,也要面临权限隔离,那么那个做数据分析的员工无法被 AI 取代,因为领导总是只能描述出偏于宏观的、模糊的需求,这会导致 AI 无法给领导一份满意的报告。目前来看,DB-GPT 可能在辅助分析方面提高人类的工作效率,但无法将人类员工全都取代。
- 对比辅助编程与辅助数据分析
最近和同事讨论 AI 辅助编程和 AI 辅助数据分析哪个能走更远。
第一位同事的观点是,将来应该赋予 AI 自动编译代码的权限,给了AI 执行命令的权限,AI 才能发现错误并自己解决,AI 辅助编程一直是朝着一体化来发展的,一句话就能把需求分析、开发、测试、问题修改、发布都搞定。将来 AI 可以永生,AI 提供基础服务,人类做自己想做的事就好了
第二位同事的观点是,这有点像是 AI 的共产主义,但现在 AI 还没诞生自主意识,并且代码质量能否过关仍未可知(ps我们公司最近引入 AI 辅助编程工具,但对于 IT 工作效率能提高多少、缺陷率能降低多少仍然需要观望)。
我的观点是,按照第一位同事所说,这样的 AI 接近于永动机模式,另外 AI 可以执行具体的指令,可是人类总是表达模糊的需求。在当前社会,人类融入社会分工中,被家庭、工作、社会关系等赋予活着的意义(ps也不一定是意义,或者可以说是人类意识形态里认为活着想做的事),要是这些东西一口气全都解体,人类会陷入迷茫。
官方文档中有几篇值得多翻翻,或许对于将来给领导讲故事有用,下面把链接放这里。
参考文档: