基於 AnythingLLM 及 Ollama 構建本地知識庫

knqiufan發表於2024-07-29

基於 AnythingLLM 及 Ollama 構建本地知識庫

  • RAG
  • Ollama
  • AnythingLLM

1. 什麼是 RAG

RAG(Retrieval Augmented Generation)檢索增強生成,是 2023 年最火熱的 LLM 應用系統架構,它的作用簡單來說就是透過檢索獲取相關的知識並將其融入 Prompt,讓大模型能夠參考相應的知識從而給出合理回答。

現在的大模型在企業應用中存在著很多挑戰,首先第一點就是大模型的世界知識是完全來自於模型預訓練中提供的資料,是有限的,那麼企業本身的業務知識與產品知識,這些大模型都是不知道的。如果透過微調等方式去給大模型補充這些知識,成本高且可控性低,大部分場景是不適合的。以及大模型有比較嚴重的幻覺問題,也就是大模型在不熟悉的領域會提供不正確的答案,那在企業應用的場合裡很多都是嚴肅的場景,對於這方面的接受程度是比較低的。

所以出現了 RAG。RAG 給大模型提供了一個外部的知識庫,這個知識庫可以是文件的集合也可以是網站或者是其他結構化非結構化的知識庫,當使用者提出問題的時候,透過 Embedding 向量化處理和關鍵字查詢等各種檢索方式,把相關內容從知識庫中拉出來,並透過優先順序重排等操作再提供給 LLM,LLM 就會根據檢索出來的知識和使用者的問題,做針對性的回答。

這個就好像給大模型一個企業私域知識的字典,大模型可以根據使用者的問題一邊查字典一邊根據字典當中的說明進行回答。

給出一個 RAG 的運作流程圖。

這種方式一方面給大模型提供了補充企業內部知識的一個途徑,另外透過這些外部知識的約束,也可以大大降低大模型的幻覺問題,特別適合去做一些企業相關的問答產品,從給內部人員使用 AI 的業務助手,到給一些 C 端使用者使用的 AI 客服或 AI 營銷產品等。

RAG 現在已經成為了 AI 企業應用當中最容易落地的一種方式,各種方案與產品層出不窮。但是要想把 RAG 真的做好也不是一件易事,比如如何去組織知識、如何提高檢索質量等,都會對 RAG 最後呈現的效果起到至關重要的作用。

所以從關於 RAG 的解釋上就可以推斷出,RAG 與 LLM 相結合其實就可以構建出一個私有的、本地知識庫,這也是現在構建知識庫的主要手段。

使用 Ollama 和 AnythongLLM 的組合就是很常見的一種構建知識庫的手段。

2. 什麼是 Ollama

Ollama 是一個免費的開源專案,是一個專為在本地機器上便捷部署和執行 LLM 而設計的開源工具,可在本地執行各種開源 LLM,它讓使用者無需深入瞭解複雜的底層技術,就能輕鬆地載入、執行和互動各種LLM模型。

Ollama 最初是被設計為本地(主要是開發)執行LLM的工具,當然現在也可以在伺服器(面向使用者併發提供服務)上使用,並且相容 OpenAI 介面,可以作為 OpenAI 的私有化部署方案。

Ollama 的特點:

  • 本地部署:不依賴雲端服務,使用者可以在自己的裝置上執行模型,保護資料隱私。
  • 多作業系統支援:無論是 Mac、Linux 還是 Window,都能很方便安裝使用。
  • 多模型支援:Ollama 支援多種流行的 LLM 模型,如 Llama、Falcon 等,包括最近 Meta 公司新開源的大模型 llama3.1 405B 也已經更新,使用者可以根據自己的需求選擇不同的模型,一鍵執行。
  • 易於使用:提供了直觀的命令列介面,操作簡單,上手容易。
  • 可擴充套件性:支援自定義配置,使用者可以根據自己的硬體環境和模型需求進行最佳化。
  • 開源:程式碼完全開放,使用者可以自由檢視、修改和分發(雖然沒有很多人會去修改)

3. 什麼是 AnythingLLM

從上面的描述與說明中可以知道,對於企業來說幻覺是阻礙大模型應用的嚴重缺陷性問題,以及除了幻覺,通用大模型無法滿足企業實際業務需求,涉及到知識侷限性、資訊保安等問題,企業不能將私域資料上傳到第三方平臺訓練。

而 AnythingLLM 就是為解決這個問題而生的框架。它能在本地輕鬆構建基於 LLM 的 AI 應用,整合 RAG、向量資料庫和強大的 Agent 功能,是高效、可定製、開源的企業級文件聊天機器人解決方案,能夠將任何文件、網頁連結、音影片檔案甚至只是一段文字,轉化為 LLM 可以理解的上下文資訊,並在聊天過程中作為參考。還可以自由選擇不同的 LLM 或向量資料庫,並進行多使用者管理和許可權設定。

