利用DeepSeek-R1構(gòu)建簡(jiǎn)單的本地知識(shí)庫(kù)

一 簡(jiǎn)介

初期接觸LLM即大語(yǔ)言模型,覺(jué)得雖然很強(qiáng)大,但是有時(shí)候AI會(huì)一本正經(jīng)的胡說(shuō)八道,這種大模型的幻覺(jué)對(duì)于日常使用來(lái)說(shuō)具有很大的誤導(dǎo)性,特別是如果我們要用在生成環(huán)境下,由于缺少精確性而無(wú)法使用。
為什么會(huì)造成這種結(jié)果那,簡(jiǎn)單來(lái)說(shuō)就是模型是為了通用性設(shè)計(jì)的,缺少相關(guān)知識(shí),所以導(dǎo)致回復(fù)的結(jié)果存在胡說(shuō)八道的情況,根據(jù)香農(nóng)理論,減少信息熵,就需要引入更多信息。

從這個(gè)角度來(lái)說(shuō),就有兩個(gè)途徑,一是重新利用相關(guān)專(zhuān)業(yè)知識(shí)再次訓(xùn)練加強(qiáng)模型,或進(jìn)行模型微調(diào);
模型訓(xùn)練的成本是巨大的,微調(diào)也需要重新標(biāo)記數(shù)據(jù)和大量的計(jì)算資源,對(duì)于個(gè)人來(lái)說(shuō)基本不太現(xiàn)實(shí);
二是在問(wèn)LLM問(wèn)題的時(shí)候,增加些知識(shí)背景,讓模型可以根據(jù)這些知識(shí)背景來(lái)回復(fù)問(wèn)題;后者即是知識(shí)庫(kù)的構(gòu)建原理了。

有個(gè)專(zhuān)門(mén)的概念叫RAG(Retrieval-Augmented Generation),即檢索增強(qiáng)生成,是一種結(jié)合檢索技術(shù)和生成模型的技術(shù)框架,旨在提升模型生成內(nèi)容的準(zhǔn)確性和相關(guān)性。其核心思想是:在生成答案前,先從外部知識(shí)庫(kù)中檢索相關(guān)信息,再將檢索結(jié)果與用戶(hù)輸入結(jié)合,指導(dǎo)生成模型輸出更可靠的回答。

二 RAG原理

簡(jiǎn)單概述,利用已有的文檔、內(nèi)部知識(shí)生成向量知識(shí)庫(kù),在提問(wèn)的時(shí)候結(jié)合庫(kù)的內(nèi)容一起給大模型,讓其回答的更準(zhǔn)確,它結(jié)合了信息檢索和大模型技術(shù);

分步驟來(lái)說(shuō),首先是檢索階段,當(dāng)用戶(hù)輸入一個(gè)問(wèn)題時(shí),系統(tǒng)會(huì)從外部數(shù)據(jù)庫(kù)或文檔中檢索相關(guān)的信息或文檔片段。然后,在生成階段,這些檢索到的信息會(huì)和原始問(wèn)題一起輸入到生成模型中,生成最終的答案。這樣,模型不僅依賴(lài)于內(nèi)部知識(shí),還能利用外部實(shí)時(shí)或特定的數(shù)據(jù)。

我們?nèi)粘:?jiǎn)單通過(guò)chat交互方式使用大模型如下圖:


直接提問(wèn)模式

我們搭建了RAG后,整體架構(gòu)如下圖:


RAG回答

說(shuō)明:

  1. 建立索引: 需要將日常的業(yè)務(wù)知識(shí),以文件形式給分成較短的塊(chunk),然后進(jìn)行編碼,向量化存入到向量化的庫(kù)中;nomic-embed-text-v1模型就是做這個(gè)事情的。

  2. 檢索向量庫(kù): 根據(jù)用戶(hù)的提問(wèn),到向量庫(kù)中去進(jìn)行向量匹配,檢索出相似的chunk,作為提問(wèn)的上下文;

  3. 生成回復(fù): 將用戶(hù)的提問(wèn)內(nèi)容和檢索的塊結(jié)合發(fā)送給大模型,大模型結(jié)合兩者進(jìn)行問(wèn)題的回復(fù);

這樣做有什么好處那?

  1. 由于日常的業(yè)務(wù)知識(shí)是保存到本地的,所以減少信息泄露的風(fēng)險(xiǎn);
  2. 由于提問(wèn)結(jié)合了業(yè)務(wù)知識(shí),所以減少了模型的幻覺(jué),即減少了模型的胡說(shuō)八道;
  3. 模型的回復(fù)結(jié)合了業(yè)務(wù)知識(shí)和實(shí)時(shí)知識(shí),所以實(shí)時(shí)性可以更好;
  4. 不用重新訓(xùn)練模型,微調(diào)模型降低了成本;

三 實(shí)踐

需要安裝以下工具:

  1. Ollama: 用于下載和管理模型,前面文章介紹過(guò);
  2. DeepSeek-R1 : 我們本次要使用的LLM模型,前面文章也介紹過(guò);
  3. Nomic-Embed-Text向量模型: 用于將文本庫(kù)進(jìn)行切分,編碼,轉(zhuǎn)換進(jìn)入向量庫(kù);
  4. AnythingLLM: 開(kāi)源AI私有化應(yīng)用構(gòu)建平臺(tái),即將多個(gè)模型搭配起來(lái),共同構(gòu)建一個(gè)私有化應(yīng)用;利用強(qiáng)大的內(nèi)置工具和功能快速運(yùn)行本地 LLM,無(wú)需復(fù)雜的設(shè)置。
    Ollama和DeepSeek-R1模型前面已經(jīng)安裝過(guò)了,就不再贅述,下面安裝另外兩個(gè)工具;

