????????AI + 數(shù)據(jù)分析一直是一個(gè)充滿想象力的應(yīng)用方向。在2023年之前,Text2SQL通常采用傳統(tǒng)的自然語言處理(NLP)方法,但泛化能力較差,只能適應(yīng)特定的場景。隨著大型語言模型(LLM)的發(fā)展,AI + 數(shù)據(jù)分析逐漸走向現(xiàn)實(shí)。本文將介紹如何結(jié)合大模型、LangChain和DAG實(shí)現(xiàn)一個(gè)AI數(shù)據(jù)問答系統(tǒng)。
一、基礎(chǔ)概念
構(gòu)建AI數(shù)據(jù)問答系統(tǒng)可以簡單地分為三個(gè)主要步驟:
SQL-生成:LLM根據(jù)用戶輸入的自然語言,以及數(shù)據(jù)庫的相關(guān)Schema信息,生成查詢SQL。
SQL-執(zhí)行:利用數(shù)據(jù)庫執(zhí)行工具,執(zhí)行生成的SQL,返回結(jié)果數(shù)據(jù)集。
自然語言生成:LLM根據(jù)用戶的問題以及查詢結(jié)果數(shù)據(jù)集,生成自然語言回答。
下圖展示了上述步驟的具體流程:

二、關(guān)鍵步驟分析
? ? ?其中的核心步驟是SQL-生成。在生成自然語言回答方面,LLM已經(jīng)表現(xiàn)出很好的效果。但如果簡單采用LLM生成SQL效果將不如人意。這主要是因?yàn)镾QL是一種嚴(yán)格語法的數(shù)據(jù)庫語言,而自然語言并不總是遵循嚴(yán)格的語法規(guī)則。此外,生成SQL效果不佳的原因包括:
LLM通?;趶V泛的預(yù)訓(xùn)練數(shù)據(jù),但并不專門針對(duì)SQL數(shù)據(jù)進(jìn)行訓(xùn)練,因此對(duì)SQL的理解和生成質(zhì)量較差。
缺乏相關(guān)領(lǐng)域知識(shí)和數(shù)據(jù)庫結(jié)構(gòu)信息,即使是人類數(shù)據(jù)庫專家,如果沒有這些信息,也難以寫出合適的SQL。
三、解決思路
為了提高生成SQL的質(zhì)量,目前常用的幾種方法包括:
增加數(shù)據(jù)庫Schema信息和業(yè)務(wù)領(lǐng)域知識(shí):
補(bǔ)充Schema信息:通常數(shù)據(jù)庫表在創(chuàng)建時(shí)會(huì)包含表和字段的備注信息,但這些信息往往過于簡短。解決方案是為數(shù)據(jù)庫表和字段增加更詳細(xì)的描述信息,并在調(diào)用LLM時(shí)作為Prompt傳入。這可以通過額外的信息維護(hù)來實(shí)現(xiàn),避免對(duì)數(shù)據(jù)庫結(jié)構(gòu)的侵入。
檢索相關(guān)信息:對(duì)于大型數(shù)據(jù)庫,表數(shù)量眾多,LLM的Token窗口大小限制了完整的Schema信息傳入。解決方案是根據(jù)問題檢索最可能相關(guān)的表,只將相關(guān)表信息作為Prompt。
增加業(yè)務(wù)領(lǐng)域背景知識(shí):基于RAG(Retrieve-and-Generate)工作流,先查詢相關(guān)信息,特別是專業(yè)名詞和指標(biāo)說明,再構(gòu)建Prompt。
增加優(yōu)秀的問題和SQL對(duì)作為示例:
利用Few-Shot Prompt和LLM的泛化能力,在Prompt中增加與用戶問題相似的示例,可以大幅提高SQL生成的準(zhǔn)確率。這些示例可以由專家整理,也可以通過系統(tǒng)運(yùn)行過程中用戶對(duì)生成SQL的反饋獲取。
微調(diào)(Finetuning):
針對(duì)特定數(shù)據(jù)模型進(jìn)行LLM的微調(diào)。利用收集的優(yōu)秀問題和SQL示例作為樣本,固化模型效果。初期可以采用RAG,等收集到一定階段的數(shù)據(jù)后再進(jìn)行微調(diào)。
使用合適的SQL LLM:
SQLCoder是一款基于StarCoder微調(diào)的針對(duì)SQL優(yōu)化的大語言模型。Code Llama是一個(gè)開源大模型,主要用于Text2SQL任務(wù)。但通過實(shí)驗(yàn)發(fā)現(xiàn),Llama3 70B等這種通用大模型在上下文理解和SQL生成準(zhǔn)確性方面表現(xiàn)更佳。
四、演示系統(tǒng)
滬深ETF基金行情問答演示系統(tǒng):https://bi.stockyun.top/

該系統(tǒng)具備RAG管理、SQL語句生成、數(shù)據(jù)自動(dòng)查詢和自動(dòng)回答等功能。同時(shí),當(dāng)SQL生成錯(cuò)誤時(shí),可以通過“AI幫我解決”功能,將錯(cuò)誤信息自動(dòng)交給大模型進(jìn)行修復(fù)。
五、下一步計(jì)劃
增加tools和Open Interpreter,根據(jù)用戶要求生成程序代碼,并自動(dòng)執(zhí)行代碼生成圖表。
這樣,AI數(shù)據(jù)問答系統(tǒng)將變得更加智能和高效,進(jìn)一步提升用戶的使用體驗(yàn)和數(shù)據(jù)分析能力。