主要功能:

  • 多使用者管理和許可權控制: 讓團隊協作更輕鬆,每個人都能安全地使用 LLM。
  • AI Agent 加持: 內建強大的 AI Agent,可以執行網頁瀏覽、程式碼執行等複雜任務,自動化程度更高。
  • 可嵌入聊天視窗: 輕鬆整合到您的網站或應用中,為使用者提供 AI 驅動的對話體驗。
  • 廣泛的檔案格式支援: 支援 PDF、TXT、DOCX 等多種文件型別,滿足不同場景需求。
  • 向量資料庫管理: 提供簡單易用的介面來管理向量資料庫中的文件,方便知識管理。
  • 靈活的對話模式: 支援聊天和查詢兩種對話模式,滿足不同場景需求。
  • 資訊來源追蹤: 聊天過程中會提供引用的文件內容,方便追溯資訊來源,增強結果可信度。
  • 多種部署方式: 支援 100% 雲部署,也支援本地部署,滿足不同使用者的需求。
  • 自定義 LLM 模型: 可以使用您自己的 LLM 模型,定製化程度更高,滿足個性化需求。
  • 高效處理大型文件: 相較於其他文件聊天機器人解決方案,AnythingLLM 在處理大型文件時效率更高,成本更低,最多可節省 90% 的成本。
  • 開發者友好: 提供全套開發者 API,方便自定義整合,擴充套件性更強。

4. 基於 AnythingLLM 及 Ollama 構建本地知識庫

介紹完 Ollama 與 AnythingLLM,接下來就可以利用這兩個東西來建立本地知識庫了。

4.1. 安裝 Ollama

  1. 下載Ollama:https://ollama.com/download

  1. 安裝,啟動命令列視窗輸入命令載入模型。命令可以透過點選官網 Models 後,搜尋並選擇所需要的模型後檢視。

  1. 選擇模型後,複製對應的命令。

Ollama 也支援載入執行 GGUF 格式的大模型,這個自行檢視官網。

  1. 啟動命令列視窗,複製命令並執行,若是第一次執行,Ollama 會自動下載模型並啟動模型。如本機上已安裝了的模型。

  1. 至此,Ollama安裝完畢。

4.2. 安裝 Docker

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的映象中,然後釋出到任何流行的作業系統的機器上,從而實現虛擬化。

在 Windows 下一般直接安裝 Docker Desktop,這需要 Windows 開啟 Hyper-V 虛擬化功能。

Docker Desktop 的下載地址是:https://www.docker.com/products/docker-desktop

下載後直接雙擊安裝即可,Docker的安裝過程非常簡單,沒有什麼引數需要設定,一路next即可,不多做贅述。

4.3. 安裝 AnythingLLM

AnythingLLM 有多種安裝方式,首先是可以在 Docker 上安裝。透過搜尋 AnythingLLM 映象並 pull 後 run 執行,但是需要使用一些科學的手段才能搜尋並使用安裝。

第二種方式是直接下載地址:https://useanything.com/download 進行安裝。

4.4. 配置 AnythingLLM,搭建本地知識庫

安裝完成之後,點選按鈕 Get started 進入設定嚮導介面。

選擇大模型,在這裡我們選擇剛剛安裝好的 Ollama,然後設定引數:

  • 指定 Ollama Base URLhttp://host.docker.internal:11434
  • 指定 Chat Model Selection 為 llama3.1:8b
  • 指定 Token context window 為 4096 (這裡的 token 數量視情況而定,一般來說越大會越準確但解析等待時間越長)

當然 AnythingLLM 也支援使用閉源模型的API。

  • Embedding Preference(嵌入模型)的選擇,選擇預設的 AnythingLLM Embedder 就好。

  • 向量資料庫 Vector Database Connection,選擇預設的 LanceDB

  • 確認相關資訊之後,制定工作空間名稱,下一步,就會得到如下介面

  • 這個時候就可以上傳文件,並將文件移入工作區,作為本地知識庫

  • 這個時候就可以進行問答測試了,如下圖。第一次未上傳本地檔案提問時,LLM 並沒有給出答案,在上傳了本地檔案作為知識庫後,再次提出相同問題,LLM 根據知識庫內容給出了相應的回答。

4.5. 知識庫管理

當然這些是最簡單的本地知識庫搭建,除此之外 AnythingLLM 還提供了靈活的配置供給管理,可以設定例如語料分割引數、修改 Chat mode、修改 Embedding chunk 的大小(用於設定向量模型處理資料的顆粒度)等等。

另外值得說明一下的是,一般來說,引數更大的模型處理能力以及回答的內容效果會更好,舉個例子,在之前用 Ollama 下載的 llama3.1:8b 模型與 llama3.1:70b 模型相比,肯定是 llama3.1:70b 的效果更好。

擴充套件:在大模型中,b 指的是 10 億的引數量,8b就是 80 億的引數,70b 就是 700 億的引數。

當前最新開源的 Meta 的 llama3.1:405b 就意味著有 4050 億的引數量,是當前最大最強的開源大模型(在基準測試中 llama3.1 在大多數方面都強過了 GPT4O)

當然引數越多所需要的算力就越大,需要的效能也就越高,在本地部署就需要根據自身的裝置條件進行適合的選擇。

參考資料:

  1. 一文讀懂:大模型RAG(檢索增強生成):https://zhuanlan.zhihu.com/p/675509396
  2. 基於 AnythingLLM 及 Ollama 構建本地知識庫:https://www.bilibili.com/read/cv34813632/
  3. 一文了解:打造垂域的大模型應用:https://www.zhihu.com/tardis/bd/art/640493296?source_id=1001
  4. qdrant對常用的向量資料庫的測試報告:https://qdrant.tech/benchmarks/
  5. Ollama 本地執行大模型(LLM)完全指南:https://mp.weixin.qq.com/s/rKfxEWSppYGtGT3teXujBw

相關文章