DB-GPT 数据源指南:支持的数据源、Text2SQL 原理与连接配置实战
2026/9/14 16:38:22 网站建设 项目流程

DB-GPT 数据源指南:支持的数据源、Text2SQL 原理与连接配置实战

【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI + Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT

本文基于 DB-GPT 官方文档《数据源》展开,完整覆盖其支持的数据源类型、Text2SQL 工作流程、通过 Web UI 与 REST API 添加数据源的实操步骤,并结合当前仓库源码深入剖析数据源参数持久化机制、SQLite 连接器实现与 Datasource REST API 细节,帮助你在理解原理的基础上把自然语言数据问答真正跑起来。

一、支持的数据源

DB-GPT 可以连接多种数据源,让你通过自然语言与数据库、电子表格和数据仓库交互。官方文档明确列出以下支持矩阵:

数据源类型状态
SQLiteRelational内置(默认)
MySQLRelational支持
PostgreSQLRelational支持
ClickHouseOLAP支持
DuckDBAnalytical支持
MSSQLRelational支持
OracleRelational支持
ExcelSpreadsheet支持
CSVFlat file支持

从源码结构看,仓库实际提供的连接器覆盖面更广。数据源类型枚举定义在 DBType 枚举,除上表类型外还包含:

数据源类型文件型数据库
MySQL / OceanBase / Oracle / MSSQL / PostgreSQL关系型
GaussDB / openGauss / Vertica / Doris / StarRocks关系型 / OLAP
ClickHouse / HiveOLAP / 数据仓库
DuckDB / SQLite / Spark嵌入式 / 分析是(is_file_db=True
MaxCompute云数仓
TuGraph / Neo4j图数据库

每个连接器都有对应的独立实现文件,位于 rdbms 连接器目录,例如conn_mysql.pyconn_postgresql.pyconn_clickhouse.pyconn_duckdb.pyconn_oracle.py等;对于方言特殊的数据库(OceanBase、StarRocks、Vertica)还单独提供了dialect/子目录。图数据库与 NoSQL 连接器(conn_neo4j.pyconn_tugraph.pyredis.py)则位于 datasource 根目录。

二、工作原理:Text2SQL 流程

数据源连接建立后,DB-GPT 通过 Text2SQL 管线将自然语言问题转化为 SQL 并执行。官方文档给出的流程如下:

具体步骤:

  1. 用户用自然语言提问;
  2. Text2SQL引擎分析问题与关联 schema;
  3. 根据问题上下文生成SQL
  4. 数据库执行查询;
  5. 结果被格式化并返回(可选图表)。

以 SQLite 连接器为例,schema 信息的采集依赖连接器的一组元数据方法,如 conn_sqlite.py 中的get_fields()(通过PRAGMA table_info获取字段)、_sync_tables_from_db()(从sqlite_master同步表与视图清单)、table_simple_info()(输出表名(列1,列2,...)形式的紧凑结构描述供模型使用)。这些方法正是 Schema Linking 阶段"自动将自然语言映射到表名和字段名"的底层数据来源。

三、添加数据源

3.1 通过 Web UI

官方文档给出的操作步骤(与仓库 Database 界面 一致):

  1. 打开 DB-GPT Web UI;
  2. 在侧边栏进入Data Sources
  3. 点击Add Data Source(右上角按钮);
  4. 选择数据库类型并填写连接信息;
  5. 测试连接并保存。

界面上以卡片形式展示所有可连接的数据源类型(SQLite、MySQL、PostgreSQL、ClickHouse、DuckDB、Oracle、MSSQL、StarRocks、Vertica、OceanBase、Hive、TuGraph、Neo4j、Redis 等),与源码中DBType枚举的注册结果一一对应。

3.2 通过 REST API

数据源连接也可以通过 REST API 管理,端点定义见 Datasource API 文档:

操作方法端点
创建数据源POST/api/v2/serve/datasources
更新数据源PUT/api/v2/serve/datasources
删除数据源DELETE/api/v2/serve/datasources/{datasource_id}
查询单个数据源GET/api/v2/serve/datasources/{datasource_id}
数据源列表GET/api/v2/serve/datasources

所有请求需携带 API Key 认证(Authorization: Bearer $DBGPT_API_KEY)。例如删除一个数据源:

DBGPT_API_KEY=dbgpt DATASOURCE_ID={YOUR_DATASOURCE_ID} curl -X DELETE "http://localhost:5670/api/v2/serve/datasources/$DATASOURCE_ID" \ -H "Authorization: Bearer $DBGPT_API_KEY"

创建/更新时请求体为Datasource Object,核心字段如下:

字段类型说明
idstring数据源唯一标识
db_namestring数据库名
db_typestring数据库类型,如sqlitemysql
db_pathstring文件型数据库的文件路径
db_host/db_portstring / int数据库主机与端口
db_user/db_pwdstring数据库用户与密码
commentstring数据库备注

这些字段名并非凭空定义,而是源码中参数持久化映射的直接结果。见下文 4.1 节的_persisted_state_mapping()。仓库还提供了完整的客户端示例 datasource_crud_example.py,演示了通过dbgpt_client完成数据源增删改查的完整流程。

3.3 通过 TOML 配置文件

官方文档同时说明:数据源连接也可以直接在 TOML 配置文件中设置。可参考仓库中的示例配置 dbgpt-app-config.example.toml 进行本地化配置;对于需要容器化部署的数据源(如 Hive),仓库提供了对应的编排文件 hive docker-compose 示例,并附带 Hive 集成测试 等验证脚本。

四、源码剖析:数据源参数与连接器机制

4.1 参数基类与持久化映射

所有数据源参数类都继承自 BaseDatasourceParameters(位于dbgpt-core包),它定义了三类关键能力:

  • db_url():抽象方法,返回 SQLAlchemy 引擎连接串;
  • create_connector():根据参数实例创建对应连接器;
  • persisted_state()/from_persisted_state():负责参数在 DB-GPT 数据源服务数据库中的序列化与反序列化。

其中_persisted_state_mapping()给出了一套标准的字段映射规则(parameter.py):

参数类字段持久化字段
hostdb_host
portdb_port
userdb_user
passworddb_pwd
databasedb_name
pathdb_path

无法归入上表的字段会被统一收纳进ext_config。另外,persisted_state()对文件型数据库有一个贴心处理:如果只有db_path而没有db_name,会从文件路径中解析数据库名,例如/path/to/db.sqlite会解析为sqlite_db(即{db_type}_{文件名}形式)。这也解释了 Web UI 中数据源命名规则——它恰好与 DBType.parse_file_db_name_from_path 的逻辑保持一致。

4.2 以 SQLite 连接器为例

SQLite 是 DB-GPT 内置默认数据源,其完整实现在 conn_sqlite.py。参数类核心字段:

__type__ = "sqlite" path: str = dataclasses.field( metadata={ "help": _( "SQLite database file path. Use ':memory:' for in-memory database" ), "required": True, } ) check_same_thread: bool = dataclasses.field(default=False, ...) driver: str = dataclasses.field(default="sqlite", ...) def db_url(self, ssl: bool = False, charset: Optional[str] = None): return f"{self.driver}:///{self.path}"

要点:

  • path为必填项,支持:memory:内存库;连接串形如sqlite:///path/to/file.db
  • check_same_thread默认False,即允许连接跨线程共享,便于 Web 服务多线程场景复用;
  • 连接器通过@auto_register_resource装饰器自动注册到 AWEL 资源中心(ResourceCategory.DATABASE分类),这正是 Web UI 中"Data Sources"卡片列表能够自动出现的机制。

除标准连接器外,该文件还提供SQLiteTempConnector(L242-L354):基于临时文件创建一次性 SQLite 库,close()时自动删除文件,适合在沙箱内临时落表做数据分析。仓库中的 RDBMS 连接器测试 与 集成测试目录(覆盖 MySQL、Oracle、ClickHouse、Doris、StarRocks、TuGraph 等)可作为各连接器可用性验证的参考。

五、Text2SQL 能力与效果优化

DB-GPT 擅长将自然语言转换为 SQL 查询,官方文档归纳了四大能力:

  • Schema linking—— 自动将自然语言映射到表名和字段名;
  • 多轮对话—— 通过追问逐步修正查询;
  • 图表生成—— 将查询结果可视化为图表和 dashboard;
  • 微调—— 针对特定业务域提升 Text2SQL 准确率。

提示:为了获得更好的 Text2SQL 效果,建议数据库表名、字段名和注释都尽量语义清晰。

连接建立后,可以直接通过chat_data模式对指定数据源发起问答。以 curl 为例(DB_NAME为已添加的数据源名):

DBGPT_API_KEY=dbgpt DB_NAME="{your_db_name}" curl -X POST "http://localhost:5670/api/v2/chat/completions" \ -H "Authorization: Bearer $DBGPT_API_KEY" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{\"messages\":\"show space datas limit 5\",\"model\":\"gpt-4o\", \"chat_mode\": \"chat_data\", \"chat_param\": \"$DB_NAME\"}"

也可以直接使用 Python 客户端(完整示例见 client_chat_example.py):

from dbgpt_client import Client DBGPT_API_KEY = "dbgpt" DB_NAME = "{your_db_name}" client = Client(api_key=DBGPT_API_KEY) res = client.chat( messages="show space datas limit 5", model="gpt-4o", chat_mode="chat_data", chat_param=DB_NAME )

返回内容中会带有<chart-view>片段(内含 SQL 与查询结果数据),前端据此渲染表格与图表,即流程图末端"响应格式化"步骤的落地形态。仓库还内置了多套可直接导入测试库的示例数据(如 case_1_student_manager_sqlite.sql),配合示例应用即可快速搭建 Text2SQL 演示环境。

六、延伸阅读

围绕数据源主题,仓库中以下文档可继续深入:

  • Chat DB —— 与数据库对话;
  • Chat Excel —— 与 Excel 文件对话;
  • Chat Dashboard —— 生成数据看板;
  • Datasource Integrations —— 安装更多连接器;
  • Connections Module —— 深入理解数据源管理机制。

掌握以上内容后,你可以完成从"选择数据源类型 → 通过 Web UI / REST API / 配置文件建立连接 → 理解 Text2SQL 从 Schema Linking 到图表输出的完整链路"的完整闭环,并基于源码中的参数映射与连接器注册机制,为自定义数据库方言扩展新的连接器。

【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI + Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询