3.1 Nomic-Embed-Text 模型安裝

簡(jiǎn)單介紹下,Nomic-Embed-Text模型是一個(gè)強(qiáng)大的嵌入式文本處理工具,將我們的業(yè)務(wù)知識(shí)(專(zhuān)業(yè)點(diǎn)的叫法語(yǔ)料庫(kù))轉(zhuǎn)成高緯度的向量空間中的點(diǎn),以便后續(xù)進(jìn)行相似度計(jì)算、分類(lèi)、聚類(lèi)、檢索等。
聽(tīng)起來(lái)這個(gè)好像很高級(jí),如果簡(jiǎn)單來(lái)看的話(huà),其實(shí)底層原理也簡(jiǎn)單,文本相似度可以通過(guò)兩個(gè)高緯度向量的余弦值大小來(lái)判斷的,余弦值越大的,兩個(gè)高緯度向量靠的越近,相關(guān)性大,反之亦然,當(dāng)然也有復(fù)雜的算法。


余弦計(jì)算相似度
余弦值計(jì)算

通過(guò)pull命令直接安裝,大小為274MB,還是比較小的:

ollama pull nomic-embed-text

然后通過(guò)ollama list查詢(xún):

mac@MacdeMacBook-Pro models % ollama list
NAME                       ID              SIZE      MODIFIED
nomic-embed-text:latest    0a109f422b47    274 MB    17 minutes ago
deepseek-r1:1.5b           a42b25d8c10a    1.1 GB    4 days ago

網(wǎng)上找一個(gè)使用的例子,大家可以直觀(guān)的體會(huì)下:

from transformers import AutoTokenizer, AutoModel
import torch
 
# 加載模型和分詞器
tokenizer = AutoTokenizer.from_pretrained("nomic-embed-text-v1")
model = AutoModel.from_pretrained("nomic-embed-text-v1")
 
# 輸入文本
text1 = "今天天氣好!"
text2 = "今天的天氣真是好?。?
 
# 將文本轉(zhuǎn)換為模型輸入格式
encoding = tokenizer(text1, text2, return_tensors="pt")
 
# 獲取文本嵌入
with torch.no_grad():
    outputs = model(**encoding)
 
# 計(jì)算文本嵌入的余弦相似度
cosine_similarity = torch.nn.functional.cosine_similarity(outputs.last_hidden_state[0], outputs.last_hidden_state[1])
print("文本相似度:", cosine_similarity.item())

3.2 AnythingLLM安裝

如它官網(wǎng)圖https://anythingllm.com/desktop所示,是一個(gè)強(qiáng)大的靈活的平臺(tái),通過(guò)它可以連接多個(gè)LLM模型,構(gòu)建本地私有的LLM應(yīng)用,配置界面簡(jiǎn)單直觀(guān)。

Anything LLM

非??上?,我macos的版本低,運(yùn)行Anything LLM報(bào)錯(cuò),找了不少辦法還是不行,所以在虛擬機(jī):windows下安裝下,運(yùn)行界面:

anythingLLM

如上圖可以看到,這個(gè)架構(gòu)默認(rèn)需要一個(gè)chat模型,需要embedder模型和一個(gè)向量數(shù)據(jù)庫(kù):LanceDB,用來(lái)保存私有化的數(shù)據(jù);

按右邊的向右箭頭,新建個(gè)工作區(qū):


新建工作區(qū)

接著進(jìn)行模型配置:


模型配置

選擇LLM模型提供商,配置下url,如下圖:


image.png

點(diǎn)擊右上角的 Save changes。

向量數(shù)據(jù)庫(kù)無(wú)需配置,默認(rèn):


向量數(shù)據(jù)庫(kù)

embedder模型,可以用默認(rèn)的,或通過(guò)ollama供應(yīng)商提供的,我先用ollama試試效果:


embedder模型

別忘記點(diǎn)擊修改。
這里面有個(gè)坑,雖然11434端口開(kāi)了,但是默認(rèn)只能用127.0.0.1訪(fǎng)問(wèn),如果綁定所有ip,則在mac下需要配置:

mac@MacdeMacBook-Pro Homebrew % sudo sh -c 'echo "export OLLAMA_HOST=0.0.0.0:11434">>/etc/profile'launchctl setenv OLLAMA_HOST "0.0.0.0:11434" 

返回剛才新建的工作區(qū),點(diǎn)擊后進(jìn)入聊天界面就可以上傳語(yǔ)料進(jìn)行交互問(wèn)答了。


語(yǔ)料上傳分析

至此個(gè)人知識(shí)庫(kù)終于創(chuàng)建完畢了。

個(gè)人知識(shí)庫(kù)的問(wèn)答

四 總結(jié)

我們通過(guò)搭建本地模型,配合Embedder和向量數(shù)據(jù)庫(kù),可以直接構(gòu)建一個(gè)隱私性更好,實(shí)時(shí)性更高的個(gè)人知識(shí)庫(kù)DAG。工作中除了需要知識(shí)庫(kù),更需要BPA,即業(yè)務(wù)自動(dòng)化,利用LLM模型來(lái)提高自動(dòng)化水平,這種系統(tǒng)更實(shí)用,下一步的目標(biāo)是逐步構(gòu)建BPA系統(tǒng),希望大家能持續(xù)關(guān)注。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容