
如何快速實現REST API集成以優化業務流程
下圖是DB-GPT的框架圖,從整體結構可以看出,左側是知識(RAG),右側是工具(Agents), 中間是多模型管理(SMMF),同時增加向量存儲(VectorStore)這樣的大模型記憶體,以及適配多種數據源,最上層是通用應用交互層。
支持內置、多文件格式上傳、插件自抓取等方式自定義構建知識庫,對海量結構化,非結構化數據做統一向量存儲與檢索。
支持自然語言與Excel、數據庫、數倉等多種數據源交互,并支持分析報告。生成式BI為構建企業報表分析、業務洞察提供基礎的數智化技術保障。
支持多種常用大語言模型,包括開源、API代理的幾十種大語言模型。如LLaMA/LLaMA2、Baichuan、ChatGLM、文心、通義、智譜、星火等。
圍繞大語言模型、Text2SQL數據集、LoRA/QLoRA/Pturning等微調方法構建的自動化微調輕量框架, 讓TextSQL微調像流水線一樣方便。
支持自定義插件執行任務,原生支持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的環境。
下面對其中一些關鍵核心模塊做較為詳細的介紹。
在AIGC應用探索與生產落地中,通常會直接與模型服務對接,但是目前大模型的推理部署還沒有一個事實標準,不斷有新的模型發布,也不斷有新的訓練方法被提出,開發者需要花大量的時間來適配多變的底層模型環境,這在一定程度上制約了AIGC應用的探索和落地。為了簡化模型的適配流程,提高模型部署效率和性能,提出了基于服務化的多模型管理框架(Service-oriented Multi-Model Management Framework,簡寫為SMMF)。多模型管理框架的本質其實就是模型服務的Serverless化。在DB-GPT中,SMMF詳細框架如下圖所示:
MS-RAG指的是多文檔檢索增強能力(Multi-Source Enhanced Retrieval-Augmented Generation Framework),這部分也是DB-GPT中的一個基礎核心模塊。當前MS-RAG實現了基本的增強檢索的操作,并對多文檔、多源數據檢索場景做了非常多的定制優化。整個流程中涵蓋了知識構建、知識檢索、答案生成全鏈路的能力。
數據驅動智能體(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: 編排,通過程序編排來實現多智能體的協作。
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)
AWEL(Agentic Workflow Expression Language)是一套專為大模型應用開發設計的智能體工作流表達語言,它提供了強大的功能和靈活性。通過 AWEL API 用戶可以專注于大模型應用業務邏輯的開發,而不需要關注繁瑣的模型和環境細節,AWEL 采用分層 API 的設計, AWEL 的分層 API 設計架構如下圖所示:
AWEL在設計上分為三個層次,依次為算子層、AgentFrame層以及DSL層,以下對三個層次做簡要介紹。
算子層是指LLM應用開發過程中一個個最基本的操作原子,比如在一個RAG應用開發時。檢索、向量化、模型交互、Prompt處理等都是一個個基礎算子。在后續的發展中,框架會進一步對算子進行抽象與標準化設計。可以根據標準API快速實現一組算子。
AgentFrame層將算子做進一步封裝,可以基于算子做鏈式計算。這一層鏈式計算也支持分布式,支持如filter、join、map、reduce等一套鏈式計算操作。后續也將支持更多的計算邏輯。
DSL層提供一套標準的結構化表示語言,可以通過寫DSL語句完成AgentFrame與算子的操作,讓圍繞數據編寫大模型應用更具確定性,避免通過自然語言編寫的不確定性,使得圍繞數據與大模型的應用編程變為確定性應用編程。
在大模型應用到數據領域的探索中,并不是簡單的將數據和問題導入大模型就可以解決問題,該過程需要將數據管理、大模型技術、數據安全、推理規則及結果反饋等各個流程結合起來,是一個復雜系統工程,需要持續的優化和精進。
https://github.com/eosphoros-ai/DB-GPT
https://www.yuque.com/eosphoros/dbgpt-docs
文章轉自微信公眾號@數據思考筆記