所有文章 > AI驱动 > 基于大模型的数据应用开发框架详解
基于大模型的数据应用开发框架详解

基于大模型的数据应用开发框架详解

随着大模型技术的快速发展和日趋成熟,大模型在各个行业和业务领域的应用也如火如荼。在数据领域中,将大模型赋能到数据管理、数据应用及数据分析等方面的探索也在逐步落地。在实践过程中,搭建统一、高效、可扩展的数据开发框架变得至关重要。本文分享基于大模型的数据开发开源框架DB-GPT,希望对项目实践提供一些思路和帮助,将从以下方面进行介绍。
1. DB-GPT基本概念

2. 整体框架和核心特性

3. 系统架构

4. 核心模块介绍

一、DB-GPT基本概念

DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL and Agents)。目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单,更方便。

在数据3.0 时代,基于模型、数据库,企业/开发者可以用更少的代码搭建自己的专属应用。

二、整体框架与核心特性

1. 整体框架

下图是DB-GPT的框架图,从整体结构可以看出,左侧是知识(RAG),右侧是工具(Agents), 中间是多模型管理(SMMF),同时增加向量存储(VectorStore)这样的大模型记忆体,以及适配多种数据源,最上层是通用应用交互层。

2. 核心特性

  • 私域问答&数据处理&RAG

支持内置、多文件格式上传、插件自抓取等方式自定义构建知识库,对海量结构化,非结构化数据做统一向量存储与检索。

  • 多数据源&GBI

支持自然语言与Excel、数据库、数仓等多种数据源交互,并支持分析报告。生成式BI为构建企业报表分析、业务洞察提供基础的数智化技术保障。

  • 多模型支持与管理

支持多种常用大语言模型,包括开源、API代理的几十种大语言模型。如LLaMA/LLaMA2、Baichuan、ChatGLM、文心、通义、智谱、星火等。

  • 自动化微调

围绕大语言模型、Text2SQL数据集、LoRA/QLoRA/Pturning等微调方法构建的自动化微调轻量框架, 让TextSQL微调像流水线一样方便。

  • 数据驱动多Agents插件

支持自定义插件执行任务,原生支持Auto-GPT插件模型,Agents协议采用Agent Protocol标准。

  • 隐私安全

通过私有化大模型、代理脱敏等多种技术保障数据的隐私安全。

三、系统架构

DB-GPT的系统架构如下图所示:

可视化层: 可视化层主要的工作是对话、交互、图表显示、可视化编排等能力。

应用层: 基于底层能力的应用构建,如GBI应用、ChatDB类应用、ChatData类应用、ChatExcel类应用等

服务层: 服务层主要是对外暴露的服务,比如LLMServer、APIServer、RAGServer、dbgptserver等。    

核心模块层: 核心模块主要有三个分别是,SMMF、RAGs、Agents,后面有详细介绍。

协议层:协议层主要是指AWEL(Agentic Workflow Expression Language), 即智能体编排语言,是专门为大模型应用开发设计的智能体工作流表达式语言。

训练层: 训练层会主要关注Text2SQL、Text2DSL、Text2API方向的微调,提供标准的微调脚手架。

运行环境: 运行环境是指整个框架的运行在什么环境当中,后续支持基于Ray与Kubernetes的环境。

四、核心模块介绍

下面对其中一些关键核心模块做较为详细的介绍。

1. 多模型管理(SMMF)

在AIGC应用探索与生产落地中,通常会直接与模型服务对接,但是目前大模型的推理部署还没有一个事实标准,不断有新的模型发布,也不断有新的训练方法被提出,开发者需要花大量的时间来适配多变的底层模型环境,这在一定程度上制约了AIGC应用的探索和落地。为了简化模型的适配流程,提高模型部署效率和性能,提出了基于服务化的多模型管理框架(Service-oriented Multi-Model Management Framework,简写为SMMF)。多模型管理框架的本质其实就是模型服务的Serverless化。在DB-GPT中,SMMF详细框架如下图所示:

  • 最上层对应服务与应用层(如DB-GPT WebServer、Agents系统、应用等)。
  • 下一层是模型部署框架层,这层包含对应用层提供模型服务的APIServer和Model Handle、整个部署框架的元数据管理和控制中心Model Controller以及与推理框架和底层环境直接对接的Model Worker。
  • 再下一层是推理框架层,这层包含vLLM、llama.cpp和FastChat(由于DB-GPT直接使用FastChat的推理接口,这里将FastChat也归为推理框架),大语言模型(如Vicuna、Llama、Baichuan、ChatGLM)等部署在推理框架中。
  • 最下面一层则是实际部署环境,包括Kubernetes、Ray、AWS、阿里云和私有云等。

2. 检索增强(MS-RAG)

MS-RAG指的是多文档检索增强能力(Multi-Source Enhanced Retrieval-Augmented Generation Framework),这部分也是DB-GPT中的一个基础核心模块。当前MS-RAG实现了基本的增强检索的操作,并对多文档、多源数据检索场景做了非常多的定制优化。整个流程中涵盖了知识构建、知识检索、答案生成全链路的能力。

3. 数据驱动智能体(Data Driven Agents)

数据驱动智能体(Data Driven Multi-Agents)是一个多Agents框架,目的是提供生产级Agent构建的基础框架能力。生产级代理应用程序需要基于数据驱动的决策,并且可以在可控制的工作流中进行编排。在系统设计中,提供了一套以Agent为核心,融合多模型管理、RAGs、API调用、可视化、AWEL智能体编排、Text2SQL、意图识别等一系列技术的生产级数据应用开发框架。

