??這兩天搗鼓了一下本地知識(shí)庫(kù)的搭建样眠,對(duì)于個(gè)人日常信息的處理來(lái)說(shuō)非常有必要友瘤,很多場(chǎng)景都可以滿足我的要求,尤其是基于一些文檔的問(wèn)答情況下檐束,AI可以幫我很好地回顧辫秧、梳理、總結(jié)被丧。
所以也想簡(jiǎn)單地記錄一下這個(gè)過(guò)程盟戏,希望可以幫到有同樣需求的朋友~
一、開(kāi)始搭建本地知識(shí)庫(kù)前甥桂,先想清楚幾個(gè)問(wèn)題
為什么要用AI知識(shí)庫(kù)柿究?
簡(jiǎn)單來(lái)說(shuō)就是用來(lái)管理信息的一個(gè)庫(kù),在傳統(tǒng)的數(shù)據(jù)管理方式中黄选,我們通常是用「關(guān)鍵字」來(lái)查找內(nèi)容蝇摸,這樣的方式在AI面前則顯得過(guò)于機(jī)械。現(xiàn)如今的AI對(duì)信息的閱讀理解办陷、總結(jié)輸出能力貌夕,已經(jīng)無(wú)限接近于受過(guò)良好教育的成人。所以如果通過(guò)AI方式來(lái)管理信息民镜,那么我們管理的過(guò)程也會(huì)更自然啡专,更接近于和人的互動(dòng)。如果把某個(gè)領(lǐng)域的專業(yè)內(nèi)容上傳到知識(shí)庫(kù)中殃恒,那么后續(xù)的交互則更像是和一個(gè)小助手對(duì)話,而不是感覺(jué)像在翻書一樣查找內(nèi)容辱揭。
為什么要搭建一個(gè)本地的知識(shí)庫(kù)离唐?
(1)免費(fèi):首先肯定是因?yàn)椤懊赓M(fèi)”,現(xiàn)在市場(chǎng)上所有云端AI服務(wù)基本都對(duì)免費(fèi)用戶有一定請(qǐng)求限制问窃,本地知識(shí)庫(kù)則可以永久免費(fèi)使用亥鬓。
(2)隱私保護(hù):我們?cè)诠芾硇畔r(shí)很多時(shí)候信息都比較隱私敏感晒旅,尤其是在管理商業(yè)公司內(nèi)部信息時(shí)雏亚,這些數(shù)據(jù)如果通過(guò)閉源云端大模型處理铸题,難免會(huì)有信息泄露的風(fēng)險(xiǎn)迄汛。并且本地知識(shí)庫(kù)還可以脫機(jī)工作蓖墅,不需要聯(lián)網(wǎng)即可進(jìn)行信息檢索桐磁,這對(duì)于很多安全要求較高的公司來(lái)說(shuō)也很適用士复。
(3)靈活性高:用戶可基于實(shí)際使用的場(chǎng)景來(lái)選擇合適的開(kāi)源模型搭建知識(shí)庫(kù)炭懊,恰當(dāng)?shù)倪x擇和配置尉姨,可提高整體的用戶體驗(yàn)庵朝。
本地知識(shí)庫(kù)有什么限制?
模型越大往往理解、推理九府、表達(dá)能力都更強(qiáng)椎瘟,所以如果跑在本地的話,我們選擇模型時(shí)需要考慮電腦的配置侄旬,一般也只能選擇比較小的模型來(lái)跑肺蔚。不過(guò)在知識(shí)庫(kù)應(yīng)用的場(chǎng)景下,小模型的處理能力也基本滿足要求儡羔。
如何避免大模型的「幻覺(jué)」宣羊?
大模型經(jīng)常會(huì)出現(xiàn)一本正經(jīng)的胡說(shuō)八道的「幻覺(jué)」現(xiàn)象,這使得很多存在客觀標(biāo)準(zhǔn)笔链、專業(yè)嚴(yán)肅的查詢無(wú)法通過(guò)AI問(wèn)答獲得很好的服務(wù)段只,比如醫(yī)療、金融等領(lǐng)域鉴扫。那么通過(guò)搭建知識(shí)庫(kù)則可以有效避免這種情況赞枕,上傳一些專業(yè)的內(nèi)容文檔,并要求AI從圈定的信息范圍內(nèi)進(jìn)行查詢坪创,且在Prompt中明確說(shuō)明只能通過(guò)知識(shí)庫(kù)內(nèi)容進(jìn)行問(wèn)答炕婶。那么一般來(lái)說(shuō)我們則可以完成與AI的溝通基于知識(shí)庫(kù)內(nèi)容,在設(shè)定的范圍內(nèi)輸出有效內(nèi)容莱预。
什么是RAG柠掂?
在搭建知識(shí)庫(kù)的學(xué)習(xí)過(guò)程中,我了解到了一個(gè)很重要的概念「RAG」依沮。那么下面就讓ChatGPT來(lái)詳細(xì)介紹一下什么是RAG吧O(∩_∩)O
什么是 RAG(Retrieval-Augmented Generation)涯贞?
RAG(檢索增強(qiáng)生成)是一種結(jié)合了信息檢索(Retrieval)和生成(Generation)技術(shù)的自然語(yǔ)言處理方法,用于創(chuàng)建更準(zhǔn)確和信息豐富的回答或內(nèi)容危喉。
基本概念
-知識(shí)庫(kù)(Knowledge Base):這是存儲(chǔ)大量信息和數(shù)據(jù)的地方宋渔。知識(shí)庫(kù)可以包含各種文檔、文章辜限、書籍等皇拣。
-嵌入(Embedding):嵌入是一種將文本數(shù)據(jù)轉(zhuǎn)換為向量(數(shù)字?jǐn)?shù)組)的技術(shù)。通過(guò)嵌入薄嫡,系統(tǒng)可以將復(fù)雜的文本轉(zhuǎn)換為可以在數(shù)學(xué)空間中處理的形式氧急。這有助于系統(tǒng)理解和比較不同文本的相似度。
-檢索(Retrieval):系統(tǒng)從知識(shí)庫(kù)中查找相關(guān)信息毫深。這個(gè)過(guò)程通常通過(guò)比較用戶提問(wèn)的嵌入向量和知識(shí)庫(kù)中文檔的嵌入向量的相似度來(lái)實(shí)現(xiàn)吩坝。
-生成(Generation):結(jié)合檢索到的信息,系統(tǒng)生成一個(gè)完整且有意義的回答哑蔫。這一步通常使用生成模型(如GPT-3)來(lái)完成钾恢。
RAG 是怎么工作的手素?
-提問(wèn)(用戶輸入):用戶提出問(wèn)題,比如“什么是 RAG瘩蚪?”泉懦。
-生成嵌入(Embedding Generation):系統(tǒng)將用戶的問(wèn)題轉(zhuǎn)換為嵌入向量。這一步通過(guò)預(yù)訓(xùn)練的語(yǔ)言模型(如BERT或GPT)來(lái)完成疹瘦。
-檢索相關(guān)信息(Information Retrieval):系統(tǒng)在知識(shí)庫(kù)中查找與問(wèn)題嵌入向量相似的文檔崩哩。具體做法是將知識(shí)庫(kù)中的文檔也轉(zhuǎn)換為嵌入向量,然后計(jì)算這些向量與問(wèn)題向量的相似度言沐,選擇相似度最高的幾個(gè)文檔邓嘹。
-生成答案(Answer Generation):系統(tǒng)將檢索到的文檔內(nèi)容與用戶的問(wèn)題結(jié)合起來(lái),通過(guò)生成模型生成一個(gè)完整的回答险胰。生成模型會(huì)綜合考慮問(wèn)題和檢索到的信息汹押,以確保回答準(zhǔn)確且相關(guān)起便。
舉個(gè)例子:
假設(shè)你問(wèn)一個(gè)智能助手:“最近的天氣怎么樣棚贾?”
-提問(wèn):你提出了問(wèn)題。
-生成嵌入:系統(tǒng)將你的問(wèn)題轉(zhuǎn)換為嵌入向量榆综。
-檢索信息:系統(tǒng)在知識(shí)庫(kù)中查找與問(wèn)題相關(guān)的天氣預(yù)報(bào)信息妙痹。知識(shí)庫(kù)中的天氣預(yù)報(bào)數(shù)據(jù)也被轉(zhuǎn)換為嵌入向量,系統(tǒng)通過(guò)計(jì)算相似度找到最相關(guān)的數(shù)據(jù)鼻疮。
-生成答案:系統(tǒng)將檢索到的天氣預(yù)報(bào)數(shù)據(jù)和你的問(wèn)題結(jié)合起來(lái)怯伊,通過(guò)生成模型生成一個(gè)答案:“今天的天氣是晴天,溫度在25到30度之間判沟」⑶郏”
為什么 RAG 很重要?
-更準(zhǔn)確:利用最新的挪哄、相關(guān)的外部信息吧秕,而不僅僅依賴已有的知識(shí)庫(kù)。
-更全面:結(jié)合多種信息來(lái)源中燥,可以生成更豐富的答案寇甸。
-靈活性:適應(yīng)不同類型的提問(wèn)和信息需求塘偎,提供動(dòng)態(tài)的疗涉、個(gè)性化的回答。
不知道你看懂沒(méi)吟秩,簡(jiǎn)單來(lái)說(shuō)可以理解 RAG 是一個(gè)在問(wèn)答過(guò)程中的框架咱扣,知識(shí)庫(kù)以及用戶輸入的內(nèi)容先經(jīng)過(guò)RAG框架,再與大模型交互涵防。RAG負(fù)責(zé)處理信息的嵌入闹伪、檢索、整合,之后再將內(nèi)容傳給大模型偏瓤,大模型再將這些輸出整理成自然語(yǔ)言輸出給用戶查閱杀怠。
而RAG在處理信息的過(guò)程中,第一步也是最重要的一步是「Embedding」(嵌入)厅克,是一種將復(fù)雜赔退、高維度的數(shù)據(jù),例如文本或圖像证舟,轉(zhuǎn)換成低維度向量空間中的向量硕旗,從而使機(jī)器學(xué)習(xí)算法能夠?qū)@些向量進(jìn)行處理和分析。
二女责、動(dòng)手搭建本地知識(shí)庫(kù)
由前面「RAG」這個(gè)概念的解釋漆枚,我們知道要基于一些給定信息來(lái)進(jìn)行AI交互,我們需要兩個(gè)基本的工具:大模型抵知、RAG墙基。那么我們應(yīng)該去哪里找這些工具,并通過(guò)何種方式將他們用起來(lái)呢辛藻?
1.安裝ollama
ollama是一款管理本地大模型的工具碘橘,非常適合小白,有手就會(huì)吱肌。官網(wǎng):https://ollama.com/
進(jìn)入官網(wǎng)后痘拆,下載適合自己電腦的版本即可。
2.通過(guò)ollama下載模型
ollama只是用來(lái)管理模型的工具氮墨,但是沒(méi)有頁(yè)面交互纺蛆,所以我們需要通過(guò)終端來(lái)操作。
先進(jìn)入「Models」頁(yè)面规揪,選擇適合的模型桥氏。
點(diǎn)擊相應(yīng)的模型進(jìn)入詳情頁(yè),可看到用于終端運(yùn)行該模型的命令語(yǔ)句猛铅,點(diǎn)擊復(fù)制然后去終端粘貼即可字支。
在終端運(yùn)行該模型后,我們就可以直接在終端與相應(yīng)模型進(jìn)行對(duì)話了奸忽。
3.安裝AnythingLLM
在終端雖然可以和大模型交互堕伪,但是終歸是不太方便的。AnythingLLM則提供了可以和大模型交互的頁(yè)面栗菜,同時(shí)它也是一個(gè)全棧應(yīng)用程序欠雌,提供了多種功能,旨在為用戶打造屬于個(gè)人的AI智能助手疙筹。官網(wǎng):https://useanything.com/
同樣選擇適合自己的版本下載即可富俄。
4.AnythingLLM基本配置
首先配置好大模型禁炒,這里我們選擇自己在ollama下載的模型即可。
另外兩個(gè)配置我都使用的AnythingLLM默認(rèn)的配置
5.創(chuàng)建Workspace霍比,并上傳知識(shí)庫(kù)內(nèi)容
AnythingLLM的會(huì)話幕袱,分不同的Workspace,每個(gè)Workspace可以單獨(dú)根據(jù)需要進(jìn)行一些基礎(chǔ)設(shè)置悠瞬。
創(chuàng)建好后可以直接上傳知識(shí)庫(kù)內(nèi)容凹蜂。
可以看到這里支持上傳文檔,也支持網(wǎng)頁(yè)內(nèi)容阁危,并且支持多個(gè)文檔內(nèi)容上傳玛痊。
上傳后還需要選擇哪些文檔在當(dāng)前Workspace中嵌入,嵌入成功后即可基于知識(shí)庫(kù)內(nèi)容和大模型進(jìn)行交流狂打。
開(kāi)始前要把當(dāng)天聊天區(qū)設(shè)置成「查詢」模式擂煞,這樣問(wèn)答就默認(rèn)基于上傳內(nèi)容展開(kāi)。
6.問(wèn)答效果
我是在汽車流通協(xié)會(huì)上找了一篇文章趴乡,復(fù)制文字保存成PDF上傳的(txt應(yīng)該也可以对省,可惜Mac不好創(chuàng)建就搞的麻煩了一點(diǎn)),可以看到問(wèn)答效果還算挺好的晾捏。這里我用的是qwen2 7b那個(gè)大模型蒿涎,0.5的試了一下,完全答非所問(wèn)??惦辛。
總結(jié):
這只是本地搭建知識(shí)庫(kù)的基本入門版劳秋,跑下來(lái)發(fā)現(xiàn),要想效果好胖齐,還是得電腦配置高啊玻淑,我這個(gè)丐版電腦跑著有點(diǎn)難受了??。如果不是企業(yè)級(jí)隱私的知識(shí)庫(kù)呀伙,也可以考慮用一些免費(fèi)的云端大模型API补履。我在AnythingLLM中配置了Groq的API key,試用了一下速度非辰肆恚快箫锤。不過(guò)免費(fèi)的對(duì)短時(shí)間內(nèi)請(qǐng)求的次數(shù)還是有些限制的,好在Groq可以幾個(gè)模型來(lái)回切換用雨女,一般情況下我感覺(jué)是夠用的谚攒。