尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DB-GPT 数据分析多智能体应用实战:从 Superstore 数据准备到自动化指标异常分析报告

DB-GPT 数据分析多智能体应用实战:从 Superstore 数据准备到自动化指标异常分析报告 DB-GPT 数据分析多智能体应用实战从 Superstore 数据准备到自动化指标异常分析报告【免费下载链接】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 官方实践文档 data_analysis_agent.md完整走通部署 DB-GPT → 准备 Superstore 数据集与指标知识库 → 组装 MetricInfoRetriever / DataScientist / AnomalyDetector / VolatilityAnalyzer / ReportGenerator 五个智能体 → 生成指标分析报告的端到端流程并结合仓库源码解释每个智能体的职责边界与协作机制帮助读者在自己的业务库上复刻一套可复用的数据分析多智能体应用。1. 方案总览一条指标驱动的分析流水线DB-GPT 的 Web 端支持多智能体自动规划模式Auto-Plan应用用户用自然语言提问后Planner 会根据各个智能体的 Profile 描述自动编排执行顺序。本案例构建的分析流水线为智能体页面显示名源码位置职责所需资源MetricInfoRetrievermetric_info_agent.py从知识库检索指标元信息字段、计算规则、建议维度、阈值知识库DataScientistdata_scientist_agent.py基于数据库结构生成并执行分析 SQL数据库AnomalyDetectoranomaly_detection_agent.py比较基期值与当期值判断波动是否超阈值无依赖上游输出VolatilityAnalyzervolatility_analysis_agent.py对确认异常的指标按建议维度做归因下钻数据库ReportGeneratorreport_generation_agent.py汇总全部结果输出 Markdown 报告无各智能体 Profile 中的desc字段实际承担了编排契约的作用例如 MetricInfoRetriever 的 desc 声明当用户问题涉及某个业务指标时必须首先调用此智能体获取指标信息VolatilityAnalyzer 的 desc 声明须在 AnomalyDetector 确认异常后调用并应基于 MetricInfoRetriever 提供的建议分析维度进行下钻分析不得在未检测到异常时主动执行归因。正是这些描述让 Planner 能自动推导出正确的调用顺序与数据依赖。2. 项目部署与环境准备2.1 克隆代码库git clone https://gitcode.com/GitHub_Trending/db/DB-GPT.git cd DB-GPT2.2 使用 uv 管理依赖DB-GPT 推荐使用uv管理 Python 环境# 安装 uv 工具 curl -LsSf https://astral.sh/uv/install.sh | sh # 验证安装 uv --version2.3 按模型类型安装依赖根据使用的 LLM 来源选择 extra 组合项目为多包工作区--all-packages会同时安装packages/下的 dbgpt-core、dbgpt-serve 等子包OpenAI 代理模型uv sync --all-packages \ --extra base \ --extra proxy_openai \ --extra rag \ --extra storage_chromadb \ --extra dbgpts本地模型以 GLM4 为例含 CUDA 与 bitsandbytes 量化依赖uv sync --all-packages \ --extra base \ --extra cuda121 \ --extra hf \ --extra rag \ --extra storage_chromadb \ --extra quant_bnb \ --extra dbgpts其中rag与storage_chromadb两个 extra 对应本文案例用到的知识库能力Chroma 向量存储。2.4 配置 LLM 与 Embedding 模型OpenAI 代理模型配置仓库自带模板见 configs/dbgpt-proxy-openai.toml模板中模型名与 API Key 支持${env:...}环境变量占位[system] language zh encrypt_key your_secret_key [service.web] host 0.0.0.0 port 5670 [service.web.database] type sqlite path pilot/meta_data/dbgpt.db [rag.storage] [rag.storage.vector] type chroma persist_path pilot/data # 模型配置 [models] [[models.llms]] name gpt-3.5-turbo provider proxy/openai api_key your-openai-api-key [[models.embeddings]] name text-embedding-ada-002 provider proxy/openai api_key your-openai-api-key本地模型配置对应 configs/dbgpt-local-glm.toml[system] language zh encrypt_key your_secret_key [service.web] host 0.0.0.0 port 5670 [service.web.database] type sqlite path pilot/meta_data/dbgpt.db [rag.storage] [rag.storage.vector] type chroma persist_path pilot/data # 模型配置 [models] [[models.llms]] name THUDM/glm-4-9b-chat-hf provider hf # 如果未提供模型将从 Hugging Face 模型中心下载 # 取消注释以下行以指定本地文件系统中的模型路径 # path the-model-path-in-the-local-file-system [[models.embeddings]] name BAAI/bge-large-zh-v1.5 provider hf # 如果未提供模型将从 Hugging Face 模型中心下载 # 取消注释以下行以指定本地文件系统中的模型路径 # path the-model-path-in-the-local-file-system关键点说明[service.web.database]DB-GPT 自身的元数据库会话、应用定义等案例用 SQLite落在pilot/meta_data/dbgpt.db[rag.storage.vector]知识库向量存储案例使用本地 Chroma数据目录pilot/data本地模型配置中若不提供path权重将从 Hugging Face 模型中心自动下载有本地权重时可取消注释path指定路径。3. 数据集与数据库准备本案例使用Superstore 数据集Kaggle 上的j2ngb/superstore-data可自行下载并导入 MySQL。步骤确保已安装并启动 MySQL 服务创建数据库CREATE DATABASE superstore; USE superstore;创建superstore_dataset表表结构中每列均带 COMMENT 注释这对后续 LLM 理解表结构、生成准确 SQL 很有帮助CREATE TABLE superstore_dataset ( row_id int NOT NULL COMMENT Unique ID for each row, order_id varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Unique Order ID for each Customer., order_date date NULL DEFAULT NULL COMMENT Order Date of the product., ship_date date NULL DEFAULT NULL COMMENT Shipping Date of the Product., ship_mode varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Shipping Mode specified by the Customer., customer_id varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Unique ID to identify each Customer., customer_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Name of the Customer., segment varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT The segment where the Customer belongs., country varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Country of residence of the Customer., city varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT city where the customer lives., state varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT State of residence of the Customer., postal_code varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Postal Code of every Customer., region varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Region where the Customer belong., market varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT market name, product_id varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Unique ID of the Product., category varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Category of the product ordered., sub_category varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Sub-Category of the product ordered., product_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT Name of the Product, sales float(10, 2) NULL DEFAULT NULL COMMENT Product sales price, quantity int NULL DEFAULT NULL COMMENT Quantity of the Product., discount float(10, 3) NULL DEFAULT NULL COMMENT Discount provided., profit float(10, 4) NULL DEFAULT NULL COMMENT Profit/Loss incurred., shipping_cost float(10, 2) NULL DEFAULT NULL COMMENT shipping cost, order_priority varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT order priority, PRIMARY KEY (row_id) USING BTREE ) ENGINE InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ROW_FORMAT Dynamic;将下载的数据文件导入superstore_dataset表可按 CSV/JSON 格式使用LOAD DATA或客户端导入工具。4. 知识库准备让智能体认识你的业务指标数据分析多智能体应用需要一份业务知识文件来描述数据集的指标口径包括指标名、字段、计算规则、建议分析维度和异常阈值。创建指标.txt不同指标之间用###分隔便于按分隔符分片本案例定义两个指标### 指标名称订单数量 字段quantity 计算规则无 建议计算维度地区region 阈值0.01 ### 指标名称订单占比 字段quantity 计算规则SUM(quantity) / TOTAL(SUM(quantity)) OVER() 建议计算维度地区region 阈值0.05这份文件的设计与源码中的智能体职责是一一对应的指标名称/字段/计算规则/建议计算维度/阈值 五要素正是 MetricInfoAgent Profile 中 goal 声明的返回结构化信息包括指标名、字段、计算规则、建议维度与阈值阈值 会被传递给 AnomalyDetectionAction其输入模型AnomalyDetectionInput要求metric_name、baseline_value、current_value、threshold四个字段内部按(current - baseline) / baseline计算波动率并与阈值比较threshold 0.01即 1% 波动率建议计算维度地区region 会被 VolatilityAnalyzer 用作归因下钻的维度选择依据。因此将业务口径沉淀为这种结构化指标卡片是这套方案能从通用问答升级为确定性业务分析的关键。5. 启动服务与资源接入5.1 启动 Web 服务# 使用 OpenAI 代理模型配置启动 uv run dbgpt start webserver --config configs/dbgpt-proxy-openai.toml # 或使用本地模型配置启动 uv run dbgpt start webserver --config configs/dbgpt-local-glm.toml启动后浏览器访问http://localhost:5670。5.2 接入知识库点击应用管理选择知识库创建知识库填写相关配置信息名称、描述等知识库类型选择文档上传提前准备好的指标.txt分片策略选择separator分隔符设置为###—— 这与 4 节中文件的设计相呼应保证每个分片恰好是一个完整指标卡片检索时不会把不同指标的口径混在同一个 chunk 里完成创建知识库出现在列表中。5.3 接入数据库进入数据库/数据源管理页面点击添加数据源填写 3 节准备好的 MySQL 连接信息主机、端口、superstore库、账号密码MySQL 方言测试连接通过后保存数据源添加成功。6. 创建数据分析应用进入应用管理点击创建应用基础配置中选择**多智能体自动规划模式**填写应用名称与描述依次添加五个智能体并配置资源步骤操作加入 MetricInfoRetriever选取该智能体配置知识库资源第 5.2 节创建的知识库加入 DataScientist选取该智能体配置数据库资源第 5.3 节的数据源加入 AnomalyDetector选取该智能体无需额外资源加入 VolatilityAnalyzer选取该智能体配置数据库资源加入 ReportGenerator选取该智能体无需额外资源点击保存完成应用创建。注意从当前源码看VolatilityAnalysisAgent 的注册行 被注释源码注释说明该智能体在页面上temp hidden。若你的界面上看不到 VolatilityAnalyzer可跳过该步骤流水线仍可完成取指标信息 → 查数 → 判异常 → 出报告的主流程。7. 智能体内部机制源码级解读7.1 DataScientist带自检与重试的 SQL 分析器DataScientistAgent 是流水线中唯一直接碰数据库的智能体其设计要点方言感知_init_reply_message会把self.database.dialect数据库方言与支持的可视化展示类型ChartAction.render_prompt()注入提示词上下文约束 LLM 生成当前数据库方言的 SQLSQL 正确性自检correctness_check方法会把模型给出的 SQL 真正在数据库上执行一遍——执行失败、未生成 SQL、查不到数据都会返回失败原因要求重写配合max_retry_count 5实现生成-执行-纠错的自修正循环防幻觉约束constraints 中明确禁止使用不存在的字段、禁止自行构造查询条件只能使用输入中给出的数据值从提示词层面抑制 SQL 幻觉。7.2 AnomalyDetector确定性的阈值判断AnomalyDetectionAction 的输入是强类型 Pydantic 模型LLM 只负责从上游对话中提取参数计算本身是确定性代码波动率 (当期值 − 基期值) / 基期值并与指标卡片中的阈值比较基期为 0 时按特殊规则处理当期值大于 0 视为无穷大波动。该动作还绑定VisAnomalyDetection渲染协议可在前端输出可视化组件。这种LLM 提参 代码计算的模式避免了让 LLM 心算比率带来的数值不可靠问题。7.3 ReportGenerator流式输出与长文本配额ReportGenerationAgent 有两个值得注意的实现细节stream_out True报告以流式方式逐字输出build方法中显式把agent_context.max_new_tokens提升到4096为长报告预留输出配额。其 constraints 还要求报告必须是结构化 Markdown包含关键指标、波动分析与根因定位三个部分。8. 运行分析从提问到报告进入应用点击开始对话在输入框中提问请帮我分析订单数量 2012 年 年环比增长情况执行过程大致为Planner 依据各智能体 Profile 的 desc 编排任务 → MetricInfoRetriever 从知识库检索订单数量指标卡片字段quantity、阈值 0.01、建议维度 region→ DataScientist 生成并执行 2011/2012 年SUM(quantity)查询 → AnomalyDetector 计算环比波动率并与阈值比对 →确认异常时VolatilityAnalyzer 按 region 维度归因 → ReportGenerator 汇总输出分析报告。9. 小结与适用说明本实践文档给出了一个可复制的方法论把指标口径沉淀为知识库、把取数交给带自检的 DataScientist、把判断交给确定性代码、把表达交给报告智能体。适用前提与限制需要可用的 LLM代理或本地与向量模型服务模型配置见 2.4 节仓库中 configs/ 目录下还有 Ollama、SiliconFlow、GLM 等多种现成配置模板可参考数据库方言不限 MySQL替换为 SQLite、PostgreSQL 等数据源即可DataScientist 会通过dialect自适应生成 SQL知识库分片必须与指标.txt的###分隔约定保持一致否则指标卡片会被拆碎影响 MetricInfoRetriever 的结构化抽取从当前源码看 VolatilityAnalyzer 的页面注册暂时被注释界面未显示时可跳过归因步骤不影响主链路运行。【免费下载链接】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),仅供参考
返回列表