【AIGC FREE】我的知識(shí)我來(lái)管——制作私人知識(shí)庫(kù)
終于要開(kāi)始寫些有用的東西了,寫些什么呢?當(dāng)下AIGC這么火,我亦不能免俗。當(dāng)然也不能寫得太普通了,也要有些自己的特色,寫AIGC的文章很多,有很多[有手就行]、[你奶奶都會(huì)]之類的,讀來(lái)也很有趣,做個(gè)入門挺好的,但我想做得更深入些,更講究些,涉及些原理但不像是授課,涉及些編碼但不像是工作,總之學(xué)中玩、玩中學(xué),開(kāi)開(kāi)心心每一天哈!??
我不喜歡做什么規(guī)劃、計(jì)劃,以前讀研的時(shí)候有個(gè)同學(xué)說(shuō)過(guò)“規(guī)劃、規(guī)劃,就是鬼話、鬼話”,我深以為然。我平時(shí)不愛(ài)寫東西,我喜歡的是想,尤其是瞎想,俗稱發(fā)呆的那種,這不禁讓我想起十六七年前的一件事,我當(dāng)時(shí)在安徽出差,宿舍旁邊有個(gè)休閑場(chǎng)所,那頂上寫的幾個(gè)斗大的招牌,什么“休閑”、“娛樂(lè)”、“棋牌”、“唱歌”之類的,中間赫然有兩個(gè)字——發(fā)呆,第一次見(jiàn)時(shí)倒有點(diǎn)懵住了,心想這“發(fā)呆”難道還得找個(gè)好地兒?jiǎn)??可越往后越覺(jué)得發(fā)呆是件很奢侈的事情了。竊以為發(fā)呆是個(gè)想法沉淀、交織、自動(dòng)碰撞的過(guò)程,往往發(fā)過(guò)呆后會(huì)有一些不錯(cuò)的想法跳出來(lái),甚至很多是那種清醒時(shí)無(wú)論如何也想不到的,或許你靜靜地啥也不做的時(shí)候,倒是給頭腦里(或心里,到底人的思想是在腦袋里還是在心里,這也是個(gè)問(wèn)題,我也看過(guò)有記錄說(shuō)人換了心臟后就完全變成另一個(gè)人的故事,我們一面說(shuō)“心里所想”,另一面又說(shuō)“腦袋空空”,陽(yáng)明“心”學(xué),智慧大“腦”,總之這是另外一個(gè)問(wèn)題了)各種想法一個(gè)爭(zhēng)奇斗艷的機(jī)會(huì)了,它們或爭(zhēng)斗,或壓或擠,或融合、扭曲,分解又組合,想想CNN中的隱藏層,人腦(心)可比那復(fù)雜的多了,里面一片翻江倒海(全連接、超全連接,跨了幾百層的可能都有,LSTM和RNN跟它相比都是小巫),外面卻是那么安靜,一靜一動(dòng),宛如八卦太極圖,黑白相生,動(dòng)靜相宜。
盡管如此呢,我還是想劃定一個(gè)范圍,大致有以下幾點(diǎn)要寫一寫,算是“有但不限于”的那種:
一、文本生成,大語(yǔ)文模型(后面我會(huì)用LLM代替,少打幾個(gè)字)的看家本領(lǐng),包括微調(diào)(不太想談)和langchain(這個(gè)可以談,一會(huì)就談);
二、語(yǔ)音生成,包括人聲分離、情感識(shí)別、語(yǔ)音克隆、語(yǔ)音替換、語(yǔ)音對(duì)話等等與聲音有關(guān)的,這個(gè)主要流程已經(jīng)走通了,但包含的內(nèi)容比較多,要分個(gè)幾期來(lái)說(shuō);
三、圖片生成,MJ&SD之類,這塊我還不太熟悉,傳統(tǒng)的photoshop、3d max、coredraw之類我還熟悉些,但似乎沒(méi)啥幫助,邊學(xué)邊寫吧;
四、視頻生成,包括換臉、換衣服,尤其是數(shù)字人,有些以前做過(guò),有些正在研究,慢慢來(lái);
五、其他,所有不能歸類于上面四類的,都放在這,我現(xiàn)在也不知道會(huì)有些什么,要看我發(fā)呆時(shí)能面蹦出什么了。
看我這個(gè)系列,需要有一些小準(zhǔn)備的,現(xiàn)在這里統(tǒng)一說(shuō)一下,后面就不再提了:
(1)要有一個(gè)google賬號(hào)
(2)要注冊(cè)一個(gè)goole云盤
(3)會(huì)用google colab,我這邊的案例大部分是用colab跑的
(4)最好懂一點(diǎn)python,出現(xiàn)問(wèn)題可以簡(jiǎn)單調(diào)試一下,當(dāng)然也可以問(wèn)我,我很樂(lè)于回答
(5)有個(gè)openai的號(hào),至少能連gpt3.5(本著FREE的原則,我目前也沒(méi)有升級(jí)到plus),
下面該寫今天的主題了,如何做一個(gè)自己的私人知識(shí)庫(kù),
首先你得有個(gè)矢量庫(kù)用來(lái)存放你的私人文檔(的矢量),我在這用的是pinecone,一個(gè)在線的矢量庫(kù),如果你沒(méi)有用過(guò),請(qǐng)做以下操作:
?到?https://www.pinecone.io/?上注冊(cè)一個(gè)賬號(hào),注冊(cè)之后并不能馬上用,只是先進(jìn)入到一個(gè)waitlist,耐心等上幾天(短的一兩天,長(zhǎng)的一兩周);
等你收到確認(rèn)郵件后,再次登錄pinecone網(wǎng)站,需要?jiǎng)?chuàng)建索引

