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