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 可以连接多种数据源,让你通过自然语言与数据库、电子表格和数据仓库交互。官方文档明确列出以下支持矩阵:
| 数据源 | 类型 | 状态 |
|---|---|---|
| SQLite | Relational | 内置(默认) |
| MySQL | Relational | 支持 |
| PostgreSQL | Relational | 支持 |
| ClickHouse | OLAP | 支持 |
| DuckDB | Analytical | 支持 |
| MSSQL | Relational | 支持 |
| Oracle | Relational | 支持 |
| Excel | Spreadsheet | 支持 |
| CSV | Flat file | 支持 |
从源码结构看,仓库实际提供的连接器覆盖面更广。数据源类型枚举定义在 DBType 枚举,除上表类型外还包含:
| 数据源 | 类型 | 文件型数据库 |
|---|---|---|
| MySQL / OceanBase / Oracle / MSSQL / PostgreSQL | 关系型 | 否 |
| GaussDB / openGauss / Vertica / Doris / StarRocks | 关系型 / OLAP | 否 |
| ClickHouse / Hive | OLAP / 数据仓库 | 否 |
| DuckDB / SQLite / Spark | 嵌入式 / 分析 | 是(is_file_db=True) |
| MaxCompute | 云数仓 | 否 |
| TuGraph / Neo4j | 图数据库 | 否 |
每个连接器都有对应的独立实现文件,位于 rdbms 连接器目录,例如conn_mysql.py、conn_postgresql.py、conn_clickhouse.py、conn_duckdb.py、conn_oracle.py等;对于方言特殊的数据库(OceanBase、StarRocks、Vertica)还单独提供了dialect/子目录。图数据库与 NoSQL 连接器(conn_neo4j.py、conn_tugraph.py、redis.py)则位于 datasource 根目录。
二、工作原理:Text2SQL 流程
数据源连接建立后,DB-GPT 通过 Text2SQL 管线将自然语言问题转化为 SQL 并执行。官方文档给出的流程如下:
具体步骤:
- 用户用自然语言提问;
- Text2SQL引擎分析问题与关联 schema;
- 根据问题上下文生成SQL;
- 数据库执行查询;
- 结果被格式化并返回(可选图表)。
以 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 界面 一致):
- 打开 DB-GPT Web UI;
- 在侧边栏进入Data Sources;
- 点击Add Data Source(右上角按钮);
- 选择数据库类型并填写连接信息;
- 测试连接并保存。
界面上以卡片形式展示所有可连接的数据源类型(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,核心字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 数据源唯一标识 |
db_name | string | 数据库名 |
db_type | string | 数据库类型,如sqlite、mysql |
db_path | string | 文件型数据库的文件路径 |
db_host/db_port | string / int | 数据库主机与端口 |
db_user/db_pwd | string | 数据库用户与密码 |
comment | string | 数据库备注 |
这些字段名并非凭空定义,而是源码中参数持久化映射的直接结果。见下文 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):
| 参数类字段 | 持久化字段 |
|---|---|
host | db_host |
port | db_port |
user | db_user |
password | db_pwd |
database | db_name |
path | db_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),仅供参考