在彈出框中填寫索引名稱(任意)、維度(一定要填768)


這樣就創(chuàng)建好索引了;
3.?下面到左側(cè)菜單欄API?Keys,查看,這個(gè)頁(yè)面先別關(guān)掉,后面會(huì)用到

接下來(lái),直接上代碼,請(qǐng)?jiān)趃oogle瀏覽器中打開(kāi)我分享的鏈接:
https://colab.research.google.com/drive/10nBse4sqAxQWNmGbc0rXcCSQP-RFXlDH?usp=sharing
(注:在此聲明一下,這些代碼并非本人所創(chuàng),乃是langchain-chatglm群 @裘?老兄所創(chuàng),他的代碼原來(lái)分為兩部分,文檔寫矢量庫(kù)是在kaggle上跑的,問(wèn)答頁(yè)面部分是在huggingface上跑的,我將兩者合并了,略做些修改,都放到colab中了)
下面做一個(gè)重要的步驟,把打開(kāi)的colab在你自己的google云盤中保存一份(如下圖):


在新標(biāo)簽頁(yè)打開(kāi),前面打開(kāi)的colab頁(yè)面可以關(guān)掉了。之所以保存在你自己的google云盤中,有兩個(gè)原因:一是這是你自己的文件,后面所做的任何修改都會(huì)保存下來(lái);二是后面你再跑這個(gè)colab程序,你就可以到你自己的云盤上去直接打開(kāi)就行了,在google云盤上打開(kāi)colab文件的方式如下圖所示:

剛打開(kāi)的colab文件如下圖所示:

先別急著執(zhí)行,我們先要做一些修改,往下找,找到一個(gè)代碼框是以“#上傳文檔到pinecone,需預(yù)先注冊(cè)好pinecone賬號(hào),并創(chuàng)建一個(gè)index”開(kāi)頭的,在這個(gè)代碼框中繼續(xù)往下找,找到如下圖所示的幾行代碼:

把代碼中xxxx部分替換成你的pinecone中的API Key、environment和索引名稱。
接著點(diǎn)擊colab頁(yè)面左邊的

按鈕,會(huì)顯示目錄樹(shù),然后從你本地磁盤拖個(gè)文件上去:

等待文件上傳完成,可以一次上傳多個(gè)文件,當(dāng)前支持PDF和docx兩種類型的文件,文件上傳完成后會(huì)顯示在目錄樹(shù)中。
注意:如果上傳文件的位置如上圖所示,右邊代碼中的“/content"就不用改。(當(dāng)然你也可以改成其他目錄,相應(yīng)右邊的代碼也要調(diào)整)

代碼中默認(rèn)是上傳PDF文件的,如果要上傳docx文件,需要對(duì)代碼做些修改(如下圖)

