快轉到主要內容

Ollama + Open WebUI設定RAG,建立知識庫強化語言模型能力,讀取PDF文件生成回應

分類   開源AI應用 大型語言模型
標籤   Retrieval Augmented Generation Ollama Large Language Model
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

檢索增強生成 (RAG) 是能夠擴充語言模型知識量的技術,在Open WebUI裡面這個功能叫做知識庫(Knowledge Base)

如果你已經玩過Open WebUI,應該會發現網頁界面是能夠上傳單個檔案叫語言模型分析的。

除了在對話的時候即時上傳檔案請語言模型分析之外,你也可以預先準備一些資料,上傳到Open WebUI的知識庫,並新增以該知識庫為主的語言模型,擴充它的腦容量。這樣語言模型在與你問答的時候,便會自動參考知識庫的檔案內容,有助於產生更精確的答案。

例如問:「游良福是誰?」預設情況下LLaMA 3模型沒有收錄他的資料,就會無法回答,或者產生幻覺亂生成答案。

但在Ivon準備幾份有關他事蹟的檔案給他掃描後,語言模型便能依照該檔案內容回答,還會指出他參考了哪些文件。

RAG跟上網搜尋有什麼差呢?雖然Open WebUI是能讓語言模型整理搜尋結果,但是參差不齊,撈到的資料可能會是道聽塗說。而你自己準備的資料,就是已經篩選過,精度較高又品質好的資訊。

1. 準備RAG資料的前提
#

Open WebUI接受許多檔案格式,舉凡txt、markdown、pdf、parquet都可以,為了方便處理我們以txt為主。

準備檔案前要注意文字長度。上下文(context length)越長,佔用資源越大。Ollama預設的上下文長度是2048個token,跑LLaMA 3 8B的模型運算的時候大約會佔4GB VRAM和8GB RAM。所以這限制了輸入檔案的長度,所有檔案總計不能超過1024個中文字元,否則語言模型會無法吸收。即使你用支援128K token的LLaMA 3模型,也會被Ollama的上下文限制住。

除非你在Open WebUI的網頁界面,強制指示Ollama使用超過預設2048個token,才能夠搜尋更長的文本,相應的VRAM與RAM佔用會上升,請注意你的系統是否能負荷。

2. 設定Open WebUI的RAG
#

  1. 以Docker架設 Open WebUI

  2. 以Docker架設內容擷取引擎 Apache Tika NER

  3. Open WebUI內建的嵌入模型不好用,點選Open WebUI左下角,切換到管理員設定 → Ollama模型,下載嵌入模型mxbai-embed-large

  4. 切換到文件頁面,設定嵌入模型引擎為Ollama,將嵌入模型改為mxbai-embed-large。內容擷取引擎設定為連線到Apache Tika伺服器。

  5. 再來注意查詢參數Top K的數值,代表一次最多能搜尋幾個檔案,預設是3個。若你需要強制語言模型查看所有檔案請設定跟你的檔案數目相同,否則搜尋時可能會跳過一些檔案導致不準確。

3. 新增知識庫與自訂語言模型
#

  1. 到Open WebUI主畫面,左上角工作區 → 知識,點選新增知識庫

  2. 在這裡上傳你要的txt檔案。上傳的檔案會經過處理後,儲存到向量資料庫。這裡的知識庫是可以隨時變動的,日後上傳到知識庫的新檔案都能讓語言模型取用。

  3. 接著切換到模型頁面,點選新增自訂語言模型,以現有的模型為基礎(我使用LLaMA 3)

  4. 在下面選取使用剛剛建立的知識庫。

  5. 嘗試與自訂語言模型問答,它就會優先搜尋知識庫的內容來回答。

  6. 如果你希望搜尋更長上下文,點選側邊的Ollama設定,調高上下文長度。

參考資料
#

相關文章

Linux用docker-compose部署Open WebUI + Ollama語言模型網頁界面
分類   開源AI應用 大型語言模型
標籤   Ollama Large Language Model Retrieval Augmented Generation Nvidia
Ollama安裝教學,快捷部署AI大型語言模型到你的Linux電腦,離線執行
分類   開源AI應用 大型語言模型
標籤   Ollama Large Language Model Retrieval Augmented Generation
Android手機用Termux Ollama跑任意大型語言模型
分類   開源AI應用 大型語言模型
標籤   Ollama Large Language Model Android Termux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。