AnalyticDB(ADB)+LLM:構建AIGC時代下企業專屬Chatbot

爲什麼Chatbot需要大語言模型+向量數據庫?

這個春天,最讓人震感的科技產品莫過於ChatGPT的橫空出世,通過大語言模型(LLM)讓人們看到了生成式AI能實現到和人類語言高度相仿的語言表達能力,AI不再遙不可及而已經可以走進人類的工作和生活,這使得沉寂一段時間的AI領域重新煥發了能量,無數的從業者正趨之若鶩地投身於下一個改變時代的機會;據不完全統計,在短短的4個月時間內,美國已經完成了超4000筆的生成式AI的行業融資。生成式AI已經成爲了資本和企業都無法忽視的下一代的技術密碼,而其對於底層的基礎設施能力提供了更高的要求。

大模型能夠回答較爲普世的問題,但是若要服務於垂直專業領域,會存在知識深度和時效性不足的問題,那麼企業如何抓住機會並構建垂直領域服務?目前有兩種模式,第一種是基於大模型之上做垂直領域模型的Fine Tune,這個綜合投入成本較大,更新的頻率也較低,並不適用於所有的企業;第二種就是在向量數據庫中構建企業自有的知識資產,通過大模型+向量數據庫來搭建垂直領域的深度服務,本質是使用數據庫進行提示工程(Prompt Engineering)。以法律行業爲例,基於垂直類目的法律條文和判例,企業可以構建垂直領域的法律科技服務。如法律科技公司Harvey,正在構建“律師的副駕駛”(Copilot for Lawyer)以提高法律條文的起草和研究服務。

將企業知識庫文檔和實時信息通過向量特徵提取然後存儲到向量數據庫,結合LLM大語言模型可以讓Chatbot(聊天機器人)的回答更具專業性和時效性,構建企業專屬Chatbot。

本文接下來將重點介紹基於大語言模型(LLM)+向量數據庫打造企業專屬Chatbot的原理和流程,以及ADB-PG構建該場景的核心能力。

什麼是向量數據庫?

在現實世界中,絕大多數的數據都是以非結構化數據的形式存在的,如圖片,音頻,視頻,文本等。這些非結構化的數據隨着智慧城市,短視頻,商品個性化推薦,視覺商品搜索等應用的出現而爆發式增長。爲了能夠處理這些非結構化的數據,我們通常會使用人工智能技術提取這些非結構化數據的特徵,並將其轉化爲特徵向量,再對這些特徵向量進行分析和檢索以實現對非結構化數據的處理。因此,我們把這種能存儲,分析和檢索特徵向量的數據庫稱之爲向量數據庫。

向量數據庫對於特徵向量的快速檢索,一般會採用構建向量索引的技術手段,我們通常說的向量索引都屬於ANNS(Approximate Nearest Neighbors Search,近似最近鄰搜索),它的核心思想是不再侷限於只返回最精確的結果項,而是僅搜索可能是近鄰的數據項,也就是通過犧牲可接受範圍內的一點精確度來換取檢索效率的提高。這也是向量數據庫與傳統數據庫最大的差別。

爲了將ANNS向量索引更加方便的應用到實際的生產環境中,目前業界主要有兩種實踐方式。一種是單獨將ANNS向量索引服務化,以提供向量索引創建和檢索的能力,從而形成一種專有的向量數據庫;另一種是將ANNS向量索引融合到傳統結構化數據庫中,形成一種具有向量檢索功能的DBMS。在實際的業務場景中,專有的向量數據庫往往都需要和其他傳統數據庫配合起來一起使用,這樣會造成一些比較常見的問題,如數據冗餘、數據遷移過多、數據一致性問題等,與真正的DBMS相比,專有的向量數據庫需要額外的專業人員維護、額外的成本,以及非常有限的查詢語言能力、可編程性、可擴展性和工具集成。而融合了向量檢索功能的DBMS則不同,它首先是一個非常完備的現代數據庫平臺,能滿足應用程序開發人員的數據庫功能需求;然後它集成的向量檢索能力一樣也可以實現專有的向量數據庫的功能,並且使向量存儲和檢索繼承了DBMS的優秀能力,如易用性(直接使用SQL的方式處理向量)、事務、高可用性、高可擴展性等等。本文介紹的ADB-PG即是具有向量檢索功能的DBMS,在包含向量檢索功能的同時,還具備一站式的數據庫能力。在介紹ADB-PG的具體能力之前,我們先來看一下Demo視頻中Chatbot的創建流程和相關原理。