注:如果你上傳的文件中既有PDF文件,也有docx文件,則這段代碼則需要執(zhí)行兩次(先執(zhí)行PDF矢量化,修改代碼后,再執(zhí)行docx文件矢量化)
修改之后,隨時(shí)用Ctrl+S保存,修改后的內(nèi)容將直接保存到你的google云盤上。
下面回到colab頁(yè)面的開(kāi)頭,逐個(gè)代碼塊執(zhí)行,執(zhí)行代碼塊很簡(jiǎn)單,只要點(diǎn)擊代碼塊左邊的

按鈕即可,colab的代碼塊只能順序執(zhí)行(即下一個(gè)必須等上一個(gè)執(zhí)行完才能執(zhí)行,當(dāng)然你可以先點(diǎn)上這個(gè)按鈕,會(huì)有一個(gè)虛框套住這個(gè)按鈕,等前一代碼塊執(zhí)行完后會(huì)自動(dòng)執(zhí)行這個(gè)代碼塊,初學(xué)者最好一步一步來(lái),不要著急)
執(zhí)行過(guò)程中有幾個(gè)代碼塊需要單獨(dú)講一下,比如下面這個(gè)代碼塊,在執(zhí)行完成后會(huì)出現(xiàn)“RESTART?RUNTIME”按鈕,這個(gè)沒(méi)啥,點(diǎn)它,然后在彈出框中點(diǎn)擊“是”,即可

執(zhí)行過(guò)程中注意觀察輸出日志,比如文檔寫矢量庫(kù)的代碼執(zhí)行的日志大概是這樣的:

最后一步,“#打開(kāi)知識(shí)庫(kù)對(duì)話界面”,執(zhí)行之后會(huì)出現(xiàn)一個(gè)鏈接URL(藍(lán)色部分)

在藍(lán)色鏈接上點(diǎn)擊右鍵,在菜單中選擇“在新標(biāo)簽頁(yè)中打開(kāi)鏈接”,打開(kāi)的新鏈接頁(yè)面,需要做一些配置,按下面的圖示操作即可

把 top_k調(diào)小一點(diǎn)(2或3),防止token太長(zhǎng)

這里也要輸入你自己的pinecone的API Key、environment和索引名稱:

如果不想每次打開(kāi)這個(gè)界面都要輸入pinecone相關(guān)信息,也可以在執(zhí)行最后一個(gè)代碼塊(即“#打開(kāi)知識(shí)庫(kù)對(duì)話界面”)前先修改一下以下代碼
好了,下面可以愉快地開(kāi)始問(wèn)答了
對(duì)于每個(gè)問(wèn)題,你還可以查看一下命中了你知識(shí)庫(kù)中的哪個(gè)文檔的哪個(gè)部分,由于gpt的幻覺(jué),你最好看看這里,如果還不放心,就去查查原文檔(我就遇到過(guò)連這種命中都是編出來(lái)的情況)
好了,至此你的私人知識(shí)庫(kù)已經(jīng)搭建起來(lái)了,有幾點(diǎn)需要注意的:
pinecone庫(kù)要時(shí)不時(shí)用一下,比如寫點(diǎn)進(jìn)去,或者跟知識(shí)庫(kù)作些問(wèn)答, 因?yàn)槿绻?strong>14天你沒(méi)運(yùn)作,那你的索引庫(kù)就被自動(dòng)清除了:(
這里的核心思想是langchain,我不細(xì)說(shuō),仔細(xì)看代碼,有不明白的可以留言提問(wèn)
這里我留個(gè)題目給大家,看看有沒(méi)有人能做出來(lái):為什么我們?cè)趐inecone中創(chuàng)建的索引的維度必須是768?
最后,祝大家玩得開(kāi)心,學(xué)得愉快!
補(bǔ)充說(shuō)一下,如果你只想搭建一個(gè)知識(shí)庫(kù),最快的辦法是用Dify:https://cloud.dify.ai/apps
我簡(jiǎn)單用兩句話總結(jié)一下,就是你建應(yīng)用,建數(shù)據(jù)集,將應(yīng)用和數(shù)據(jù)集綁定起來(lái),兩分鐘搞定。詳細(xì)操作請(qǐng)查看 @卡茲克?的公眾號(hào)文章:【有手就行】2分鐘0代碼,教你用Dify搭建專屬AI知識(shí)庫(kù)
注:Dify是開(kāi)源的,也支持本地部署。