想結合強大的大語言模型做出客製化且有隱私性的 GPTs / RAG 嗎?這篇文章將向大家介紹如何利用 AnythingLLM 與 Ollama,輕鬆架設一個多用戶使用的客製化檢索增強生成(RAG)系統。
AnythingLLM 是什麼?
AnythingLLM 是一款強大的 full-stack AI 應用程式,它能將多種文件格式、資源或內容轉化為大型語言模型(LLM)可使用的查詢用文本。
這款工具不僅支持多用戶管理(對,等於直接有後台管理者),還提供多種 LLM 和向量資料庫的選擇,使其成為建構私有客製化 RAG 解決方案的好選擇,基本上用這套能夠把 RAG 的開發成本降得超低,而且採用 MIT License 還可以直接修改及商用。
Ollama 是什麼?
Ollama 是一個讓大型語言模型 LLM 可以快速變成地端服務的工具,而且實際使用的速度挺快的,另外之前有寫過安裝以及上傳客製化模型的文章了,有興趣可以自行參考。
為什麼選擇 AnythingLLM?
最主要是使用上非常簡易方便,也可以參照官方寫的優點如下
- 多用戶支持:無論是團隊合作還是個人使用,AnythingLLM 都能夠輕鬆管理多用戶的權限和操作。
- 靈活的 LLM 和向量資料庫選擇:用戶可以根據需求選擇合適的 LLM 和向量資料庫,滿足不同的應用場景。
- 高效的文件管理:支持多種文件類型,如 PDF、TXT、DOCX 等,並通過簡單的 UI 進行管理。(目前不支援DOC格式)
- 自定義聊天小工具:可將聊天功能嵌入網站,提升互動體驗。
- 兩種聊天模式:在保留上下文的會話模式(平常使用,沒資料就直接根據LLM的知識回應)和問答的查詢模式(較嚴格,查詢到資料才回答,更減低幻覺發生)之間靈活切換。
還可以網頁文字爬取跟YouTube字幕擷取等功能,讓只會最基本的RAG幾乎沒生存空間了XD
RAG 是什麼?
RAG (Retrieval-Augmented Generation) 可以想像成是一個小抄或字典,透過向量資料庫檢索出來的資料跟使用者的問題一併告訴語言模型,讓語言模型能夠減低幻覺,根據資料回答問題。
架設 AnythingLLM
其實非常簡易,甚至可以直接在官方下載安裝包,我這裡示範在 Ubuntu 下用 docker 來建置,有空再寫架設在 AWS 上的完整步驟。
架設流程
- 預設作法
docker pull mintplexlabs/anythingllm
就是這麼簡單~
接著本地端只要開啟網頁就可以開始使用了
但是如果要多人使用還是要記得掛載資料到本地端(不然一旦更新就可能沒資料囉)
2. 掛載檔案的作法
export STORAGE_LOCATION=$HOME/anythingllm && \
mkdir -p $STORAGE_LOCATION && \
touch "$STORAGE_LOCATION/.env" && \
docker run -d -p 3001:3001 \
--cap-add SYS_ADMIN \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm
這樣就能看到自己架的anythingllm資料存在 $HOME/anythingllm 囉
AnythingLLM 基本使用教學
其實使用上非常容易,這裡提供最基礎且常用的設定
初步設定
一開始在 http://localhost:3001 內可以直接點擊 Get started
語言模型設定
設定 LLM Preference,這裡提供多種語言模型來源,可以根據需求挑選語言模型的來源。如果要採用開源模型,建議可以採用Ollama抓下來的開源模型。
這裡選擇 Ollama 會自動幫你選擇URL,就會列出目前 Ollama 有拉下來的模型 (這裡用自己上傳的量化模型 cwchang/llama-3-taiwan-8b-instruct, Max tokens 可設為 8192),再點擊下一步
設定單人或多人使用
此步驟為了要多人使用,可以點擊 My team ,設置管理者帳號密碼(Admin account username/password),再點擊下一步
先用預設 Embedding 跟 Vector Database
下一步(可不用填寫),繼續填寫下一步
初始化第一個Workspace,繼續下一步
完成基礎設定
可點擊左側邊欄的workspace,跟剛剛設定好的語言模型進行對話
RAG 設定
這裡採用一則關於棒球的新聞當作範例,直接透過 AnythingLLM 進行爬取。
貼上連結並點擊 Fetch Website
建置向量資料庫
先點擊要上傳至向量資料庫的文件(網頁),點擊 Move to Workspace
點擊 Save and Embed ,可將資料嵌入向量資料庫內
向量資料庫更新成功就會看到剛剛 embed 的資料
測試 RAG 效果
先測試沒有嵌入新聞的時候,完全不知道貝茲指的是誰
有嵌入新聞後可以回答新聞相關內容,語言模型會得到參考的引用資料,就知道誰是貝茲了,還可以查看回答問題的引用來源
查看引用來源
就這麼簡單,最基本的 RAG 功能就完成了
多人使用
如果想要讓多人使用的話,可以開啟左下角的設定功能
進入設定後點擊用戶(Users)
點擊新增用戶(Add user)
可以先設定基本名稱跟密碼就能交給自己團隊內的使用者了,是不是超簡單!
其實還有很多功能可以進行設置的,像是各個 workspace 都能進行提示功能(prompt engineering),就讓大家自行玩看看
結論
RAG 真的目前不是什麼太難做到的事情了,AnythingLLM團隊已經建立了很完整的 RAG 流程,如果應用上不複雜,其實可以完全透過 AnythingLLM 進行 RAG 開發,而且還有 API 可以直接進行呼叫,需要更進階功能時,可以把 AnythingLLM 當成後臺,再後續自行開發即可。