LLM大語言模型+ADB-PG:打造企業專屬Chatbot

案例-本地知識問答系統

對於前面Demo視頻結合大語言模型LLM和ADB-PG進行時事新聞點評解答的例子,讓LLM回答"通義千問是什麼"。可以看到,如果我們讓LLM直接回答,得到的答案沒有意義,因爲LLM的訓練數據集裏並不包含相關的內容。而當我們使用向量數據庫作爲本地知識存儲,讓LLM自動提取相關的知識之後,其正確地回答了"通義千問是什麼"。

同樣地,這種方式可以應用於處理文檔,PDF,郵件,網絡資訊等等尚未被LLM訓練數據集覆蓋到的內容。比如:

1.結合最新的航班信息和最新的網紅打卡地點等旅遊攻略資源,打造旅遊助手。比如回答下週最適合去哪裏旅遊,如何最經濟實惠的問題。

2.體育賽事點評,時事熱點新聞點評,總結。今天誰是NBA比賽的MVP。

3.教育行業,最新的教育熱點解讀,比如,告訴我什麼是AIGC,什麼是Stable Diffusion以及如何使用等等。

4.金融領域,快速分析各行業領域金融財報,打造金融諮詢助手。

5.專業領域的客服機器人...

實現原理

本地知識問答系統(Local QA System)主要是通過結合了大語言模型的推理能力和向量數據庫的存儲和檢索能力。來實現通過向量檢索到最相關的語義片段,然後讓大語言模型結合相關片段上下文來進行正確的推理得到結論。

在這個過程中主要有兩個流程:

a.後端數據處理和存儲流程

b.前端問答流程

同時其底層主要依賴兩個模塊:

1.基於大語言模型的推理模塊

2.基於向量數據庫的向量數據管理模塊

後端數據處理和存儲流程

上圖黑色的部分爲後端的數據處理流程,主要是將我們的原始數據求解embedding,並和原始數據一起存入到向量數據庫ADB-PG中。這裏你只需要關注上圖的藍色虛線框部分。黑色的處理模塊和ADB-PG向量數據庫。

  • Step1:先將原始文檔中的文本內容全部提取出來。然後根據語義切塊,切成多個chunk,可以理解爲可以完整表達一段意思的文本段落。在這個過程中還可以額外做一些元數據抽取,敏感信息檢測等行爲。
  • Step2:將這些Chunk都丟給embedding模型,來求取這些chunk的embedding。
  • Step3:將embedding和原始chunk一起存入到向量數據庫中。

前端問答流程

在這個過程中主要分爲三個部分 1.問題提煉部分 2.向量檢索提取最相關知識 3.推理求解部分。在這裏我們需要關注橙色部分。單單說原理可能比較晦澀,我們還是用上面的例子來說明。

Part1 問題提煉

這個部分是可選的,之所以存在是因爲有些問題是需要依賴於上下文的。因爲用戶問的新問題可能沒辦法讓LLM理解這個用戶的意圖。比如用戶的新問題是"它能做什麼"。LLM並不知道它指的是誰,需要結合之前的聊天曆史,比如"通義千問是什麼"來推理出用戶需要求解答案的獨立問題"通義千問能做什麼"。LLM沒法正確回答"它有什麼用"這樣的模糊問題,但是能正確回答"通義千問有什麼用"這樣的獨立問題。如果你的問題本身就是獨立的,則不需要這個部分。得到獨立問題後,我們可以基於這個獨立問題,來求取這個獨立問題的embedding。然後去向量數據庫中搜索最相似的向量,找到最相關的內容。這個行爲在Part2 Retrieval Plugin的功能中。

