使用 Ollama 本地離線體驗 SimpleRAG(手把手教程)
Ollama 介紹
Ollama 是一個開源項目,專注於開發和部署大語言模型,特別是像 LLaMA 這樣的模型,用於生成高質量的文本和進行復雜的自然語言處理任務。Ollama 的目標是讓大語言模型的運行和使用變得更加容易和普及,而無需複雜的基礎設施或深度的機器學習知識。
GitHub 地址:https://github.com/ollama/ollama
RAG 是什麼?
檢索生成增強(Retrieval-Augmented Generation,RAG)是一種結合了檢索(Retrieval)和生成(Generation)兩種技術的自然語言處理方法,主要用於改進文本生成任務的性能,如問答系統、對話系統、文本摘要和文檔生成等。RAG 模型通過在生成模型的基礎上,引入一個檢索模塊,來增強生成模型的準確性和豐富性。
在傳統的生成模型中,模型完全依賴於訓練數據中學習到的模式和統計信息來生成文本,這可能導致生成的內容缺乏新穎性或準確性。而檢索模塊則可以從外部知識庫或文檔中檢索相關的信息,將這些信息作爲額外的輸入,提供給生成模型,從而幫助生成更準確、更豐富和更具體的文本。
具體來說,RAG 模型的工作流程如下:
-
檢索階段:模型首先根據輸入的查詢或上下文,從外部知識庫中檢索出與之最相關的文檔或片段。
-
融合階段:檢索到的信息與輸入的查詢或上下文進行融合,形成增強的輸入。
-
生成階段:增強後的輸入被送入生成模型,生成模型根據這些信息生成最終的文本輸出。
通過這種方式,RAG 模型能夠在生成過程中利用到外部知識,提高了生成文本的準確性和豐富性,同時也增強了模型的可解釋性,因爲生成的文本可以追溯到具體的來源。RAG 模型在處理需要大量領域知識或具體事實信息的任務時,表現出了顯著的優勢。
SimpleRAG 介紹
A simple RAG demo based on WPF and Semantic Kernel.
SimpleRAG 是基於 WPF 與 Semantic Kernel 實現的一個簡單的 RAG 應用,可用於學習與理解如何使用 Semantic Kernel 構建一個簡單的 RAG 應用。
GitHub 地址:https://github.com/Ming-jiayou/SimpleRAG
主要功能
AI 聊天
支持所有兼容 OpenAI 格式的大語言模型:
文本嵌入
支持所有兼容 OpenAI 格式的嵌入模型:
簡單的 RAG 回答
簡單的 RAG 回答效果:
對比不使用 RAG 的回答:
使用 Ollama 本地離線體驗 SimpleRAG
來到 SimpleRAG 的 GitHub 參考,注意到這裏有個 Releases:
點擊 SimpleRAG-v0.0.1,有兩個壓縮包,一個依賴 net8.0-windows 框架,一個獨立:
依賴框架的包會小一些,獨立的包會大一些,如果你的電腦已經裝了 net8.0-windows 框架可以選擇依賴框架的包,考慮到可能大部分人不一定裝了 net8.0-windows 框架,我以獨立的包做演示,點擊壓縮包,就在下載了:
解壓該壓縮包:
打開 appsettings.json 文件:
appsettings.json 文件如下所示:
在你的電腦上啓動 Ollama,在命令行中輸入 ollama list 查看已經下載的模型:
由於我電腦的配置不是很好,對話模型以 gemma2:2b 爲例,嵌入模型以 bge-m3:latest 爲例,appsettings.json 文件這樣寫:
Endpoint 輸入 Ollama 的地址,默認是 http://localhost:11434,Ollama 不需要 Api Key 隨便寫。
現在點擊 SimpleRAG.exe 即可運行程序:
程序運行之後,如下所示:
先通過 AI 聊天測試配置是否成功:
配置已經成功。
現在來測試一下嵌入。
先拿一個簡單的文本進行測試:
小k最喜歡的編程語言是C#。
嵌入成功:
這個 Demo 程序爲了方便存儲文本向量使用的是 Sqlite 數據庫,在這裏可以看到:
如果你有數據庫管理軟件的話,打開該數據庫,會發現文本已經以向量的形式存入 Sqlite 數據庫中:
現在開始測試 RAG 回答效果:
對比不使用 RAG 的回答效果:
可以發現大語言模型根本不知道我們想問的私有數據的事情。
現在我們可以來測試一下更復雜一點的文本了,一樣的嵌入文本之後,測試 RAG 效果:
RAG 回答失敗了,這是因爲我使用的模型參數太少了,還不夠強大。如果你的電腦配置好,可以改用更智能的模型,如果你的電腦配置不好,可以選擇混合使用的方式,即使用在線的對話模型 Api,使用本地 Ollama 中的嵌入模型。
使用在線對話 Api + 本地 Ollama 嵌入模型體驗 SimpleRAG
appsettings.json 可以這樣寫:
測試 RAG 效果:
RAG 還是失敗了。
模型換成 meta-llama/Meta-Llama-3.1-8B-Instruct:
模型換成 google/gemma-2-9b-it:
模型換成 Qwen/Qwen2-72B-Instruct:
通過源碼找原因:
將相關度調成 0.3 就可以找到相關文本了,但是感覺這樣也會出問題,文檔一多很容易找到不相關的文檔,後面 appsettings.json 中會增加相關度的配置:
現在再測試一下 Qwen/Qwen2-7B-Instruct:
也可以了。
對比不使用 RAG 的回答效果:
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/7L3qy3W63edEbt77wsdRQg