iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Security

從1到2的召喚羊駝補破網之旅系列 第 6

Day 6 :鐵人賽第一個周末來打副本

  • 分享至 

  • xImage
  •  

[鐵人賽] Day 6:🧠 本地端 AI 解決方案組合 — Ollama + RAGFlow + Dify(Windows 版)

寫在前面
延續前面「受限環境也能跑 LLM」的精神,這篇說明把重點放在 Windows(Docker Desktop + Ollama 已安裝) 下,如何快速把 RAGFlow 與 Dify 拉起來並串接 Ollama 做本地 RAG 與流程化對話。風格延續 Day 2 / Day 4:技術可跑、說明好懂,偶爾自嘲但務實。


✅ 為什麼要這組合(快速回顧)

優勢 說明
資料完全在本地 文件、向量庫與模型都不出境,符合法規/稽核需求
Ollama 做 LLM 代理 可用本機安裝的模型(無需外網 API)
RAGFlow 做檢索 + 引用 向量檢索 + 回覆帶來源
Dify 做流程化 可視化流程、條件判斷、整合 RAG 與 LLM

Windows/Tips 概覽(重點摘要)

  • Docker Desktop(建議啟用 WSL2)
  • Ollama 在 Windows 的預設 API:http://localhost:11434
  • Windows Docker 容器要呼叫本機服務時,用 http://host.docker.internal:11434
  • 檢查容器:docker ps,查看 port 與狀態
  • 若有 Port 衝突(3000 / 5000 等),修改 .env 對應埠

安裝與啟動(步驟化、Windows PowerShell)

下面步驟假設你已安裝 Docker Desktop、Git、Ollama,並已啟動 Docker。

1) 取得 RAGFlow(PowerShell)

# 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"

2) 取得 Dify(PowerShell)

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"

在 Dify / RAGFlow 中串接 Ollama(關鍵點)

  1. Ollama 測試(在 Windows 主機上):

    curl http://localhost:11434/api/tags
    

    若能回應就表示 Ollama 運作中。

  2. Dify 中新增模型 provider

    • Provider 類型:Custom API
    • API Endpoint(Docker on Windows → container 連主機):http://host.docker.internal:11434
    • Model name → 填你在 Ollama 裡安裝的模型 tag(例如 llama3 / mistral
  3. Dify 呼叫 RAGFlow
    在 Workflow 新增 HTTP Request 節點,POST 到:
    http://host.docker.internal:3000/api/ask(視 RAGFlow API 規格微調 request body)


測試清單(快速驗收)

  • Ollama 回應:curl http://localhost:11434/api/tags
  • RAGFlow UI:http://localhost:3000
  • Dify UI:http://localhost:5000
  • Docker 容器:docker ps(檢查 rdb、redis、vectordb、rfgui 等是否 up)

Windows 常見坑與解法(實務提醒)

  • host.docker.internal:在 Windows Docker 上必須用這個才會從 container 連回 host 的 Ollama。
  • WSL2:若 Docker 用 WSL2,有時 network 會比較穩定。
  • Memory / CPU:在 Docker Desktop 設定分配足夠記憶體(尤其模型代理與向量 DB 會吃 RAM)。
  • Port 衝突:若 3000 / 5000 衝突,在每個服務 .env 改埠再 docker compose up -d
  • 模型大小:大型模型在本機可能需要更多資源—評估是否使用小一點的本地模型做 RAG prompt refinement。

可用 GPT(LLM)幫你省力的地方(實例)

把下面片段放在文章末段,說明 GPT 的實際幫助(延續你的自嘲風):

  1. 自動產生 .env 範本 / Provider 設定

    • 你可以把 .env.example 的內容貼給 GPT,請它根據你給的埠、主機名稱、憑證產出一份 .env(注意:勿把真密碼貼給外網服務,僅作格式化範本)。
  2. 把 PoC 變成安全示範腳本

    • 將危險 PoC(上傳 exploit)交給 GPT,要求它「輸出只做 HTTP status 驗證、不儲存文件的安全版」,方便交給 QA 或稽核做驗證。
  3. 自動生成 PowerShell 自動化腳本(下面示例即為一種)

    • GPT 幫你把繁瑣的 clone / copy / docker compose 指令包成一個腳本,省去手動逐步輸入的麻煩。
  4. 把技術通報轉成主管版 / 稽核版報告

    • 把 RAGFlow 回傳的來源/證據丟給 GPT,請它生成「一頁式補救建議」,方便給管理者或窗口。

PowerShell 自動化範例(一鍵拉起 RAGFlow + Dify)

注意:執行前請自行確認路徑、是否已有 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

✅ 完整架構總結圖(Windows 本地端)

┌────────────────────────────┐
│         使用者             │
└────────────┬───────────────┘
             │ 問句輸入
             ▼
   ┌─────────────────────┐
   │       Dify          │ ←─ 可視化流程 + 條件控制
   └───────┬──────┬──────┘
           │      │
     查 KB?否   是
       │          ▼
       ▼     ┌─────────────┐
     LLM ◄── │   RAGFlow   │ ◄── 本地知識庫 + 搜尋 + 引用
    (Ollama) └─────────────┘
       │
       ▼
     回答使用者

結語

技術上的事,永遠比想像中更複雜一點;幸好有 Ollama 跟 Docker 這些工具,讓我們可以在本地嘗試整套 RAG + 流程化對話。
如果你像我一樣,喜歡把東西「弄成可重現的腳本」,那就把上面的 PowerShell 存成檔用;如果你懶得寫 .env,就把範例貼給 GPT,讓它先幫你生成一版範本(但絕對不要把真密碼貼到公開的雲端)。



上一篇
Day 5 :被去年的夥伴反殺
下一篇
Day 7 :副本「不違反不能兼職的事」
系列文
從1到2的召喚羊駝補破網之旅7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言