👫 欢迎扫码加入微信群! 🏆 Top 100 开源项目! 🌟 VLDB 2024!
演示 • 快速开始 • 警报与异常 • 知识与工具 • Docker部署 • 常见问题 • 社区 • 贡献者 • OpenAI,Azure 聚合API优惠接入方案。
🦾 构建您的个人数据库管理员(D-Bot)🧑💻, 擅长通过 阅读文件,使用各种工具,编写分析报告 解决数据库问题! 改版中!
- 启动本地服务后,可以在网页端(采用了Chatchat项目的前端和配置方式)轻松将文档导入知识库、利用知识库进行有根据的问答、以及利用知识库进行异常告警的诊断分析。
- 通过用户反馈功能 🔗,您可以(1)给出反馈,使D-Bot跟踪并细化中间诊断结果,以及(2)通过单击“编辑”按钮编辑诊断结果。D-Bot可以从用户反馈(存储在向量数据库中)中积累优化模式,并自适应用户的诊断偏好。
- 在在线网站(http://dbgpt.dbmind.cn),您可以浏览所有历史诊断结果、使用的指标和详细的诊断过程。
历史版本 1: [Gradio for Diag Game] (不依赖langchain)
历史版本 2: [Vue for Report Replay] (不依赖langchain)
-
Docker一键部署
-
指标监控(prometheus)、数据库(postgres_db)、告警(alertmanager)和告警记录(python_app)
-
D-bot (目前容器过大,超过12GB)
-
-
用户反馈机制 🔥🔥🔥
-
基于用户反馈生成测试优化诊断
-
优化模式的抽取和管理
-
-
语言支持 (英文 / 中文)
- 默认英文
- 中文需要在配置config.yaml文件里加上language: zh
-
前端
- 知识库 + chat问答 + 异常诊断 + 报告回放
-
带引用的诊断报告
-
加速本地模型(极速版dbot)
-
4-bit 量化LLM (推理时间减少1/3)
-
vllm推理加速 (qwen)
-
Tiny LLM
-
-
文档知识多路抽取
- 向量数据库 (ChromaDB)
- RESTful风格的搜索引擎 (Elasticsearch)
-
根据 知识聚类结果 自动生成专家描述
-
升级基于 LLM 的诊断机制:
- 任务分派 -> 并行诊断 -> 交叉审查 -> 报告生成
- 完善异步机制
-
在多个层次上支持监控和优化工具 🔗 链接
- 监控指标 (Prometheus)
- 代码级别的火焰图分析,定位算子、配置等问题
- 诊断知识检索 (dbmind)
- 逻辑查询转换 (Calcite)
- 索引优化算法 (适用于 PostgreSQL)
- 物理操作符提示 (适用于 PostgreSQL)
- 备份和时间点恢复 (Pigsty)
-
我们的愿景论文已发布 (持续更新)
该项目正在不断引入新特性 👫👫
不要忘记星标 ⭐ 并关注 👀 以同步最新进展 :)
- 首先,确保你的机器安装了 Python (>= 3.10)
$ python --version
Python 3.10.12
接着,创建一个虚拟环境,并在虚拟环境内安装项目的依赖
# 拉取仓库
$ git clone https://github.com/TsinghuaDatabaseGroup/DB-GPT.git
# 进入目录
$ cd DB-GPT
# 安装全部依赖
$ pip3 install -r requirements.txt
$ pip3 install -r requirements_api.txt # 如果只运行API,可以只安装API依赖,请使用 requirements_api.txt
# 默认依赖包括基本运行环境(Chroma-DB向量库)。如果要使用其它向量库,请将 requirements.txt 中相应依赖取消注释再安装。
-
PostgreSQL v12 (我们是基于 PostgreSQL v12 进行开发测试的,我们不保证其他版本的 PostgreSQL 的兼容性)
确保您的数据库支持远程连接 (链接)
此外,安装扩展如 pg_stat_statements(跟踪频繁查询), pg_hint_plan(优化物理操作符), 和 hypopg(创建虚拟索引)。
注意 pg_stat_statements 会持续累积查询统计数据。因此您需要定期清除统计数据:1) 要丢弃所有统计数据,执行 "SELECT pg_stat_statements_reset();"; 2) 要丢弃特定查询的统计数据,执行 "SELECT pg_stat_statements_reset(userid, dbid, queryid);"。
-
(可选) 如果您需要在本地或离线环境中运行此项目,您首先需要将所需的模型下载到本地计算机,然后进行正确的配置。
- 下载 Sentence Trasformer 模型参数
创建新目录 ./multiagents/localized_llms/sentence_embedding/
将下载的sentence-transformer.zip压缩包放置在./multiagents/localized_llms/sentence_embedding/目录下;解压压缩包。
- 从 HuggingFace 下载 LLM 和 Embedding 模型。
下载模型需要首先安装 Git LFS,然后运行
$ git lfs install
$ git clone https://huggingface.co/moka-ai/m3e-base
$ git clone https://huggingface.co/Qwen/Qwen-1_8B-Chat
- 调整 模型设置 为下载路径,如
EMBEDDING_MODEL = "m3e-base"
LLM_MODELS = ["Qwen-1_8B-Chat"]
MODEL_PATH = {
"embed_model": {
"m3e-base": "m3e-base", # Download path of embedding model.
},
"llm_model": {
"Qwen-1_8B-Chat": "Qwen-1_8B-Chat", # Download path of LLM.
},
}
- 下载并配置 本地 LLM。
- 首先,确保你的机器安装了 Node (>= 18.15.0)
$ node -v
v18.15.0
接着,安装项目依赖
cd webui
# pnpm address https://pnpm.io/zh/motivation
# install dependency(Recommend use pnpm)
# you can use "npm -g i pnpm" to install pnpm
pnpm install
复制配置文件,注意查看每个文件的注释,根据自己需求修改
$ python copy_config_example.py
# 生成的配置文件在 configs/ 目录下
# basic_config.py 是基础配置文件,不需要修改
# diagnose_config.py 是诊断配置文件,需要根据自己的环境修改。
# kb_config.py 是知识库配置文件,可以修改DEFAULT_VS_TYPE来指定知识库的存储向量库等,也可以修改修改相关的路径。
# model_config.py 是模型配置文件,可以修改LLM_MODELS来指定使用的模型,当前模型配置主要针对知识库搜索,诊断相关的模型还有一些硬编码在代码中,后续会统一到这里。
# prompt_config.py 是prompt配置文件,主要是LLM对话和知识库的prompt。
# server_config.py 是服务配置文件,主要是服务的端口号等。
!!! 注意,请在初始化知识库之前修改以下配置,否则可能会导致数据库初始化失败。
- model_config.py
# EMBEDDING_MODEL 向量化模型,如果选择本地模型,需要按需下载到根目录。
# LLM_MODELS LLM,如果选择本地模型,需要按需下载到根目录。
# ONLINE_LLM_MODEL 如果使用线上模型,需要修改配置。
- server_config.py
# WEBUI_SERVER.api_base_url 需要关注这个参数,如果是在服务器上部署项目,则需要修改配置。
初始化知识库
$ python init_database.py --recreate-vs
- 在 diagnose_config.py, 我们将 config.yaml 设置为LLM专家的默认配置文件。
DIAGNOSTIC_CONFIG_FILE = "config.yaml"
- 要通过用户反馈交互优化诊断,您可以设置
DIAGNOSTIC_CONFIG_FILE = "config_feedback.yaml"
- 要使用 Qwen 进行中文诊断,您可以设置
DIAGNOSTIC_CONFIG_FILE = "config_qwen.yaml"
按照以下命令启动项目
$ python startup.py -a
如果正常启动,你将能看到以下界面
- FastAPI Docs 界面
- Web UI 启动界面示例:
- Web UI 知识库管理页面:
- Web UI 对话界面:
- Web UI 诊断页面:
通过使用Docker部署节省时间。
-
(可选) 在 PostgreSQL 中启用慢查询日志 (链接)
(1) 对于 "systemctl restart postgresql",服务名可以不同(例如,postgresql-12.service);
(2) 使用绝对日志路径名称如 "log_directory = '/var/lib/pgsql/12/data/log'";
(3) 在 postgresql.conf 中设置 "log_line_prefix = '%m [%p] [%d]'"(记录不同查询的数据库名)。
-
(可选) Prometheus
查看prometheus.md了解详细的安装指南。
- 测试单个案例 我们在test_case文件夹下面放了多个测试案例。可以通过前端页面选择案例文件,进行诊断,也可以通过命令行进行诊断。
python3 run_diagnose.py --anomaly_file ./test_cases/testing_cases_5.json --config_file config.yaml
- 支持中文qwen调用诊断。请先用vllm在你的gpu机器上部署一个服务,参数配置在configs的model_config修改。如何部署服务请参考Qwen1.5官方介绍
python3 run_diagnose.py --anomaly_file ./test_cases/testing_cases_5.json --config_file config_qwen.yaml
查看如何快速部署 Prometheus 和 Alertmanager ➡️ prometheus_service_docker
- 你也可以选择我们提供的docker来进行快速部署(docker deployment)
我们提供可能引起典型异常的脚本。在 http://dbgpt.dbmind.cn 查看不同的异常案例。
点击查看 29 种典型异常与专家分析(由 DBMind 团队支持)
(1) 如果只需要简单的文档拆分,可以直接使用“知识库管理页面”中的文档导入功能。
(2) 本功能目前要求文档本身有章节格式信息,目前仅支持docx格式。
步骤 1. 配置 ./doc2knowledge/doc_to_section.py 中的 ROOT_DIR_NAME 路径,并将所有docx格式文档存放在 ROOT_DIR_NAME 下。
步骤 2. 配置OPENAI_KEY。
export OPENAI_API_KEY=XXXXX
步骤 2. 按章节索引将文档分割为单独的章节文件。
cd doc2knowledge/
python doc_to_section.py
步骤 3. 修改doc2knowledge.py脚本中的参数并运行脚本:
python doc2knowledge.py
-
工具 API(用于优化)
模块 功能 index_selection(已装备) 启发式 算法 query_rewrite(已装备) 45 条规则 physical_hint(已装备) 15 个参数 对于[query_rewrite, physical_hint]内的功能,你可以使用api_test.py 脚本来验证其有效性。
如果功能确实有效,请将其添加到相应模块的api.py中。
我们使用db2advis启发式算法为给定的工作负载推荐索引。函数api是optimize_index_selection。
您可以使用 Docker 快速、安全地使用监控平台和数据库。
请参考教程(例如在 CentOS 上)安装 Docker 和 Docker-Compose。
我们使用 docker-compose 来构建和管理多个用于指标监控(prometheus)、告警(alertmanager)、数据库(postgres_db)和告警记录(python_app)的 Docker 容器。
cd prometheus_service_docker
docker-compose -p prometheus_service -f docker-compose.yml up --build
下次启动 prometheus_service 时,您可以直接执行 "docker-compose -p prometheus_service -f docker-compose.yml up",而无需重新构建 Docker 容器。
在anomaly_trigger/utils/database.py中配置设置(例如,将 "host" 替换为服务器的 IP 地址),并执行异常生成命令,如:
cd anomaly_trigger
python3 main.py --anomaly MISSING_INDEXES --threads 100 --ncolumn 20 --colsize 100 --nrow 20000
如果执行后没有记录告警,您可能需要修改参数值,例如 "--threads 100"。
在收到从 prometheus_service 发送到 http://127.0.0.1:8023/alert 的请求后,告警摘要将记录在 prometheus_and_db_docker/alert_history.txt 中,如:
这样,您可以使用标记为 resolved 的告警作为新的异常(存放在 ./diagnostic_files 目录下)由 d-bot 进行诊断。
🤨 '.sh' 脚本命令无法在Windows系统上执行。
将Shell切换到*git bash*或使用*git bash*来执行'.sh'脚本。🤨 Windows系统上出现“找不到名为'xxx'的模块”。
这个错误是由Python运行时环境路径问题引起的。你需要进行以下步骤:步骤 1:检查环境变量。
你必须在环境变量中配置"Scripts"。
步骤 2:检查 IDE 设置。
对于 VS Code,下载 Python 扩展。对于 PyCharm,为当前项目指定 Python 版本。
项目清理支持更多异常- 根据匹配的知识严格限制 llm 输出(过多不相关信息)
查询日志选项(可能会占用磁盘空间,我们需要仔细考虑)添加更多通信机制支持更多知识来源项目工程化,解决依赖问题和代码中的硬编码问题独立知识抽取模块- 达到 D-bot(gpt4)能力的本地化模型
- 支持其他数据库(例如,mysql/redis)
https://github.com/OpenBMB/AgentVerse
https://github.com/Vonng/pigsty
https://github.com/UKPLab/sentence-transformers
https://github.com/chatchat-space/Langchain-Chatchat
https://github.com/shreyashankar/spade-experiments
@misc{zhou2023llm4diag,
title={LLM As DBA},
author={Xuanhe Zhou, Guoliang Li, Zhiyuan Liu},
year={2023},
eprint={2308.05481},
archivePrefix={arXiv},
primaryClass={cs.DB}
}
@misc{zhou2023dbgpt,
title={DB-GPT: 大型语言模型遇上数据库},
author={Xuanhe Zhou, Zhaoyan Sun, Guoliang Li},
year={2023},
archivePrefix={Data Science and Engineering},
}
我们感谢所有对这个项目的贡献者。如果你想参与或贡献,不要犹豫!
👏🏻欢迎加入我们的微信群,如该二维码过期,可添加微信号:ming621431