DB-GPT学习指南:Chat Dashboard与SQL微调能力

本文详细介绍了DB-GPT开源框架中Chat Dashboard和Text2SQL微调两大核心功能,涵盖架构、配置、实现原理、学习路径及进阶方向,适合开发者快速上手。

DB-GPT学习指南:Chat Dashboard与SQL微调能力

一、项目概述

DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL and Agents),旨在构建大模型领域的基础设施。项目通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单便捷。

https://cdn.nlark.com/yuque/__mermaid_v3/423144ead42b709173f8975ab00edf64.svg

二、Chat Dashboard功能学习

1. 整体架构与设计思路

Chat Dashboard是DB-GPT中的核心功能之一,允许用户通过自然语言与数据库交互,生成数据分析报告和可视化图表。

2. 配置PostgreSQL数据库连接

使用通义模型启动DB-GPT服务:

配置文件configs/dbgpt-proxy-temp-tongyi.toml中关键部分:

连接PostgreSQL数据库的步骤:

  • 在DB-GPT界面选择“数据源管理”
  • 选择PostgreSQL数据库类型
  • 填写连接信息:主机、端口、用户名、密码、数据库名
  • 验证连接并保存

3. Chat Dashboard核心实现原理

3.1 数据库表结构识别

DB-GPT使用向量检索技术识别与用户查询相关的数据库表结构:

工作流程:

  • 首次连接数据库时,系统提取表结构信息并创建向量索引
  • 用户提问时,系统使用语义检索找出相关表结构
  • 将检索到的表结构作为上下文提供给大语言模型

3.2 动态提示词设计与SQL生成

系统使用精心设计的提示词引导模型生成高质量的分析:

3.3 图表生成思路

系统根据数据特性自动设计和生成图表:

图表生成流程:

  • LLM根据数据特性选择合适的图表类型(柱状图、折线图、饼图等)
  • 系统执行SQL获取数据
  • 数据转换为图表所需的格式
  • 前端渲染图表

4. Chat Dashboard关键文件

文件路径 主要功能
chat_dashboard/chat.py 主要实现类,处理用户输入并生成分析结果
chat_dashboard/data_loader.py 负责从数据库加载数据并处理为图表格式
chat_dashboard/prompt.py 定义与LLM交互的提示词模板
chat_dashboard/out_parser.py 解析LLM输出并转换为应用需要的格式
datasource/service/db_summary_client.py 处理数据库表结构的提取和向量化
rag/summary/rdbms_db_summary.py 生成关系型数据库的表结构摘要

三、Text2SQL微调能力学习

1. Text2SQL微调概述

DB-GPT通过微调来持续提升Text2SQL效果,该部分功能主要在DB-GPT-Hub项目中实现。

https://cdn.nlark.com/yuque/__mermaid_v3/d36f972d8b6c886d6ba800491e8499e4.svg

2. 微调的核心流程

Text2SQL微调流程主要包括以下环节:

  • 数据准备: 收集和整理SQL训练数据集
  • 数据处理: 将数据转换为训练所需的格式
  • 模型选择: 选择适合的基础模型进行微调
  • 微调训练: 使用LoRA/QLoRA/P-tuning等技术进行微调
  • 模型评估: 评估微调后的模型效果
  • 模型集成: 将微调模型集成到DB-GPT中

3. 微调环境配置

推荐使用conda虚拟环境构建Text2SQL微调环境:

4. 训练数据配置

Text2SQL训练数据配置示例:

5. 模型训练命令

使用以下命令进行模型训练:

四、学习路径与资源

1. Chat Dashboard学习路径

  • 基础配置:
  • 学习如何配置PostgreSQL数据源
  • 了解DB-GPT的基本架构和组件
  • 核心概念:
  • 理解RAG(检索增强生成)在数据分析中的应用
  • 学习向量检索如何用于表结构识别
  • 代码学习:
  • chat.py开始,了解整体流程
  • 研究prompt.py中的提示词设计
  • 分析data_loader.py中的数据处理逻辑
  • 学习db_summary_client.py中的表结构提取方法
  • 实践应用:
  • 配置自己的PostgreSQL数据库
  • 尝试不同类型的分析问题
  • 观察系统如何选择图表类型

2. Text2SQL微调学习路径

  • 环境搭建:
  • 配置conda环境
  • 安装dbgpt-hub包
  • 数据处理:
  • 学习数据集格式要求
  • 了解数据预处理流程
  • 模型训练:
  • 学习LoRA/QLoRA等微调方法
  • 掌握训练参数调优技巧
  • 实战应用:
  • 使用自己的SQL数据进行微调
  • 将微调模型集成到DB-GPT中

3. 关键资源链接

五、进阶学习方向

1. 自定义提示词优化

修改prompt.py中的模板以优化分析质量和添加特定领域的分析方法指导。

2. 扩展图表类型

template/report/dashboard.json中添加新的图表类型并实现对应的数据处理逻辑。

3. 优化表结构识别