Agent的核心模块主要有Memory、Profile、Planning、Action等模块。

围绕Agent的核心模块,往上构建多Agent之间的协作能力,协作主要有三种形式。

(1)单一Agent: 单个Agent有具体任务与目标,不涉及多模型协作。

(2)Auto-Plan: Agent自己制定计划,在多Agent协作时负责路径规划、分工协作等。

(3)AWEL: 编排,通过程序编排来实现多智能体的协作。

4. 微调(Fine-tuning)

Text2SQL and Text2API(DSL) 可通过持续微调自然语言到SQL语句,以及自然语言到结构化API与DSL的方式,提升模型的准确率。作为DB-GPT项目的一部分,提供了Text2SQL微调相关的代码,目前已经按照独立的pypi包发布,可以直接安装进行使用。

微调代码:

from dbgpt_hub.data_process import preprocess_sft_data
from dbgpt_hub.train import start_sft
from dbgpt_hub.predict import start_predict
from dbgpt_hub.eval import start_evaluate

data_folder = "dbgpt_hub/data"
data_info = [
{
"data_source": "spider",
"train_file": ["train_spider.json", "train_others.json"],
"dev_file": ["dev.json"],
"tables_file": "tables.json",
"db_id_name": "db_id",
"is_multiple_turn": False,
"train_output": "spider_train.json",
"dev_output": "spider_dev.json",
}
]

train_args = {
"model_name_or_path": "codellama/CodeLlama-13b-Instruct-hf",
"do_train": True,
"dataset": "example_text2sql_train",
"max_source_length": 2048,
"max_target_length": 512,
"finetuning_type": "lora",
"lora_target": "q_proj,v_proj",
"template": "llama2",
"lora_rank": 64,
"lora_alpha": 32,
"output_dir": "dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora",
"overwrite_cache": True,
"overwrite_output_dir": True,
"per_device_train_batch_size": 1,
"gradient_accumulation_steps": 16,
"lr_scheduler_type": "cosine_with_restarts",
"logging_steps": 50,
"save_steps": 2000,
"learning_rate": 2e-4,
"num_train_epochs": 8,
"plot_loss": True,
"bf16": True,
}

predict_args = {
"model_name_or_path": "codellama/CodeLlama-13b-Instruct-hf",
"template": "llama2",
"finetuning_type": "lora",
"checkpoint_dir": "dbgpt_hub/output/adapter/CodeLlama-13b-sql-lora",
"predict_file_path": "dbgpt_hub/data/eval_data/dev_sql.json",
"predict_out_dir": "dbgpt_hub/output/",
"predicted_out_filename": "pred_sql.sql",
}

evaluate_args = {
"input": "./dbgpt_hub/output/pred/pred_sql_dev_skeleton.sql",
"gold": "./dbgpt_hub/data/eval_data/gold.txt",
"gold_natsql": "./dbgpt_hub/data/eval_data/gold_natsql2sql.txt",
"db": "./dbgpt_hub/data/spider/database",
"table": "./dbgpt_hub/data/eval_data/tables.json",
"table_natsql": "./dbgpt_hub/data/eval_data/tables_for_natsql2sql.json",
"etype": "exec",
"plug_value": True,
"keep_distict": False,
"progress_bar_for_each_datapoint": False,
"natsql": False,
}

preprocess_sft_data(
data_folder = data_folder,
data_info = data_info
)

start_sft(train_args)
start_predict(predict_args)
start_evaluate(evaluate_args)

5.AWEL

AWEL(Agentic Workflow Expression Language)是一套专为大模型应用开发设计的智能体工作流表达语言,它提供了强大的功能和灵活性。通过 AWEL API 用户可以专注于大模型应用业务逻辑的开发,而不需要关注繁琐的模型和环境细节,AWEL 采用分层 API 的设计, AWEL 的分层 API 设计架构如下图所示:

AWEL在设计上分为三个层次,依次为算子层、AgentFrame层以及DSL层,以下对三个层次做简要介绍。    

  • 算子层

算子层是指LLM应用开发过程中一个个最基本的操作原子,比如在一个RAG应用开发时。检索、向量化、模型交互、Prompt处理等都是一个个基础算子。在后续的发展中,框架会进一步对算子进行抽象与标准化设计。可以根据标准API快速实现一组算子。

  • AgentFrame层

AgentFrame层将算子做进一步封装,可以基于算子做链式计算。这一层链式计算也支持分布式,支持如filter、join、map、reduce等一套链式计算操作。后续也将支持更多的计算逻辑。

  • DSL层

DSL层提供一套标准的结构化表示语言,可以通过写DSL语句完成AgentFrame与算子的操作,让围绕数据编写大模型应用更具确定性,避免通过自然语言编写的不确定性,使得围绕数据与大模型的应用编程变为确定性应用编程。

五、结语

在大模型应用到数据领域的探索中,并不是简单的将数据和问题导入大模型就可以解决问题,该过程需要将数据管理、大模型技术、数据安全、推理规则及结果反馈等各个流程结合起来,是一个复杂系统工程,需要持续的优化和精进。

参考资料

https://github.com/eosphoros-ai/DB-GPT
https://www.yuque.com/eosphoros/dbgpt-docs

文章转自微信公众号@数据思考笔记

#你可能也喜欢这些API文章!