導讀 如何基于向量數據庫+LLM(大語(yǔ)言模型),打造更懂你的企業(yè)專(zhuān)屬Chatbot? 1、為什么Chatbot需要大語(yǔ)言模型+向量數據庫? 這個(gè)春天,最讓人震感的科技產(chǎn)品莫過(guò)于ChatGPT的橫空出世,通過(guò)大語(yǔ)言模型(LLM)讓人們看到了生成式AI能實(shí)現到和人類(lèi)語(yǔ)言高度相仿的語(yǔ)言表達能力,AI不再遙不可及而已經(jīng)可以走進(jìn)人類(lèi)的工作和生活,這使得沉寂一段時(shí)間的AI領(lǐng)域重新煥發(fā)了能量,無(wú)數的從業(yè)者正趨之若鶩地投身于下一個(gè)改變時(shí)代的機會(huì );據不完全統計,在短短的4個(gè)月時(shí)間內,美國已經(jīng)完成了超4000筆的生成式AI的行業(yè)融資。生成式AI已經(jīng)成為了資本和企業(yè)都無(wú)法忽視的下一代的技術(shù)密碼,而其對于底層的基礎設施能力提供了更高的要求。 大模型能夠回答較為普世的問(wèn)題,但是若要服務(wù)于垂直專(zhuān)業(yè)領(lǐng)域,會(huì )存在知識深度和時(shí)效性不足的問(wèn)題, 那么企業(yè)如何抓住機會(huì )并構建垂直領(lǐng)域服務(wù)?目前有兩種模式,第一種是基于大模型之上做垂直領(lǐng)域模型的Fine Tune,這個(gè)綜合投入成本較大,更新的頻率也較低,并不適用于所有的企業(yè);第二種就是在向量數據庫中構建企業(yè)自有的知識資產(chǎn),通過(guò)大模型 + 向量數據庫來(lái)搭建垂直領(lǐng)域的深度服務(wù),本質(zhì)是使用數據庫進(jìn)行提示工程(Prompt Engineering)。以法律行業(yè)為例,基于垂直類(lèi)目的法律條文和判例,企業(yè)可以構建垂直領(lǐng)域的法律科技服務(wù)。如法律科技公司Harvey,正在構建“律師的副駕駛”(Copilot for Lawyer)以提高法律條文的起草和研究服務(wù)。將企業(yè)知識庫文檔和實(shí)時(shí)信息通過(guò)向量特征提取然后存儲到向量數據庫,結合LLM大語(yǔ)言模型可以讓Chatbot(問(wèn)答機器人)的回答更具專(zhuān)業(yè)性和時(shí)效性,構建企業(yè)專(zhuān)屬Chatbot。 如何基于大語(yǔ)言模型 + 阿里云AnalyticDB for PostgreSQL(以下簡(jiǎn)稱(chēng)ADB-PG,內置向量數據庫能力)讓Chatbot更好地回答時(shí)事問(wèn)題?歡迎移步“阿里云瑤池數據庫”視頻號觀(guān)看演示Demo。 本文接下來(lái)將重點(diǎn)介紹基于大語(yǔ)言模型(LLM)+向量數據庫打造企業(yè)專(zhuān)屬Chatbot的原理和流程,以及ADB-PG構建該場(chǎng)景的核心能力。 2、什么是向量數據庫? 在現實(shí)世界中,絕大多數的數據都是以非結構化數據的形式存在的,如圖片,音頻,視頻,文本等。這些非結構化的數據隨著(zhù)智慧城市,短視頻,商品個(gè)性化推薦,視覺(jué)商品搜索等應用的出現而爆發(fā)式增長(cháng)。為了能夠處理這些非結構化的數據,我們通常會(huì )使用人工智能技術(shù)提取這些非結構化數據的特征,并將其轉化為特征向量,再對這些特征向量進(jìn)行分析和檢索以實(shí)現對非結構化數據的處理。因此,我們把這種能存儲,分析和檢索特征向量的數據庫稱(chēng)之為向量數據庫。 向量數據庫對于特征向量的快速檢索,一般會(huì )采用構建向量索引的技術(shù)手段,我們通常說(shuō)的向量索引都屬于A(yíng)NNS(Approximate Nearest Neighbors Search,近似最近鄰搜索),它的核心思想是不再局限于只返回最精確的結果項,而是僅搜索可能是近鄰的數據項,也就是通過(guò)犧牲可接受范圍內的一點(diǎn)精確度來(lái)?yè)Q取檢索效率的提高。這也是向量數據庫與傳統數據庫最大的差別。 為了將ANNS向量索引更加方便的應用到實(shí)際的生產(chǎn)環(huán)境中,目前業(yè)界主要有兩種實(shí)踐方式。一種是單獨將ANNS向量索引服務(wù)化,以提供向量索引創(chuàng )建和檢索的能力,從而形成一種專(zhuān)有的向量數據庫;另一種是將ANNS向量索引融合到傳統結構化數據庫中,形成一種具有向量檢索功能的DBMS。在實(shí)際的業(yè)務(wù)場(chǎng)景中,專(zhuān)有的向量數據庫往往都需要和其他傳統數據庫配合起來(lái)一起使用,這樣會(huì )造成一些比較常見(jiàn)的問(wèn)題,如數據冗余、數據遷移過(guò)多、數據一致性問(wèn)題等,與真正的DBMS相比,專(zhuān)有的向量數據庫需要額外的專(zhuān)業(yè)人員維護、額外的成本,以及非常有限的查詢(xún)語(yǔ)言能力、可編程性、可擴展性和工具集成。 而融合了向量檢索功能的DBMS則不同,它首先是一個(gè)非常完備的現代數據庫平臺,能滿(mǎn)足應用程序開(kāi)發(fā)人員的數據庫功能需求;然后它集成的向量檢索能力一樣也可以實(shí)現專(zhuān)有的向量數據庫的功能,并且使向量存儲和檢索繼承了DBMS的優(yōu)秀能力,如易用性(直接使用SQL的方式處理向量)、事務(wù)、高可用性、高可擴展性等等。 本文介紹的ADB-PG即是具有向量檢索功能的DBMS,在包含向量檢索功能的同時(shí),還具備一站式的數據庫能力。在介紹ADB-PG的具體能力之前,我們先來(lái)看一下Demo視頻中Chatbot的創(chuàng )建流程和相關(guān)原理。 3、LLM大語(yǔ)言模型+ADB-PG:打造企業(yè)專(zhuān)屬Chatbot 案例-本地知識問(wèn)答系統 對于前面Demo視頻結合大語(yǔ)言模型LLM和ADB-PG進(jìn)行時(shí)事新聞點(diǎn)評解答的例子,讓LLM回答“通義千問(wèn)是什么”?梢钥吹,如果我們讓LLM直接回答,得到的答案沒(méi)有意義,因為L(cháng)LM的訓練數據集里并不包含相關(guān)的內容。而當我們使用向量數據庫作為本地知識存儲,讓LLM自動(dòng)提取相關(guān)的知識之后,其正確地回答了“通義千問(wèn)是什么”。 回答“通義千問(wèn)是什么” 同樣地,這種方式可以應用于處理文檔,PDF,郵件,網(wǎng)絡(luò )資訊等等尚未被LLM訓練數據集覆蓋到的內容。比如: 1.結合最新的航班信息和最新的網(wǎng)紅打卡地點(diǎn)等旅游攻略資源,打造旅游助手。比如回答下周最適合去哪里旅游,如何最經(jīng)濟實(shí)惠的問(wèn)題。 2.體育賽事點(diǎn)評,時(shí)事熱點(diǎn)新聞點(diǎn)評,總結。今天誰(shuí)是NBA比賽的MVP。 3.教育行業(yè),最新的教育熱點(diǎn)解讀,比如,告訴我什么是AIGC,什么是Stable Diffusion以及如何使用等等。 4.金融領(lǐng)域,快速分析各行業(yè)領(lǐng)域金融財報,打造金融咨詢(xún)助手。 5.專(zhuān)業(yè)領(lǐng)域的客服機器人... 實(shí)現原理 本地知識問(wèn)答系統(Local QA System)主要是通過(guò)結合了大語(yǔ)言模型的推理能力和向量數據庫的存儲和檢索能力。來(lái)實(shí)現通過(guò)向量檢索到最相關(guān)的語(yǔ)義片段,然后讓大語(yǔ)言模型結合相關(guān)片段上下文來(lái)進(jìn)行正確的推理得到結論。在這個(gè)過(guò)程中主要有兩個(gè)流程: a. 后端數據處理和存儲流程 b. 前端問(wèn)答流程 同時(shí)其底層主要依賴(lài)兩個(gè)模塊: 1. 基于大語(yǔ)言模型的推理模塊 2. 基于向量數據庫的向量數據管理模塊 Local QA system on LLM & VectorStore原理 后端數據處理和存儲流程 上圖黑色的部分為后端的數據處理流程,主要是將我們的原始數據求解embedding,并和原始數據一起存入到向量數據庫ADB-PG中。這里你只需要關(guān)注上圖的藍色虛線(xiàn)框部分。黑色的處理模塊和ADB-PG向量數據庫。 Step1:先將原始文檔中的文本內容全部提取出來(lái)。然后根據語(yǔ)義切塊,切成多個(gè)chunk,可以理解為可以完整表達一段意思的文本段落。在這個(gè)過(guò)程中還可以額外做一些元數據抽取,敏感信息檢測等行為。 Step2:將這些Chunk都丟給embedding模型,來(lái)求取這些chunk的embedding。 Step3:將embedding和原始chunk一起存入到向量數據庫中。 前端問(wèn)答流程 在這個(gè)過(guò)程中主要分為三個(gè)部分:1.問(wèn)題提煉部分;2.向量檢索提取最相關(guān)知識;3.推理求解部分。在這里我們需要關(guān)注橙色部分。單單說(shuō)原理可能比較晦澀,我們還是用上面的例子來(lái)說(shuō)明。 Local QA system on LLM & VectorStore Part1 問(wèn)題提煉 這個(gè)部分是可選的,之所以存在是因為有些問(wèn)題是需要依賴(lài)于上下文的。因為用戶(hù)問(wèn)的新問(wèn)題可能沒(méi)辦法讓LLM理解這個(gè)用戶(hù)的意圖。 比如用戶(hù)的新問(wèn)題是“它能做什么”。LLM并不知道它指的是誰(shuí),需要結合之前的聊天歷史,比如“通義千問(wèn)是什么”來(lái)推理出用戶(hù)需要求解答案的獨立問(wèn)題“通義千問(wèn)能做什么”。LLM沒(méi)法正確回答“它有什么用”這樣的模糊問(wèn)題,但是能正確回答“通義千問(wèn)有什么用”這樣的獨立問(wèn)題。如果你的問(wèn)題本身就是獨立的,則不需要這個(gè)部分。 得到獨立問(wèn)題后,我們可以基于這個(gè)獨立問(wèn)題,來(lái)求取這個(gè)獨立問(wèn)題的embedding。然后去向量數據庫中搜索最相似的向量,找到最相關(guān)的內容。這個(gè)行為在Part2 Retrieval Plugin的功能中。 Part2 向量檢索 獨立問(wèn)題求取embedding這個(gè)功能會(huì )在text2vec模型中進(jìn)行。在獲得embedding之后就可以通過(guò)這個(gè)embedding來(lái)搜索已經(jīng)事先存儲在向量數據庫中的數據了。比如我們已經(jīng)在A(yíng)DB-PG中存儲了下面內容。我們就可以通過(guò)求取的向量來(lái)獲得最相近的內容或者知識,比如第一條和第三條。通義千問(wèn)是...,通義千問(wèn)可以幫助我們xxx。 Part3 推理求解 在獲得最相關(guān)的知識之后,我們就可以就可以讓LLM基于最相關(guān)的知識和獨立問(wèn)題來(lái)進(jìn)行求解推理,得到最終的答案了。這里就是結合“通義千問(wèn)是...”,“通義千問(wèn)可以幫助我們xxx”等等最有效的信息來(lái)回答“通義千問(wèn)有什么用”這個(gè)問(wèn)題了。最終讓GPT的推理求解大致是這樣: 4、ADB-PG:內置向量檢索+全文檢索的一站式企業(yè)知識數據庫 為什么ADB-PG適合作為Chatbot的知識數據庫?ADB-PG是一款具備大規模并行處理能力的云原生數據倉庫。它支持行存儲和列存儲模式,既可以提供高性能的離線(xiàn)數據處理,也可以支持高并發(fā)的海量數據在線(xiàn)分析查詢(xún)。因此我們可以說(shuō)ADB-PG是一個(gè)支持分布式事務(wù)、混合負載的數據倉庫平臺,同時(shí)也支持處理多種非結構化和半結構化數據源。如通過(guò)向量檢索插件實(shí)現了對圖片、語(yǔ)言、視頻、文本等非結構化數據的高性能向量檢索分析,對JSON等半結構化數據的全文檢索分析。 因此在A(yíng)IGC場(chǎng)景下,ADB-PG既可以作為一款向量數據庫滿(mǎn)足其對向量存儲和檢索的需求,也可以滿(mǎn)足其他結構化數據的存儲和查詢(xún),同時(shí)也可以提供全文檢索的能力,為AIGC場(chǎng)景下的業(yè)務(wù)應用提供一站式的解決方案。下面我們將對ADB-PG的向量檢索、融合檢索和全文檢索這三方面的能力進(jìn)行詳細介紹。 ADB-PG向量檢索和融合檢索功能于2020年首次在公有云上線(xiàn),目前已經(jīng)在人臉識別領(lǐng)域得到了非常廣泛的應用。ADB-PG的向量數據庫繼承自數據倉庫平臺,因此它幾乎擁有DBMS的所有好處,如ANSISQL、ACID事務(wù)、高可用性、故障恢復、時(shí)間點(diǎn)恢復、可編程性、可擴展性等。同時(shí)它支持了點(diǎn)積距離、漢明距離和歐氏距離的向量和向量的相似度搜索。這些功能目前在人臉識別、商品識別和基于文本的語(yǔ)義搜索中得到了廣泛應用。隨著(zhù)AIGC的爆炸式增長(cháng),這些功能為基于文本的Chatbot奠定了堅實(shí)的基礎。另外,ADB-PG向量檢索引擎也使用Intel SIMD指令極其有效地實(shí)現了向量相似性匹配。 下面我們用一個(gè)具體的例子來(lái)說(shuō)明ADB-PG的向量檢索和融合檢索如何使用。假設有一個(gè)文本知識庫,它是將一批文章分割成chunk再轉換為embedding向量后入庫的,其中chunks表包含以下字段: 那么對應的建表DDL如下: 為了對向量檢索進(jìn)行加速,我們還需要建立一個(gè)向量索引: 同時(shí)為了對向量結構化融合查詢(xún)提供加速,我們還需要為常用的結構化列建立索引: 在進(jìn)行數據插入的時(shí)候,我們可以直接使用SQL中的insert語(yǔ)法: 在這個(gè)例子中,如果我們要通過(guò)文本搜索它的來(lái)源文章,那么我們就可以直接通過(guò)向量檢索進(jìn)行查找,具體SQL如下: 同樣,如果我們的需求是查找最近一個(gè)月以?xún)鹊哪硞(gè)文本的來(lái)源文章。那么我們就可以直接通過(guò)融合檢索進(jìn)行查找,具體SQL如下: 在看完上面的例子之后,我們可以很清楚地發(fā)現,在A(yíng)DB-PG中使用向量檢索和融合檢索就跟使用傳統數據庫一樣方便,沒(méi)有任何的學(xué)習門(mén)檻。同時(shí),我們對向量檢索也有針對性地做了很多優(yōu)化,如向量數據壓縮、向量索引并行構建、向量多分區并行檢索等等,這里不再詳述。 ADB-PG同時(shí)也具有豐富的全文檢索功能,支持復雜組合條件、結果排名等檢索能力;另外對于中文數據集,ADB-PG也支持中文分詞功能,能夠高效、自定義地對中文文本加工分詞;同時(shí)ADB-PG也支持使用索引加速全文檢索分析性能。這些能力同樣也可以在A(yíng)IGC業(yè)務(wù)場(chǎng)景下得到充分的使用,如業(yè)務(wù)可以對知識庫文檔結合上述向量檢索和全文檢索能力進(jìn)行雙路召回。 知識數據庫搜索部分包括傳統的關(guān)鍵詞全文檢索和向量特征檢索,關(guān)鍵詞全文檢索保證查詢(xún)的精準性,向量特征檢索提供泛化性和語(yǔ)義匹配,除字面匹配之外召回和語(yǔ)義匹配的知識,降低無(wú)結果率,為大模型提供更加豐富的上下文,有利于大語(yǔ)言模型進(jìn)行總結歸納。 5、總結 結合本文前面所提到的內容,如果把滿(mǎn)腹經(jīng)綸的Chatbot比喻為人類(lèi),那么大語(yǔ)言模型可以看成是Chatbot在大學(xué)畢業(yè)前從所有書(shū)本和各領(lǐng)域公開(kāi)資料所獲得的知識和學(xué)習推理能力。所以基于大語(yǔ)言模型,Chatbot能夠回答截止到其畢業(yè)前相關(guān)的問(wèn)題,但如果問(wèn)題涉及到特定專(zhuān)業(yè)領(lǐng)域(相關(guān)資料為企業(yè)組織專(zhuān)有,非公開(kāi))或者是新出現的物種概念(大學(xué)畢業(yè)時(shí)尚未誕生),僅靠在學(xué)校的知識所得(對應預訓練的大語(yǔ)言模型)則無(wú)法從容應對,需要具備畢業(yè)后持續獲得新知識的渠道(如工作相關(guān)專(zhuān)業(yè)學(xué)習資料庫),結合本身的學(xué)習推理能力,來(lái)做出專(zhuān)業(yè)應對。 同樣的Chatbot需要結合大語(yǔ)言模型的學(xué)習推理能力,和像ADB-PG這樣包含向量檢索和全文檢索能力的一站式數據庫(存儲了企業(yè)組織專(zhuān)有的以及最新的知識文檔和向量特征),在應對問(wèn)題時(shí)具備基于該數據庫中的知識內容來(lái)提供更專(zhuān)業(yè)更具時(shí)效性的回答。 |