调整向量检索参数提高相关性,为特定领域数据库添加自定义表结构描述。

4. 自定义模型微调

针对特定业务领域的SQL数据集进行微调,提升模型在特定场景下的表现。

5. 多模态分析集成

将图像识别和文本分析结合,实现更复杂的数据分析场景。

六、总结

核心点在于掌握DB-GPT项目中的Chat Dashboard功能和Text2SQL微调能力。这两个模块结合使用,能够显著提升数据分析效率和SQL生成准确性,为数据驱动的业务决策提供强大支持。


启动说明

mermaid13 行
graph TD
    A[用户自然语言输入] --> B[数据库表结构识别]
    B --> C[生成SQL查询]
    C --> D[执行SQL获取数据]
    D --> E[数据分析处理]
    E --> F[生成可视化图表]
    F --> G[展示分析结果]
    
    subgraph 表结构识别流程
    H[首次连接提取表结构] --> I[创建向量索引]
    I --> J[语义检索相关表结构]
    J --> K[提供上下文给LLM]
    end
bash2 行
# 使用uv运行DB-GPT服务
uv run dbgpt start webserver --config configs/dbgpt-proxy-temp-tongyi.toml
toml12 行
[models]
[[models.llms]]
name = "qwen-max-latest"
provider = "${env:LLM_MODEL_PROVIDER:-proxy/tongyi}"
api_base = "https://dashscope.aliyuncs.com/compatible-mode/v1"
api_key = "${env:DASHSCOPE_API_KEY:-sk-xxxxxxxxxxxxxx}"

[[models.embeddings]]
name = "text-embedding-v3"
provider = "${env:EMBEDDING_MODEL_PROVIDER:-proxy/tongyi}"
api_url = "https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings"
api_key = "${env:DASHSCOPE_API_KEY:-sk-xxxxxxxxxxxxxx}"
python14 行
# 核心方法: db_summary_client.py中的get_db_summary
def get_db_summary(self, dbname, query, topk):
    """获取与用户查询相关的表信息"""
    table_vector_connector, field_vector_connector = self._get_vector_connector_by_db(dbname)
    retriever = DBSchemaRetriever(
        top_k=topk,
        table_vector_store_connector=table_vector_connector,
        field_vector_store_connector=field_vector_connector,
        separator="--table-field-separator--",
    )
    
    table_docs = retriever.retrieve(query)
    ans = [d.content for d in table_docs]
    return ans
python21 行
# prompt.py中的核心提示词模板
_DEFAULT_TEMPLATE = """
根据以下表结构定义:
{table_info}
提供专业的数据分析以支持用户的目标:
{input}

根据用户目标提供至少4个且最多8个维度的分析。
分析的输出数据不能超过4列,且不要使用pay_status等列作为SQL where条件进行数据过滤。
根据分析数据的特点,从下面提供的图表中选择最适合的一种进行数据展示,图表类型:
{supported_chat_type}

注意分析结果输出内容的长度,不要超过4000个token

给出正确的{dialect}分析SQL
1.不要使用未提供的值,如'paid'
2.所有查询的值必须有别名,如select count(*) as count from table
3.如果表结构定义使用{dialect}的关键字作为字段名,需要使用转义字符,如select `count` from table
4.仔细检查SQL的正确性,SQL必须正确,显示方法和简要分析思路的总结,并以以下json格式回复:
{response}
"""
python22 行
# chat.py中的do_action方法
def do_action(self, prompt_response):
    chart_datas: List[ChartData] = []
    dashboard_data_loader = DashboardDataLoader()
    for chart_item in prompt_response:
        try:
            field_names, values = dashboard_data_loader.get_chart_values_by_conn(
                self.database, chart_item.sql
            )
            chart_datas.append(
                ChartData(
                    chart_uid=str(uuid.uuid1()),
                    chart_name=chart_item.title,
                    chart_type=chart_item.showcase,
                    chart_desc=chart_item.thoughts,
                    chart_sql=chart_item.sql,
                    column_name=field_names,
                    values=values,
                )
            )
        except Exception as e:
            logger.warning(f"Failed to get chart data: {str(e)}")
bash6 行
# 创建虚拟环境
conda create -n dbgpt-hub python=3.10
conda activate dbgpt-hub

# 安装依赖
pip install dbgpt-hub
json8 行
{
  "example_text2sql_train": {
    "file_name": "example_text2sql_train.json"
  },
  "example_text2sql_dev": {
    "file_name": "example_text2sql_dev.json"
  }
}
bash17 行
CUDA_VISIBLE_DEVICES=0 python -m dbgpt_hub.train.sft \
    --stage sft \
    --model_name_or_path baichuan-inc/Baichuan2-7B-Base \
    --do_train \
    --dataset example_text2sql_train \
    --finetuning_type lora \
    --output_dir output_baichuan2 \
    --overwrite_cache \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 4 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 5e-5 \
    --num_train_epochs 40.0 \
    --plot_loss \
    --bf16