本文介紹如何使用Lindorm AI引擎搭建私域數據知識問答AIGC業務。
背景信息
目前,圍繞大語言模型LLM(Large Language Model)構建私域數據知識問答業務成為普遍需求。構建私域數據知識問答業務的目的是讓基于公共語料庫訓練的LLM,能夠結合專屬知識庫中的知識進行知識問答,從而應用到企業內部智能工單答疑等業務中。
現有私域數據知識問答解決方案有兩種實現方式,一種使用基礎LLM在專屬數據集上進行微調(FineTune),另一種利用向量檢索,對用戶的原始Prompt在用戶數據集上進行向量檢索,將檢索出來的相關文檔作為原始Prompt的上下文補充,讓LLM在上下文中回答。其中,基于FineTune的解決方案存在成本高,時效性差的問題,現在更流行的是基于第二種“基于向量檢索 + Prompt Engineering”的解決方案。在這個方案下,用戶需要對原始文檔進行切片,以保證不會超出LLM的token 限制并獲得更好的檢索效果,同時還需要對切片或問題進行Embedding提取向量,這通??梢酝ㄟ^調用LLM提供的Embedding API或者借助AI模型來完成。將上述流程描述成架構圖,假設用戶需要構建一個知識問答應用,這個應用需要實現的功能大致如下圖所示,需要和包括AI推理服務、向量數據庫、LLM等多個系統和服務打交道。此外,應用還需要處理文檔更新的問題,在文檔發生變化時,需要對應處理向量數據庫中的切片及Embedding向量。
針對上述問題,云原生多模數據庫 Lindorm推出一站式私域數據知識問答AIGC解決方案,結合Lindorm AI引擎和內置的向量檢索能力,實現僅通過一條SQL語句就能簡單構建知識問答業務的功能,簡化應用開發的工作。
前提條件
已開通Lindorm AI引擎。如何開通,請參見開通指南。
寬表引擎為2.5.4.3及以上版本。如何查看或升級當前版本,請參見寬表引擎版本說明和升級小版本。
重要如果您的寬表引擎為2.5.4.3以下版本且無法進行升級,請聯系 Lindorm 技術支持(釘釘號:s0s3eg3)為您升級版本。
已開通S3協議兼容功能。如何開通,請參見開通S3協議兼容功能。
已開通非結構化數據向量檢索功能。如何開通,請參見非結構化數據向量檢索。
模型概述
私域數據知識問答解決方案涉及多個AI模型,本示例中使用了如下模型:
- 說明
文本切片模型為默認使用的模型,目前不支持在
CREATE MODEL
語句中指定。
阿里云不對第三方模型的合法性、安全性、準確性進行任何保證,阿里云不對由此引發的任何損害承擔責任。
您應自覺遵守第三方模型的用戶協議、使用規范和相關法律法規,并就使用第三方模型的合法性、合規性自行承擔相關責任。
數據準備
連接寬表引擎。以通過Lindorm-cli連接為例,如何連接,請參見通過Lindorm-cli連接并使用寬表引擎。
創建表,用于存放知識庫文檔。
CREATE TABLE doc_table ( id VARCHAR, doc_field VARCHAR, PRIMARY KEY(id));
在表中插入四條數據。
INSERT INTO doc_table (id,doc_field) VALUES ('1','為提升用戶體驗,云原生多模數據庫Lindorm會不定期地發布版本,用于豐富云產品功能或修復已知缺陷。您可以參閱本文了解Lindorm寬表引擎的版本更新說明,選擇在業務低峰期升級實例的寬表引擎版本。'), ('2','低成本:高壓縮比,數據冷熱分離,支持HDD/OSS存儲。 彈性伸縮:存儲計算分離架構,支持獨立伸縮,自動化擴容。使用靈活:動態列,自由增減特征/標簽屬性;TTL,數據自動過期;多版本。低延遲:單個毫秒響應,支持雙集群請求并發加速。數據通道:通過LTS(原BDS)構建Lindorm與異構計算系統的高效、易用的數據鏈路。高可用:主備雙活容災,請求自動容錯,滿足99.95% SLA。'), ('3','云原生多模數據庫Lindorm時序引擎是一款高性能、低成本、穩定可靠的在線時序數據庫引擎服務,提供高效讀寫、高壓縮比存儲、時序數據聚合計算等能力。時序引擎高度兼容OpenTSDB協議,采用自研的索引,數據模型,流式聚合等技術手段提供更強大的時序能力。本文從多方面介紹Lindorm時序引擎和OpenTSDB的區別,方便您了解和使用。Lindorm時序引擎默認參數采用最佳實踐,無需手動調優;而OpenTSDB需要手動調優SALT、連接數、同步刷盤參數、Compaction等等。'), ('4','LindormTable提供的數據模型是一種支持數據類型的松散表結構。相比于傳統關系模型,LindormTable除了支持預定義字段類型外,還可以隨時動態添加列,而無需提前發起DDL變更,以適應大數據靈活多變的特點。同時,LindormTable支持全局二級索引、倒排索引,系統會自動根據查詢條件選擇最合適的索引,加速條件組合查詢,特別適合如畫像、賬單場景海量數據的查詢需求。');
全量檢索問答
創建全量檢索問答模型。
CREATE MODEL rqa_model FROM doc_table TARGET doc_field TASK RETRIEVAL_QA ALGORITHM CHATGLM3_6B SETTINGS (doc_id_column 'id');
執行檢索問答。
SELECT ai_infer('rqa_model', 'Lindorm是什么');
返回結果:
+---------------------------------------------------------------------------------------------------------------------------------------------------+ | EXPR$0 | +---------------------------------------------------------------------------------------------------------------------------------------------------+ | Lindorm 是一款高性能、低成本、穩定可靠的在線時序數據庫引擎服務。它提供高效讀寫、高壓縮比存儲、時序數據聚合計算等能力,同時高度兼容 | | OpenTSDB 協議,采用自研的索引、數據模型、流式聚合等技術手段提供更強大的時序能力。Lindorm | | 時序引擎默認參數采用最佳實踐,無需手動調優,而 OpenTSDB 需要手動調優 SALT、連接數、同步刷盤參數、Compaction 等等。Lindorm | | 時序引擎提供的數據模型是一種支持數據類型的松散表結構,可以隨時動態添加列,而無需提前發起 DDL 變更,以適應大數據靈活多變的特點。Lindorm | | 時序引擎支持全局二級索引、倒排索引,系統會自動根據查詢條件選擇最合適的索引,加速條件組合查詢,特別適合如畫像、賬單場景海量數據的查詢需求。Lindorm | | 時序引擎提供低成本、彈性伸縮、使用靈活、低延遲、數據通道、高可用等特性,支持多集群請求并發加速,滿足 99.95% 的 SLA。 | +---------------------------------------------------------------------------------------------------------------------------------------------------+
增量檢索問答
開通增量處理功能后,系統會自動對知識庫表中新增、修改、刪除的文檔進行處理。
開通增量處理功能。
登錄LTS并通過Pull模式創建數據訂閱通道。如何創建,請參見通過Pull模式創建數據訂閱通道。
重要通過Pull模式創建數據訂閱通道時需指定表信息(Lindorm表名)和Kafka topic名稱(主題名),且每次新建表均需要重新創建一次數據訂閱通道。
創建增量檢索問答模型。
CREATE MODEL rqa_model FROM doc_table TARGET doc_field TASK RETRIEVAL_QA ALGORITHM CHATGLM3_6B SETTINGS (doc_id_column 'id', incremental_train 'on', lts_topic 'rqa_xxx_topic' );
其中,lts_topic參數后的
'rqa_xxx_topic'
為創建數據訂閱通道時設置的主題名。執行檢索問答。
SELECT ai_infer('rqa_model', 'Lindorm是什么');
返回結果:
+---------------------------------------------------------------------------------------------------------------------------------------------------+ | EXPR$0 | +---------------------------------------------------------------------------------------------------------------------------------------------------+ | Lindorm 是一款高性能、低成本、穩定可靠的在線時序數據庫引擎服務。它提供高效讀寫、高壓縮比存儲、時序數據聚合計算等能力,同時高度兼容 | | OpenTSDB 協議,采用自研的索引、數據模型、流式聚合等技術手段提供更強大的時序能力。Lindorm | | 時序引擎默認參數采用最佳實踐,無需手動調優,而 OpenTSDB 需要手動調優 SALT、連接數、同步刷盤參數、Compaction 等等。Lindorm | | 時序引擎提供的數據模型是一種支持數據類型的松散表結構,可以隨時動態添加列,而無需提前發起 DDL 變更,以適應大數據靈活多變的特點。Lindorm | | 時序引擎支持全局二級索引、倒排索引,系統會自動根據查詢條件選擇最合適的索引,加速條件組合查詢,特別適合如畫像、賬單場景海量數據的查詢需求。Lindorm | | 時序引擎提供低成本、彈性伸縮、使用靈活、低延遲、數據通道、高可用等特性,支持多集群請求并發加速,滿足 99.95% 的 SLA。 | +---------------------------------------------------------------------------------------------------------------------------------------------------+
語義檢索(可選)
如果業務需要對接其他LLM ,您可以通過創建語義檢索模型,使Lindorm數據庫僅實現知識庫語義檢索(包括文檔切片、向量化和向量檢索)功能。
創建只處理全量文檔的語義檢索模型:
CREATE MODEL sr_model FROM doc_table TARGET doc_field TASK SEMANTIC_RETRIEVAL ALGORITHM TEXT2VEC_BASE_CHINESE SETTINGS (doc_id_column 'id');
執行語義檢索。
SELECT ai_infer('sr_model', 'Lindorm是什么');
返回結果:
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | EXPR$0 | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ["云原生多模數據庫Lindorm時序引擎是一款高性能、低成本、穩定可靠的在線時序數據庫引擎服務,提供高效讀寫、高壓縮比存儲、時序數據聚合計算等能力。時序引擎高度兼容OpenTSDB協議,采用自研的索引,數據模型,流式聚合等技術手段提供更強大的時序能力。本文從多方面介紹Lindorm時序引擎和OpenTSDB的區別,方便您了解和使用。Lindorm時序引擎默認參數采用最佳實踐,無需手動調優;而OpenTSDB需要手動調優SALT、連接數、同步刷盤參數、Compaction等等。","為提升用戶體驗,云原生多模數據庫Lindorm會不定期地發布版本,用于豐富云產品功能或修復已知缺陷。您可以參閱本文了解Lindorm寬表引擎的版本更新說明,選擇在業務低峰期升級實例的寬表引擎版本。","LindormTable提供的數據模型是一種支持數據類型的松散表結構。相比于傳統關系模型,LindormTable除了支持預定義字段類型外,還可以隨時動態添加列,而無需提前發起DDL變更,以適應大數據靈活多變的特點。同時,LindormTable支持全局二級索引、倒排索引,系統會自動根據查詢條件選擇最合適的索引,加速條件組合查詢,特別適合如畫像、賬單場景海量數據的查詢需求。","低成本:高壓縮比,數據冷熱分離,支持HDD/OSS存儲。\n\t彈性伸縮:存儲計算分離架構,支持獨立伸縮,自動化擴容。\n\t使用靈活:動態列,自由增減特征/標簽屬性;TTL,數據自動過期;多版本。\n\t低延遲:單個毫秒響應,支持雙集群請求并發加速。\n\t數據通道:通過LTS(原BDS)構建Lindorm與異構計算系統的高效、易用的數據鏈路。\n\t高可用:主備雙活容災,請求自動容錯,滿足99.\n\t95% | | SLA。"] | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
(可選)語義檢索模型支持通過設置可選參數score ,額外返回語義相似度。返回結果會包含格式為
[{"relatedText": xxx, "vectorScore": xxx}]
的JSON字符串。SELECT ai_infer('sr_model', 'Lindorm是什么', 'score=true');
返回結果:
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | EXPR$0 | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | [{"relatedText":"云原生多模數據庫Lindorm時序引擎是一款高性能、低成本、穩定可靠的在線時序數據庫引擎服務,提供高效讀寫、高壓縮比存儲、時序數據聚合計算等能力。時序引擎高度兼容OpenTSDB協議,采用自研的索引,數據模型,流式聚合等技術手段提供更強大的時序能力。本文從多方面介紹Lindorm時序引擎和OpenTSDB的區別,方便您了解和使用。Lindorm時序引擎默認參數采用最佳實踐,無需手動調優;而OpenTSDB需要手動調優SALT、連接數、同步刷盤參數、Compaction等等。","vectorScore":0.68192685},{"relatedText":"為提升用戶體驗,云原生多模數據庫Lindorm會不定期地發布版本,用于豐富云產品功能或修復已知缺陷。您可以參閱本文了解Lindorm寬表引擎的版本更新說明,選擇在業務低峰期升級實例的寬表引擎版本。","vectorScore":0.6785464},{"relatedText":"LindormTable提供的數據模型是一種支持數據類型的松散表結構。相比于傳統關系模型,LindormTable除了支持預定義字段類型外,還可以隨時動態添加列,而無需提前發起DDL變更,以適應大數據靈活多變的特點。同時,LindormTable支持全局二級索引、倒排索引,系統會自動根據查詢條件選擇最合適的索引,加速條件組合查詢,特別適合如畫像、賬單場景海量數據的查詢需求。","vectorScore":0.67825323},{"relatedText":"低成本:高壓縮比,數據冷熱分離,支持HDD/OSS存儲。\n\t彈性伸縮:存儲計算分離架構,支持獨立伸縮,自動化擴容。\n\t使用靈活:動態列,自由增減特征/標簽屬性;TTL,數據自動過期;多版本。\n\t低延遲:單個毫秒響應,支持雙集群請求并發加速。\n\t數據通道:通過LTS(原BDS)構建Lindorm與異構計算系統的高效、易用的數據鏈路。\n\t高可用:主備雙活容災,請求自動容錯,滿足99.\n\t95% | | SLA。","vectorScore":0.61903703}] | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
原理解析
上述流程中,CREATE MODEL創建檢索問答模型是關鍵步驟,在背后,Lindorm AI引擎會從寬表引擎中拉取對應的文檔數據進行全量的切片及Embedding 向量化,并將結果以中間表的形式保存與寬表引擎中,同時構建對應的向量索引。這里切片和向量化都是在推理引擎上利用AI模型來完成(借助Lindorm AI引擎從模型平臺導入模型的能力),默認分別使用了Bert語義分割模型以及text2vec-base-chinese模型(未來可通過參數形式開放自由選擇)。此外,這里還利用了Lindorm流引擎的能力來進行文檔增量數據訂閱及對應的處理,免去應用層需要處理文檔更新的問題。在問答的流程中,自動完成包括對問題向量化、向量檢索出相關文檔切片并進行Prompt重新組織的步驟,通過API的方式和背后的LLM進行交互。這里除了支持公共的LLM(如通義千問外),還支持開源LLM在Lindorm內的私有部署(如ChatGLM-6B等),解決您對于數據安全上的顧慮。