昨天我們安裝了 uv,建立好專案與虛擬環境。今天要讓這個 RAG 系列完全在自己的電腦上運作,用 Ollama 在本機執行 Embedding 與對話模型,不需要 API 金鑰,文件資料也不會離開你的電腦。
Ollama 是在本機執行大型語言模型的工具,會在背景提供一個本地服務,預設位址是 http://localhost:11434,後面的 LangChain 與 RAGAS 都會連到這裡。
curl -fsSL https://ollama.com/install.sh | sh
安裝完成後確認版本:
ollama --version
本系列需要兩種模型,各司其職:
| 角色 | 模型 | 用途 | 大小(約) |
|---|---|---|---|
| Embedding | bge-m3 |
把文字轉成向量,供 DAY25 建立向量庫 | 1.2 GB |
| 對話 | qwen3:8b |
根據檢索內容生成答案(DAY26) | 5 GB |
ollama pull bge-m3
ollama pull qwen3:8b
為什麼這樣選? bge-m3 是多語言的 Embedding 模型,對中文支援良好;qwen3 系列對繁體中文的表現也不錯。如果你的電腦記憶體或顯卡較吃緊,可以把對話模型換成較小的 qwen3:4b,後面章節只需要改模型名稱,其他步驟不變。
下載完成後確認:
ollama list
清單中出現這兩個模型就代表成功。想快速測試對話模型可以執行 ollama run qwen3:8b,輸入問題確認有回應,結束時輸入 /bye。
確認你在昨天建立的 rag-tutorial 資料夾內,執行:
uv add langchain langchain-core "langchain-community<0.4.2" langchain-ollama langchain-chroma langchain-text-splitters ragas openai pillow
uv add 會同時完成三件事:安裝套件、寫進 pyproject.toml、更新 uv.lock。各套件的分工如下:
| 套件 | 用途 | 對應的天數 |
|---|---|---|
langchain / langchain-core |
RAG 流程的基礎元件與串接 | DAY26 |
langchain-community |
文件載入器 | DAY24 |
langchain-text-splitters |
文本切割 | DAY24 |
langchain-ollama |
連接 Ollama 的 Embedding 與對話模型 | DAY25–26 |
langchain-chroma |
Chroma 向量資料庫 | DAY25 |
ragas |
RAG 評估 | DAY27–29 |
openai |
RAGAS 以 OpenAI 相容介面連到 Ollama 時使用 | DAY27 |
最後一列需要說明:RAGAS 的評估需要一個「評審模型」,Ollama 提供 OpenAI 相容的 API,所以我們會透過 openai 套件連到本機的 Ollama,而不是真的連到 OpenAI。DAY27 會詳細示範。
先在 .gitignore 加入 DAY25 會產生的向量資料庫資料夾,避免誤上傳:
chroma_db/
接著建立 data/ 資料夾,放入知識庫文件。建議這樣挑選:
整理後的專案結構如下:
rag-tutorial/
├── .venv/
├── src/
├── .gitignore
├── .python-version
├── pyproject.toml
├── README.md
├── uv.lock
└── data/ # 知識庫文件
後面幾天會再加入 build_rag.py(建置)與 evaluate_rag.py(評估),兩者分開管理,評估時就不必每次重建向量庫。
用 uv run 檢查每個套件都能匯入:
uv run python -c "import langchain_core, langchain_community, langchain_ollama, langchain_chroma, langchain_text_splitters, ragas, openai; print('環境 OK')"
看到「環境 OK」代表 Python 套件安裝成功。若出現 ModuleNotFoundError,通常是套件名稱打錯,或不是在專案資料夾內執行。
另外要確認 Ollama 服務正在運作,可以在瀏覽器開啟 http://localhost:11434,看到 Ollama is running 的訊息就沒問題。
今天完成了 Ollama 安裝與模型下載、Python 套件安裝、範例資料準備,並驗證了整個環境。從今天起,整個 RAG 系列都在本機執行,不需要金鑰,也沒有 API 費用。
明天開始寫第一段 RAG 程式:文件載入與切割。我們會把 data/ 裡的文件讀進來,切成 chunks,並觀察 chunk_size 與 chunk_overlap 如何影響切割結果。