Part2 向量檢索

獨立問題求取embedding這個功能會在text2vec模型中進行。在獲得embedding之後就可以通過這個embedding來搜索已經事先存儲在向量數據庫中的數據了。比如我們已經在ADB-PG中存儲了下面內容。我們就可以通過求取的向量來獲得最相近的內容或者知識,比如第一條和第三條。通義千問是...,通義千問可以幫助我們xxx。

id Content embedding document
1 通義千問是... [0.1, -0.1,0,1] 大模型通義千問
2 NBA比分 湖人-籃網 [0.2,0.1,0.2,-1] NBA今日播報
3 通義千問可以幫助我們xxx [-0.2,0.1,0.2,-1] 大模型通義千問
4 AIGC是xxx [0.3,0.1,0.2,-1] AIGC介紹

Part3 推理求解

在獲得最相關的知識之後,我們就可以就可以讓LLM基於最相關的知識和獨立問題來進行求解推理,得到最終的答案了。這裏就是結合“通義千問是...”,“通義千問可以幫助我們xxx”等等最有效的信息來回答“通義千問有什麼用”這個問題了。最終讓GPT的推理求解大致是這樣:

基於以下已知信息,簡潔和專業的來回答用戶的問題。 如果無法從中得到答案,請說"根據已知信息無法回答該問題"或"沒有提供足夠的相關信息",不允許在答案中添加 編造成分,答案請使用中文。
已知內容:
1.阿里巴巴“通義千問”大模型4月11日也亮相雲峯會...
2.通義千問可以幫助我們xxx 問題: 通義千問有什麼用

ADB-PG:內置向量檢索+全文檢索的一站式企業知識數據庫

爲什麼ADB-PG適合作爲Chatbot的知識數據庫?ADB-PG是一款具備大規模並行處理能力的雲原生數據倉庫。它支持行存儲和列存儲模式,既可以提供高性能的離線數據處理,也可以支持高併發的海量數據在線分析查詢。因此我們可以說ADB-PG是一個支持分佈式事務、混合負載的數據倉庫平臺,同時也支持處理多種非結構化和半結構化數據源。如通過向量檢索插件實現了對圖片、語言、視頻、文本等非結構化數據的高性能向量檢索分析,對JSON等半結構化數據的全文檢索分析。因此在AIGC場景下,ADB-PG既可以作爲一款向量數據庫滿足其對向量存儲和檢索的需求,也可以滿足其他結構化數據的存儲和查詢,同時也可以提供全文檢索的能力,爲AIGC場景下的業務應用提供一站式的解決方案。下面我們將對ADB-PG的向量檢索、融合檢索和全文檢索這三方面的能力進行詳細介紹。ADB-PG向量檢索和融合檢索功能於2020年首次在公有云上線,目前已經在人臉識別領域得到了非常廣泛的應用。ADB-PG的向量數據庫繼承自數據倉庫平臺,因此它幾乎擁有DBMS的所有好處,如ANSISQL、ACID事務、高可用性、故障恢復、時間點恢復、可編程性、可擴展性等。同時它支持了點積距離、漢明距離和歐氏距離的向量和向量的相似度搜索。這些功能目前在人臉識別、商品識別和基於文本的語義搜索中得到了廣泛應用。隨着AIGC的爆炸式增長,這些功能爲基於文本的Chatbot奠定了堅實的基礎。另外,ADB-PG向量檢索引擎也使用Intel SIMD指令極其有效地實現了向量相似性匹配。下面我們用一個具體的例子來說明ADB-PG的向量檢索和融合檢索如何使用。假設有一個文本知識庫,它是將一批文章分割成chunk再轉換爲embedding向量後入庫的,其中chunks表包含以下字段:

