DB-GPT dbgpts 生态组件完全指南:可复用市场、CLI 命令与自定义包开发实战
【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI + Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT
dbgpts是 DB-GPT 官方的可复用组件社区仓库,集中托管 apps(完整应用)、operators(AWEL 算子)、workflow templates(工作流模板)与 agents(智能体定义)。本篇指南将以 getting-started/tools/dbgpts.md 为核心骨架,结合本仓库内 CLI 实现与加载器源码,系统讲解 dbgpts 的组件类型、安装方式、全套命令用法、Web UI 集成方式,以及从零创建并发布自定义 dbgpts 包的完整流程。读完本文,你将能够熟练安装/卸载/更新组件、管理自定义仓库(repo),并写出符合规范、可被 DB-GPT 自动加载的 dbgpts 包。
什么是 dbgpts 生态
dbgpts 是 DB-GPT 的可复用组件官方社区仓库,它为 DB-GPT 提供了"即装即用"的扩展能力。与需要从零编码不同,这些组件被设计为可以直接被 DB-GPT 的 CLI 或 Web UI 消费的标准化单元。
官方将组件划分为四种核心类型:
| 组件类型 | 说明 | 典型示例 |
|---|---|---|
| Apps | 可直接安装使用的完整应用 | 数据分析应用、报表生成器 |
| Operators | 用于工作流的 AWEL 算子 | 文本切分器、HTTP 请求、LLM 调用 |
| Workflow Templates | 预构建的 AWEL 工作流 DAG | RAG 流水线、多智能体对话 |
| Agents | 预配置的智能体定义 | SQL 分析师、代码审查员 |
从本仓库源码来看,这一分类体系比文档描述得更为细致。在 base.py 中,DEFAULT_PACKAGES定义了仓库内实际的目录组织为["agents", "apps", "operators", "workflow", "resources"],对应的包类型DEFAULT_PACKAGE_TYPES为["agent", "app", "operator", "flow", "resource"]。这意味着除了文档表格中的四类外,源码中还支持resource(资源/工具)类型——它用于打包诸如函数工具(@tool装饰的函数)和 Agent 资源等能力。
类型与目录的映射关系由TYPE_TO_PACKAGE明确定义:
TYPE_TO_PACKAGE = { "agent": "agents", "app": "apps", "operator": "operators", "flow": "workflow", "resource": "resources", }安装 dbgpts CLI
dbgptsCLI 是随 DB-GPT 一并安装的命令行工具。安装时只需启用dbgptsextra:
uv sync --all-packages --extra "dbgpts" ...该 extra 在 dbgpt-app/pyproject.toml 中定义为:
dbgpts = [ # For build dbgpts apps, we will be removed in the future. "build", "poetry" ]也就是说,该 extra 会额外引入build与poetry两个构建工具。这是因为 dbgpts 包的安装机制需要先构建 wheel 再安装(详见下文"安装的底层原理"一节)。
另外,从 cli.py 的check_build_tools_installed()逻辑可以看出,CLI 在安装前会检测uv、poetry、build、setuptools四类构建工具:uv为首选推荐,若完全没有任何构建工具会直接报错退出;若缺少uv仅给出警告提示(建议pip install uv),不会中断安装。因此,保持环境中至少有一个可用的构建工具是顺利安装组件的前提。
CLI 命令全解析
dbgpts命令通过 cli_scripts.py 集成到dbgpt主命令下,注册为dbgpt app、dbgpt repo、dbgpt new app等子命令组。日常使用中你既可以直接调用dbgpts,也可以使用dbgpt app/dbgpt repo等别名。
浏览可用组件
# 列出远端(仓库中)所有可安装组件 dbgpts list-remote # 列出本地已安装的组件 dbgpts listlist-remote背后对应 repo.py 中的list_repo_apps():它遍历所有已配置的 repo,扫描agents/、apps/、operators/、workflow/、resources/五个目录下包含dbgpts.toml元数据文件的包,并以表格形式输出Repository / Type / Name三列。其中Type列展示的是agents、apps等目录名。默认情况下该命令会先执行一次git pull同步远端仓库,保证列表是最新的。
list则对应list_installed_apps(),它读取安装目录并输出Name / Type / Repository / Path四列,Type为agent、app、operator、flow、resource中的一种。
小提示:
list-remote与list均支持-r/--repo <repo>指定单一仓库、-U/--update控制是否在列出前更新仓库。
安装组件
dbgpts install <package-name>install支持一次传入多个包名(nargs=-1),并支持以下选项:
# 从指定仓库安装,且安装前不更新仓库 dbgpts install <package-name> -r <repo> --update false # 一次性安装多个组件 dbgpts install <package-a> <package-b>-r/--repo:指定从哪个仓库安装(默认在全部仓库中查找);-U/--update:布尔开关,是否在安装前更新仓库。
安装流程(对应 repo.py 的install()→copy_and_install())大致为:
check_with_retry()在所有仓库的五个类型目录下查找该名称且带dbgpts.toml的包,找不到则报错;- 将包目录整体复制到安装目录(
~/.dbgpts/packages/<env_sig>/<name>); - 检测是否为 poetry 工程(依据
pyproject.toml的build-system与[tool.poetry]),选择构建工具; - 构建 wheel 包;
- 依次尝试
uv pip install→pip install→ 手动解压 wheel 到 site-packages; - 写入
install_metadata.toml(记录包名与来源仓库)完成安装。
更新组件
dbgpts update <package-name>需要说明的是,update命令在 CLI 层实际对应 cli.py 中的update_repo——它面向的是**仓库(repo)**而非单个包:不带参数时更新所有仓库,-r <repo>指定更新某一个仓库,repo == "all"也会触发全量更新。其实现为对每个仓库目录执行git pull(见 repo.py 的update_repo())。
因此,在日常实践中"更新某个组件"的推荐路径是:先dbgpts update同步仓库元数据,再dbgpts reinstall <package-name>重新安装该组件以获取最新版本。
卸载组件
dbgpts uninstall <package-name>卸载流程(uninstall()):若组件未安装会直接报错;否则在安装目录下执行pip uninstall <name> -y清理 Python 包,随后删除安装目录。
重装组件
dbgpts reinstall <package-name>reinstall()的语义是uninstall+install的组合,同样支持-r/--repo与-U/--update选项,适合在组件升级后刷新本地版本。
仓库(repo)管理
除了包本身,CLI 还提供了完整的仓库管理能力(同样注册在dbgpt repo下):
# 列出所有已配置的仓库 dbgpts list # 添加一个新仓库(git 地址或本地目录) dbgpts add --url <git-or-local-path> [-r <repo-name>] [-b <branch>] # 更新仓库(不带参数更新全部,-r 指定单个) dbgpts update [-r <repo>] # 移除仓库 dbgpts remove <repo-name>对应源码中的add_repo():仓库名必须形如group/name(如eosphoros/dbgpts);URL 以http或git开头时执行git clone,若是本地目录则创建软链接。当没有任何仓库时,安装/列出命令会自动拉取默认仓库eosphoros/dbgpts(见_install_default_repos_if_no_repos()与 base.py 中的DEFAULT_REPO_MAP)。
使用模板新建组件
dbgpts app -n <name> [-l <label>] [-d <description>] [-t <type>] [--definition_type <json|python>] [-C <directory>](对应dbgpt new app别名)其中:
-n/--name:必填,组件名称;-l/--label:展示名称,默认由 name 自动生成(-、_替换为空格后转标题格式);-d/--description:描述,默认空;-t/--type:类型,取自click.Choice(DEFAULT_PACKAGE_TYPES),即agent / app / operator / flow / resource,默认flow;--definition_type:定义方式,json或python,默认json;注意除flow外其余类型强制为python;-C/--directory:工作目录,默认当前目录。
在 Web UI 中使用 dbgpts
组件安装完成后,DB-GPT Web 端会自动发现并展示它们:
- Apps出现在应用商店(App Store)中;
- Operators出现在 AWEL Flow 编辑器的算子面板中;
- Workflow templates可导入 Flow 编辑器;
- Agents可在创建多智能体应用时被选用。
Web 端的实现位于 web/pages/construct/dbgpts/index.tsx:该页面通过postDbgptsHubUpdate、postDbgptsQuery、postDbgptsInstall、postDbgptsMy、postDbgptsUninstall等 API 与后端交互,提供"市场(market)"与"我的(my)"两个视图,支持搜索、按类型过滤、安装/卸载操作。后端则由 dbgpts/hub/service/service.py 提供服务,其refresh_hub_from_git()复用list_dbgpts()扫描仓库中的组件并入库。
这套"安装即自动出现在 Web UI"的机制,核心依赖运行时的加载器DBGPTsLoader(见 loader.py)。它是一个系统组件(name = "dbgpt_dbgpts_loader"),在应用启动前加载一次已安装的包,之后默认每 10 秒(load_dbgpts_interval=10)重新扫描安装目录,并自动完成以下注册:
- agent包:将包内继承
ConversableAgent的类注册到agent_manager; - resource包:将函数工具与
Resource实例/类注册到resource_manager; - flow包:转换为
FlowPanel,供 Flow 编辑器以"只读、可导入"的方式展示(editable: False,由_flow_package_to_flow_panel()实现)。
仓库目录结构
dbgpts 社区仓库按组件类型组织目录:
dbgpts/ ├── apps/ # 完整应用 ├── operators/ # AWEL 算子 ├── workflow/ # 工作流模板 └── agents/ # 智能体定义结合本仓库源码,实际约定比这更完整——包含resources目录(打包函数工具与 Agent 资源),并且每个包目录下必须存在dbgpts.toml元数据文件才会被 CLI 扫描与识别(见 repo.py 的check_with_retry()/list_repo_apps())。
包的元数据文件dbgpts.toml结构(对应 loader.py 的parse_package_metadata())如下:
[flow] # 或 [agent] / [operator] / [resource] label = "My Flow" name = "my_flow" version = "0.1.0" description = "A example flow" authors = [] definition_type = "json" # 或 "python" [json_config] file_path = "definition/flow_definition.json" # definition_type=json 时必填其中name、label、package_type、version、description、path、root、repo、package是 BasePackage 的核心字段;安装目录下还会生成install_metadata.toml(记录name与来源repo),它是判断一个目录是否为"已安装包"的关键标志。
创建自己的 dbgpts 包
推荐使用模板命令快速生成符合规范的包骨架:
# 生成一个 flow 类型的包(JSON 定义) dbgpts app -n my_flow -l "My Flow" -d "A example flow" -t flow --definition_type json # 生成一个 operator 类型的包(Python 定义) dbgpts app -n hello_operator -t operator命令生成的骨架由 template.py 的create_template()完成,会按TYPE_TO_PACKAGE的映射在工作目录下创建workflow/、operators/、agents/、resources/等子目录,并使用uv init(其次 poetry、最后手工创建)初始化 Python 工程,同时产出:
dbgpts.toml:组件元数据(上述示例即来自此处);MANIFEST.in:包含dbgpts.toml与*/definition/*.json,确保构建时元数据被打包;- 类型对应的
__init__.py模板代码。
以 operator 为例,模板会生成一个带 AWELViewMetadata元数据的HelloWorldOperator(MapOperator[str, str]);以 agent 为例,会生成继承ConversableAgent的HelloWorldSpeakerAgent与配套Action。这些模板代码可直接运行,是学习自定义组件写法的最佳起点。
若选择纯手工创建,一个 flow(JSON 定义)包的最小结构为:
my_flow/ ├── dbgpts.toml # 元数据([flow] 段 + json_config.file_path) ├── pyproject.toml # 构建配置(setuptools/poetry 均可) ├── MANIFEST.in # 打包包含 dbgpts.toml 与定义文件 └── my_flow/ ├── __init__.py └── definition/ └── flow_definition.json # AWEL 流程图 JSON(节点/边/视图)随后将包提交到 dbgpts 社区仓库即可共享:请遵循仓库目录约定放置包、确保包含元数据文件(dbgpts.toml)并提交 Pull Request。安装方的加载链路会自动完成剩余工作——DBGPTsLoader每 10 秒扫描安装目录,将 JSON 定义的 flow 解析为可导入编辑器的FlowPanel,将 Python 定义的 flow 直接加载为DAG对象,将 agent/operator/resource 注册到对应管理器。
延伸阅读
- 构建 AWEL 工作流:AWEL Flow
- MCP 工具集成:MCP Protocol
- 深入理解 dbgpts 加载器与包模型:loader.py、repo.py、template.py
- 安装流程的测试验证:test_dbgpts_repo.py(覆盖"构建失败即中止安装""wheel 安装失败不落盘元数据"等关键行为)
【免费下载链接】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),仅供参考