寫在前面
延續前面「受限環境也能跑 LLM」的精神,這篇說明把重點放在 Windows(Docker Desktop + Ollama 已安裝) 下,如何快速把 RAGFlow 與 Dify 拉起來並串接 Ollama 做本地 RAG 與流程化對話。風格延續 Day 2 / Day 4:技術可跑、說明好懂,偶爾自嘲但務實。
優勢 | 說明 |
---|---|
資料完全在本地 | 文件、向量庫與模型都不出境,符合法規/稽核需求 |
Ollama 做 LLM 代理 | 可用本機安裝的模型(無需外網 API) |
RAGFlow 做檢索 + 引用 | 向量檢索 + 回覆帶來源 |
Dify 做流程化 | 可視化流程、條件判斷、整合 RAG 與 LLM |
http://localhost:11434
http://host.docker.internal:11434
docker ps
,查看 port 與狀態.env
對應埠下面步驟假設你已安裝 Docker Desktop、Git、Ollama,並已啟動 Docker。
# clone 並進入 docker 目錄
git clone https://github.com/infiniflow/ragflow.git
Set-Location .\ragflow\docker
# 啟動(背景執行)
docker compose -f docker-compose.yml up -d
# 檢查
docker ps
# 打開 UI
Start-Process "http://localhost:3000"
git clone https://github.com/langgenius/dify.git
Set-Location .\dify\docker
# 複製範例 env
Copy-Item .env.example .env
# 編輯 .env(用 VSCode 或 Notepad)
# Start-Process code .\ .env
# 啟動
docker compose up -d
# 打開 UI
Start-Process "http://localhost:5000"
Ollama 測試(在 Windows 主機上):
curl http://localhost:11434/api/tags
若能回應就表示 Ollama 運作中。
Dify 中新增模型 provider:
http://host.docker.internal:11434
llama3
/ mistral
)Dify 呼叫 RAGFlow:
在 Workflow 新增 HTTP Request 節點,POST 到:http://host.docker.internal:3000/api/ask
(視 RAGFlow API 規格微調 request body)
curl http://localhost:11434/api/tags
http://localhost:3000
http://localhost:5000
docker ps
(檢查 rdb、redis、vectordb、rfgui 等是否 up).env
改埠再 docker compose up -d
。把下面片段放在文章末段,說明 GPT 的實際幫助(延續你的自嘲風):
自動產生 .env 範本 / Provider 設定
.env.example
的內容貼給 GPT,請它根據你給的埠、主機名稱、憑證產出一份 .env
(注意:勿把真密碼貼給外網服務,僅作格式化範本)。把 PoC 變成安全示範腳本
自動生成 PowerShell 自動化腳本(下面示例即為一種)
把技術通報轉成主管版 / 稽核版報告
注意:執行前請自行確認路徑、是否已有 clone 或 .env 設定。此腳本只做「協助自動化」,不會改密碼或放敏感值。
# setup_local_rag_dify.ps1
param (
[string]$workDir = "$env:USERPROFILE\ai_local",
[switch]$skipRagFlow,
[switch]$skipDify
)
# 1. 建資料夾
New-Item -ItemType Directory -Path $workDir -Force | Out-Null
Set-Location $workDir
# 2. clone 如果不存在
if (-not (Test-Path ".\ragflow")) {
git clone https://github.com/infiniflow/ragflow.git
}
if (-not (Test-Path ".\dify")) {
git clone https://github.com/langgenius/dify.git
}
# 3. 啟動 ragflow (可選)
if (-not $skipRagFlow) {
Write-Host "Starting RAGFlow..."
Push-Location .\ragflow\docker
docker compose -f docker-compose.yml up -d
Pop-Location
}
# 4. 啟動 dify (可選)
if (-not $skipDify) {
Write-Host "Starting Dify..."
Push-Location .\dify\docker
if (-not (Test-Path ".\.env")) {
Copy-Item .env.example .env -ErrorAction SilentlyContinue
Write-Host "Copied .env.example -> .env (請自行編輯 .env 設定)"
}
docker compose up -d
Pop-Location
}
Write-Host "Done. Check services:"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Write-Host "RAGFlow UI: http://localhost:3000"
Write-Host "Dify UI: http://localhost:5000"
Write-Host "Ollama API: http://localhost:11434 (測試用: curl http://localhost:11434/api/tags)"
執行(PowerShell):
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_local_rag_dify.ps1
┌────────────────────────────┐
│ 使用者 │
└────────────┬───────────────┘
│ 問句輸入
▼
┌─────────────────────┐
│ Dify │ ←─ 可視化流程 + 條件控制
└───────┬──────┬──────┘
│ │
查 KB?否 是
│ ▼
▼ ┌─────────────┐
LLM ◄── │ RAGFlow │ ◄── 本地知識庫 + 搜尋 + 引用
(Ollama) └─────────────┘
│
▼
回答使用者
技術上的事,永遠比想像中更複雜一點;幸好有 Ollama 跟 Docker 這些工具,讓我們可以在本地嘗試整套 RAG + 流程化對話。
如果你像我一樣,喜歡把東西「弄成可重現的腳本」,那就把上面的 PowerShell 存成檔用;如果你懶得寫.env
,就把範例貼給 GPT,讓它先幫你生成一版範本(但絕對不要把真密碼貼到公開的雲端)。