字段 類型 說明
id serial 編號
chunk varchar(1024) 文章切塊後的文本chunk
intime timestamp 文章的入庫時間
url varchar(1024) 文本chunk所屬文章的鏈接
feature real[] 文本chunk embedding向量

那麼對應的建表DDL如下:

CREATE TABLE chunks(
    id serial primary key,
    chunk varchar(1024),
    intime timestamp,
    url varchar(1024),
    feature real[]
);

爲了對向量檢索進行加速,我們還需要建立一個向量索引:

CREATE INDEX ON chunks USING ann(feature) WITH (dim=1536);

同時爲了對向量結構化融合查詢提供加速,我們還需要爲常用的結構化列建立索引:

CREATE INDEX ON chunks(intime);

在進行數據插入的時候,我們可以直接使用SQL中的insert語法:

SELECT id,chunk,intime,url FROM chunks
ORDER BY
    feature <-> array[10,2.0,…,1536.0]
LIMIT 100;

在這個例子中,如果我們要通過文本搜索它的來源文章,那麼我們就可以直接通過向量檢索進行查找,具體SQL如下:

SELECT id,chunk,intime,url FROM chunks
ORDER BY
    feature <-> array[10,2.0,…,1536.0]
LIMIT 100;

同樣,如果我們的需求是查找最近一個月以內的某個文本的來源文章。那麼我們就可以直接通過融合檢索進行查找,具體SQL如下:

SELECT id, chunk, intime, url FROM chunks WHERE    
    intime > '2023-04-01' AND intime <= '2023-05-01' 
ORDER BY     
    feature <-> array[10,2.0,…, 1536.0] 
LIMIT 100;

在看完上面的例子之後,我們可以很清楚地發現,在ADB-PG中使用向量檢索和融合檢索就跟使用傳統數據庫一樣方便,沒有任何的學習門檻。同時,我們對向量檢索也有針對性地做了很多優化,如向量數據壓縮、向量索引並行構建、向量多分區並行檢索等等,這裏不再詳述。ADB-PG同時也具有豐富的全文檢索功能,支持複雜組合條件、結果排名等檢索能力;另外對於中文數據集,ADB-PG也支持中文分詞功能,能夠高效、自定義地對中文文本加工分詞;同時ADB-PG也支持使用索引加速全文檢索分析性能。這些能力同樣也可以在AIGC業務場景下得到充分的使用,如業務可以對知識庫文檔結合上述向量檢索和全文檢索能力進行雙路召回。知識數據庫搜索部分包括傳統的關鍵詞全文檢索和向量特徵檢索,關鍵詞全文檢索保證查詢的精準性,向量特徵檢索提供泛化性和語義匹配,除字面匹配之外召回和語義匹配的知識,降低無結果率,爲大模型提供更加豐富的上下文,有利於大語言模型進行總結歸納。

總結

結合本文前面所提到的內容,如果把滿腹經綸的Chatbot比喻成人,那麼大語言模型可以看成是Chatbot在大學畢業前從所有書本和各領域公開資料所獲得的知識和學習推理能力。所以基於大語言模型,Chatbot能夠回答截止到其畢業前相關的問題,但如果問題涉及到特定專業領域(相關資料爲企業組織專有,非公開)或者是新出現的物種概念(大學畢業時尚未誕生),僅靠在學校的知識所得(對應預訓練的大語言模型)則無法從容應對,需要具備畢業後持續獲得新知識的渠道(如工作相關專業學習資料庫),結合本身的學習推理能力,來做出專業應對。同樣的Chatbot需要結合大語言模型的學習推理能力,和像ADB-PG這樣包含向量檢索和全文檢索能力的一站式數據庫(存儲了企業組織專有的以及最新的知識文檔和向量特徵),在應對問題時具備基於該數據庫中的知識內容來提供更專業更具時效性的回答。

作者|阿里雲AnalyticDB

點擊立即免費試用雲產品 開啓雲上實踐之旅!

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章