構(gòu)建一個(gè)基于 LLM 的 Chat-BI 分析助手,要實(shí)現(xiàn) SQL 準(zhǔn)確率和自助分析效率,不能僅靠簡(jiǎn)單的 Prompt 工程,必須構(gòu)建一套包含語(yǔ)義理解、知識(shí)檢索、安全管控、反饋迭代的完整工程化閉環(huán)。
以下是詳細(xì)的實(shí)現(xiàn)流程架構(gòu),分為五個(gè)核心階段:
一、總體架構(gòu)設(shè)計(jì)
在進(jìn)入流程前,需明確核心模塊的交互關(guān)系:
- 用戶層:自然語(yǔ)言提問。
- 大腦層 (LLM + RAG):意圖識(shí)別、語(yǔ)義解析、SQL 生成。
- 知識(shí)層 (語(yǔ)義層 + 向量庫(kù)):存儲(chǔ)指標(biāo)定義、表結(jié)構(gòu)、歷史優(yōu)質(zhì) SQL。
- 執(zhí)行層 (安全沙箱):SQL 校驗(yàn)、權(quán)限控制、查詢執(zhí)行。
- 反饋層:點(diǎn)贊/點(diǎn)踩、修正記錄、模型微調(diào)。
二、詳細(xì)實(shí)現(xiàn)流程 (5 個(gè)階段)
階段 1:數(shù)據(jù)資產(chǎn)與語(yǔ)義層構(gòu)建 (基礎(chǔ)建設(shè))
目標(biāo):解決“業(yè)務(wù)術(shù)語(yǔ)”與“物理字段”的映射問題,這是提升準(zhǔn)確率的關(guān)鍵。
元數(shù)據(jù)同步:
自動(dòng)同步數(shù)倉(cāng)(Hive/MaxCompute/Doris 等)的表結(jié)構(gòu)、字段注釋、主外鍵關(guān)系。
提取字段統(tǒng)計(jì)信息(如:status 字段的枚舉值分布),幫助 LLM 理解數(shù)據(jù)內(nèi)容。
語(yǔ)義層建模 (Semantic Layer):
- 指標(biāo)定義:將業(yè)務(wù)術(shù)語(yǔ)(如“毛利率”、“活躍用戶”)注冊(cè)為邏輯指標(biāo),綁定計(jì)算邏輯(如 sum(profit)/sum(revenue))。
- 維度注冊(cè):明確時(shí)間、地區(qū)、品類等維度的物理映射。
- 同義詞庫(kù):為關(guān)鍵字段配置業(yè)務(wù)別名(例如:gmt_create 別名包含“下單時(shí)間”、“創(chuàng)建日期”)。
-
知識(shí)向量化 (RAG 準(zhǔn)備):
將表結(jié)構(gòu)、指標(biāo)定義、歷史高頻 SQL、業(yè)務(wù)文檔切片。
存入向量數(shù)據(jù)庫(kù)(如 Milvus/ES),建立索引,用于后續(xù)檢索增強(qiáng)。
階段 2:意圖識(shí)別與上下文增強(qiáng) (理解用戶)
目標(biāo):精準(zhǔn)理解用戶想要什么,減少歧義。
問題預(yù)處理:
拼寫糾錯(cuò)、指代消解(如將“上個(gè)月”轉(zhuǎn)換為具體日期范圍 2023-10-01 to 2023-10-31)。
意圖分類:
- 判斷用戶是查數(shù)(Text-to-SQL)、問知(RAG 檢索文檔)還是診斷(歸因分析)。
如果是查數(shù),識(shí)別涉及的業(yè)務(wù)域(如:是查“銷售域”還是“用戶域”)。 -
動(dòng)態(tài)上下文檢索 (RAG Core):
Schema Linking:根據(jù)問題,從向量庫(kù)中檢索最相關(guān)的 3-5 張表及其字段(避免將所有表結(jié)構(gòu)塞入 Prompt,超出 Token 限制且干擾模型)。
Few-Shot 檢索:檢索歷史庫(kù)中相似問題的優(yōu)質(zhì) SQL 作為示例(Example),放入 Prompt 中引導(dǎo)模型。
語(yǔ)義知識(shí)注入:檢索相關(guān)的指標(biāo)計(jì)算邏輯,防止模型瞎編公式。
階段 3:Text-to-SQL 引擎生成 (核心大腦)
目標(biāo):生成可執(zhí)行且邏輯正確的 SQL。
Prompt 工程構(gòu)建:
采用 CoT (Chain of Thought) 策略:要求模型先輸出思考過程(“用戶想查... 涉及表... 關(guān)聯(lián)條件是..."),再輸出 SQL。
注入約束:強(qiáng)制要求使用語(yǔ)義層定義的指標(biāo),禁止 SELECT *,限制 LIMIT 條數(shù)。
SQL 生成:
調(diào)用 LLM 生成初步 SQL。
自我修正 (Self-Correction):
- 語(yǔ)法檢查:使用 SQL Parser 校驗(yàn)語(yǔ)法錯(cuò)誤,若有錯(cuò),將錯(cuò)誤信息回傳給 LLM 重試。
- 執(zhí)行反饋:在沙箱中 EXPLAIN 或試運(yùn)行,若報(bào)錯(cuò)(如字段不存在),將錯(cuò)誤日志反饋給 LLM 進(jìn)行修正(通常迭代 1-2 次可大幅提升準(zhǔn)確率)。
- 邏輯校驗(yàn):檢查是否包含敏感操作(如 DROP, UPDATE, DELETE),檢查是否涉及全表掃描。
階段 4:安全沙箱與執(zhí)行 (風(fēng)險(xiǎn)控制)
目標(biāo):確保數(shù)據(jù)不泄露、數(shù)據(jù)庫(kù)不崩潰。
權(quán)限隔離 (RBAC):
Chat-BI 使用只讀賬號(hào)連接數(shù)據(jù)庫(kù)。
根據(jù)提問用戶的身份,動(dòng)態(tài)注入行級(jí)權(quán)限過濾(例如:上海區(qū)的經(jīng)理只能查 region='Shanghai' 的數(shù)據(jù))。
資源熔斷:
設(shè)置查詢超時(shí)時(shí)間(如 30 秒)。
設(shè)置掃描行數(shù)上限(如 100 萬(wàn)行),防止大表拖垮集群。
數(shù)據(jù)脫敏:
對(duì)手機(jī)號(hào)、身份證等敏感字段在結(jié)果返回前進(jìn)行掩碼處理。
結(jié)果執(zhí)行:
在沙箱環(huán)境中執(zhí)行最終 SQL,獲取結(jié)果集。
階段 5:可視化與反饋迭代 (體驗(yàn)與優(yōu)化)
目標(biāo):提升效率,形成閉環(huán)優(yōu)化。
智能可視化:
根據(jù)數(shù)據(jù)結(jié)果類型(趨勢(shì)、占比、對(duì)比),自動(dòng)推薦圖表(折線圖、餅圖、柱狀圖)。
生成分析結(jié)論:LLM 根據(jù)查詢結(jié)果,用自然語(yǔ)言總結(jié)核心洞察(如“本月銷售額環(huán)比增長(zhǎng) 15%")。
人機(jī)協(xié)同反饋 (Human-in-the-Loop):
點(diǎn)贊/點(diǎn)踩:用戶對(duì)結(jié)果反饋。
SQL 修正:允許高級(jí)用戶在界面上直接修改生成的 SQL,修改后的“問題 -SQL"對(duì)存入黃金數(shù)據(jù)集。
模型持續(xù)優(yōu)化:
- SFT 微調(diào):定期使用積累的黃金數(shù)據(jù)集對(duì)基座模型進(jìn)行微調(diào),提升特定業(yè)務(wù)場(chǎng)景的準(zhǔn)確率。
- Bad Case 分析:定期分析準(zhǔn)確率未達(dá)標(biāo)的案例,補(bǔ)充語(yǔ)義層定義或優(yōu)化 Prompt。