🌐 超越邊界:Ollama (Windows) 與 Dify (WSL2) 的完美結合
0. 核心架構圖:跨越虛擬機的隱形網路線
在開始之前,我們先建立一個清晰的空間概念。你的電腦現在被分為兩個世界:
graph TD
subgraph Windows_Host ["Windows 宿主機 (你的電腦)"]
Ollama[("🐳 Ollama<br>(負責模型推理LLM/Embedding)") ]
GPU[("🚀 NVIDIA/AMD GPU<br>(硬體加速)") ]
Ollama --> GPU
end
subgraph WSL2_Linux ["WSL2 虛擬 Linux (Ubuntu)"]
Dify[("🧩 Dify 全棧平台<br>(負責應用邏輯/工作流)") ]
Docker[("🐋 Docker Containers<br>(Postgres, Redis, Sandbox)") ]
Dify --> Docker
end
%% 關鍵連線
Dify -. "透過 http://host.docker.internal:11434 連線" .-> Ollama
Ollama -. "接收來自 WSL2 的請求" .-> Dify
style Windows_Host fill:#e1f5fe,stroke:#01579b,stroke-width:2px
style WSL2_Linux fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
style Ollama fill:#fff,stroke:#000,stroke-width:2px
style Dify fill:#fff,stroke:#000,stroke-width:2px
Windows 的角色:扮演「強大的肌肉」。Ollama 在這裡直接存取 GPU 驅動,發揮最強的模型推理效能。
WSL2 的角色:扮演「智慧的大腦」。Dify 在這裡編排工作流、管理資料庫和知識庫。
那條隱形網路線:就是 Docker Desktop 提供的特殊域名
host.docker.internal,它讓住在 Docker 容器裡的 Dify,能一秒穿透虛擬機,找到 Windows 上的 Ollama。
1. Windows 端配置:讓 Ollama「開門接客」
預設情況下,Windows 的 Ollama 很害羞,只聽 Windows 自己的話。我們要讓它接受來自 WSL2 的連線。
步驟 A:設定環境變數
在 Windows 搜尋框輸入 「環境變數」,選擇「編輯系統環境變數」。
點擊「環境變數」按鈕。
在「使用者變數」下點擊「新增」:
變數名稱:
OLLAMA_HOST變數值:
0.0.0.0(代表監聽所有網路介面)
(選填):如果你有多張顯卡,可以新增
OLLAMA_LLM_LIBRARY並設定為nvidia。
步驟 B:重啟 Ollama
設定完環境變數後,必須完全退出 Ollama(右下角系統列圖示右鍵 Exit),然後重新啟動 Ollama。
步驟 C:驗證「跨界通訊」 (在 WSL2 中執行)
打開你的 WSL2 終端機,執行這行指令。如果你能看到一串 JSON 格式的模型清單,代表隧道已經打通了!
# 在 WSL2 終端機執行
curl http://host.docker.internal:11434/api/tags
2. Dify 端配置:在 UI 中點亮本地模型
現在我們回到 Dify 的網頁介面(localhost:3000),把剛才打通的隧道正式掛接上去。
步驟 A:進入模型供應商設定
點擊右上角頭像 ➔ 「設定」(Settings)。
點擊左側選單的 「模型供應商」(Model Provider)。
在清單中找到 Ollama 卡片。
步驟 B:填寫連線資訊
點擊 Ollama 卡片的「設置」或「添加模型」,在彈出的視窗中填寫:
模型名稱:必須與你在 Windows 端
ollama list看到的名稱完全一致(例如:llama3:latest)。基礎 URL (Base URL):這是最關鍵的一步!請填入:
模型類型:根據模型功能選擇 LLM (對話) 或 Text Embedding (向量化)。
模式:選擇
Chat或Completion。
步驟 C:保存並檢驗
點擊「保存」。如果連線成功,Ollama 卡片上方會出現一個 綠色的勾勾,並顯示 「已授權」(Authorized)。
3. 實戰測試:讓 Llama 3 說第一句話
最後,我們去「工作室」見證奇蹟的時刻。
步驟 A:指派模型
進入 「工作室」,建立一個新的「聊天助手」應用。
在編輯介面右上方,點開模型下拉選單。
選取 Ollama / llama3:latest。
步驟 B:開始對話
在對話框中輸入:你好,請給我一個讚!
如果 Llama 3 成功用本地算力回覆你,這套環境就完全大功告成了!
🕵️♂️ 進階:我們之前用 SQL 注入做了什麼?
如果你看過之前的討論,可能會記得我們用 SQL 直接操作資料庫。這是因為 Dify 的內部邏輯其實是由幾張表共同維護模型的配置。
當你在 UI 點擊「保存」時,Dify 其實在後台做了這件事(這也是我們 SQL 注入的內容):
erDiagram
TENANTS ||--o{ PROVIDER_MODELS : owns
PROVIDER_MODELS }o--|| PROVIDER_MODEL_CREDENTIALS : references
TENANTS {
uuid id
string name
}
PROVIDER_MODEL_CREDENTIALS {
uuid id
uuid tenant_id
string provider_name "ollama"
string credential_name "Ollama-Config"
json encrypted_config "'{'base_url': 'http://host.docker.internal:11434'}'"
}
PROVIDER_MODELS {
uuid id
uuid tenant_id
uuid credential_id
string model_name "llama3:latest"
string model_type "text-generation"
boolean is_valid "true"
}
SQL 注入的意義:我們繞過了 UI,直接將 Ollama 的
llama3:latest(放在PROVIDER_MODELS) 和它的 URL 憑證 (放在PROVIDER_MODEL_CREDENTIALS) 強行關聯起來,並塞進了你的租戶 ID (TENANTS) 下。這是一種在環境不穩定時採用的「外科手術式」修復方法。
恭喜你,你現在擁有了一套完全屬於自己的、隱私安全的本地 AI 開發環境!
留言
張貼留言