
DB-GPT 接入 MSSQL 数据源将 SQL Server 作为 LLM 问数的关系型数据源【免费下载链接】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 中除了向量化检索RAG之外还有一种更“可控”的知识接入方式直接把关系型数据库注册为数据源Datasource让 LLM 基于真实的表结构生成并执行 SQL。官方集成文档 mssql_install.md 以 MSSQLMicrosoft SQL Server为例给出了完整的接入流程安装依赖、准备数据库服务、启动 Web 服务以及在控制台完成 MSSQL 数据源配置。按照该文档操作后你可以把任意 SQL Server 库接入 DB-GPT实现自然语言查询数据库表结构、执行 SQL 并返回结果的能力。一、为什么用 MSSQL 数据源而不是纯向量检索原文档给出的理由是使用 MSSQL 实现数据源在一定程度上可以缓解alleviate向量数据库检索带来的不确定性uncertainty与可解释性interpretability问题。换言之向量检索的命中结果是“相似片段”用户很难验证答案依据数据源方式下LLM 生成的是明确可执行的 SQL执行过程和结果均可复核数据口径完全由数据库本身保证。DB-GPT 通过统一的 RDBMS 连接器体系支持多种关系型数据库MSSQL 的支持状态与对应安装项在 integrations.md 的汇总表中列出MSSQL 标记为受支持依赖项为--extra datasource_mssql。二、安装依赖按照文档首先需要安装包含datasource_mssql扩展extra的依赖组合uv sync --all-packages \ --extra base \ --extra datasource_mssql \ --extra rag \ --extra storage_chromadb \ --extra dbgpts各扩展的作用extra作用basedbgpt 核心基础依赖datasource_mssqlMSSQL 数据源驱动rag文档解析与 RAG 相关依赖spacy、pypdf 等storage_chromadbChromaDB 向量存储onnxruntime chromadbdbgpts应用/Agent 能力从源码看datasource_mssql这个 extra 定义在 packages/dbgpt-ext/pyproject.toml内容就是一行datasource_mssql [pymssql]也就是说 MSSQL 接入的 Python 驱动是pymssql配合 SQLAlchemy 的mssql方言这一点与后文连接器实现中的默认 driver 完全一致。三、准备 MSSQL 数据库服务文档要求先准备一个可用的 MSSQL 数据库服务原文档指向微软官方的 SQL Server 安装说明可参考 Microsoft 官方文档安装 SQL Server然后创建用于 DB-GPT 连接的数据库与账号。准备就绪后按文档启动 DB-GPT 的 webserveruv run dbgpt start webserver --config configs/dbgpt-proxy-openai.toml文档同时给出了一个等效的备选启动方式直接以 Python 模块方式运行应用入口uv run python packages/dbgpt-app/src/dbgpt_app/dbgpt_server.py --config configs/dbgpt-proxy-openai.toml两条命令的区别仅在于入口形式前者是dbgpt命令行封装后者直接调用 dbgpt_server.py 入口文件两者都使用 dbgpt-proxy-openai.toml 作为配置文件即以 OpenAI 兼容接口代理大模型服务。启动成功后即可进入 Web 控制台配置数据源。四、MSSQL 数据源配置参数详解文档的 “MSSQL Configuration” 一节展示了在控制台新增 MSSQL 数据源时的配置表单。表单字段并非随意设计而是由源码中的两个参数类共同定义这里结合源码把每个字段讲透4.1 连接参数MSSQLParametersMSSQL 专属参数类位于 conn_mssql.pydataclass class MSSQLParameters(RDBMSDatasourceParameters): MSSQL connection parameters. __type__ mssql driver: str field( defaultmssqlpymssql, metadata{help: _(Driver name for MSSQL, default is mssqlpymssql.)}, )__type__ mssql数据源类型标识与 schema.py 中的MSSQL DbInfo(mssql)对应driver数据库驱动默认值mssqlpymssql与第二节安装的 pymssql 驱动一致。4.2 通用 RDBMS 参数父类字段MSSQLParameters继承自 base.py 中的RDBMSDatasourceParameters控制台表单中的其余字段均来自它参数说明 / 默认值host数据库主机如localhostport数据库端口SQL Server 默认为 1433user连接用户名database数据库名password密码支持直接填写也可使用环境变量写法${env:DBGPT_DB_PASSWORD}默认值即该环境变量占位符表单中标记为 privacy 字段pool_size连接池大小默认 5max_overflow最大溢出连接数默认 10pool_timeout连接池获取超时秒默认 30pool_recycle连接回收周期秒默认 3600pool_pre_ping取连接前是否做存活探测默认 True连接 URL 由父类的db_url()方法拼装见 base.py{driver}://{quote(user)}:{urlquote(password)}{host}:{port}/{database}即最终形如mssqlpymssql://user:pwdhost:1433/yourdb用户名和密码会做 URL 转义。上表中的五个连接池参数则通过engine_args()传给 SQLAlchemy 的create_engine。4.3 在控制台完成配置在 DB-GPT Web 控制台的“数据源”页面选择类型mssql按上述字段填写 host、port、user、password、databasedriver 保持默认mssqlpymssql即可保存并测试连接。配置成功后该库即成为可供 Agent / 数据问答应用引用的数据源。五、源码纵深MSSQLConnector 的 MSSQL 适配细节DB-GPT 的每个关系型数据库连接器都以RDBMSConnector位于 base.py为基类。MSSQL 连接器 MSSQLConnector 声明为class MSSQLConnector(RDBMSConnector): db_type: str mssql db_dialect: str mssql driver: str mssqlpymssql default_db [master, model, msdb, tempdb, modeldb, resource, sys]其中default_db列出了 SQL Server 的系统库业务库不应配置为这些系统库。基类通过inspect(engine)MetaData.reflect完成表元数据反射见 base.py而 MSSQL 连接器针对 SQL Server 的元数据体系做了多处覆盖这正是“可解释 SQL 问数”能落到 SQL Server 上的关键5.1 表结构信息 table_simple_info()基类的table_simple_info()使用的是 MySQL 风格 SQLgroup_concatinformation_schema在 SQL Server 上不可用。MSSQL 版本conn_mssql.py改为逐表查询INFORMATION_SCHEMA.TABLES与INFORMATION_SCHEMA.COLUMNS拼出表名(列1,列2,...);形式的紧凑 schema 描述供 LLM 选择表与字段。5.2 列信息与注释 get_fields()SQL Server 的INFORMATION_SCHEMA没有 MySQL 的COLUMN_TYPE/COLUMN_COMMENT因此get_fields()被专门重写conn_mssql.py从INFORMATION_SCHEMA.COLUMNS取列名、类型、默认值、可空性并通过LEFT JOIN sys.extended_properties中名为MS_Description的扩展属性微软的标准做法读取列注释最终统一返回(column_name, data_type, default, is_nullable, comment)五元组与其他数据库连接器保持同构。该方法还支持schema.table形式的表名缺省 schema 为dbo。5.3 表名、列、索引的其他覆盖get_table_names()conn_mssql.py优先从INFORMATION_SCHEMA.TABLES取schema.table限定TABLE_CATALOG DB_NAME()若为空则回退到sys.tables保证不同环境下一致可用get_columns()从INFORMATION_SCHEMA.COLUMNS返回列名、类型、可空、默认值与CHARACTER_MAXIMUM_LENGTHget_indexes()联合查询sys.indexes/sys.index_columns/sys.columns/sys.tables/sys.schemas返回每个索引的名称、列列表、是否唯一、是否主键get_users()/get_grants()分别从sys.server_principalsSQL_LOGIN和sys.server_permissions读取登录账号与服务器级授权为控制台的用户/权限视图提供数据get_charset()/get_collation()分别用DATABASEPROPERTYEX(DB_NAME(), Collation)与SERVERPROPERTY(Collation)读取库/服务器排序规则。这些元数据能力与基类的get_table_info()生成CREATE TABLE文本 可选样本行/索引注释组合在一起构成了喂给 LLM 的库表上下文。5.4 查询超时对 mssql 方言的处理基类query_ex()支持按方言设置查询超时。对mssql分支base.pyelif self.dialect mssql: # MSSQL: Use execution_options if supported by driver sql_with_timeout sql.execution_options(timeoutint(timeout)) return _execute_query(session, sql_with_timeout, params)即通过 SQLAlchemy 的execution_options(timeout...)在驱动/执行层实现超时注释也说明 MSSQL 与 DuckDB 一样无需像 MySQL/PostgreSQL 那样再显式重置会话级超时见 base.py。5.5 连接器如何被系统发现服务端的 connector_manager.py 在on_init()阶段显式导入MSSQLConnectorfrom dbgpt_ext.datasource.rdbms.conn_mssql import MSSQLConnector # noqa: F401而MSSQLParameters类上标注的auto_register_resource(labelMSSQL datasource, categoryResourceCategory.DATABASE, ...)conn_mssql.py会把该数据源类型注册到 AWEL 资源体系中从而出现在 Web 控制台的数据源类型列表中。从源码结构看只要依赖安装成功、dbgpt-ext被加载控制台即会列出 “MSSQL datasource” 选项——这也解释了第二节为什么要安装datasource_mssqlextra没有 pymssqlSQLAlchemy 无法建立mssqlpymssql引擎。六、小结回到原文档的四步主线uv sync安装datasource_mssql即 pymssql等 extra准备 MSSQL 服务与业务库uv run dbgpt start webserver --config configs/dbgpt-proxy-openai.toml启动服务或直接运行 dbgpt_server.py在控制台按host / port / user / password / database / driver(mssqlpymssql)填写 MSSQL 配置。完成之后SQL Server 库即接入 DB-GPT 的统一数据源体系元数据反射由MSSQLConnector针对 SQL Server 的INFORMATION_SCHEMA与sys.*视图做了完整适配LLM 可以基于真实表结构进行 SQL 问数与数据分析结果可执行、可验证兼顾了准确率与可解释性。【免费下载链接】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),仅供参考