Joseph Chen
部署了 Ollama 之後,我發現直接讓使用者跟 LLM 對話其實很危險——你無法控制輸入,也無法保證輸出格式。 Dify 就是在這中間加了一層:讓 AI 的行為變得可以設計、可以監控、可以迭代。
Dify 是什麼?
Dify 是一個開源的 LLM Application Platform,讓你可以用視覺化介面設計 AI 應用, 而不需要從零開始寫 Prompt Engineering 框架、串接 RAG 管道、管理對話記憶體。 它是 Ollama 的最佳搭檔——一個負責跑模型,一個負責控制模型的行為。
LLM Orchestration
把提示詞、工具、資料庫包成一個可視化工作流,讓 AI 的行為可以設計、版本控制、A/B 測試。
No-code 設計
拖拉節點連線,非工程師也能建立 AI 應用。提示詞修改不需要重新部署程式碼。
支援多個 LLM
OpenAI / Ollama / Claude / Gemini 統一介面管理,切換模型只需改一個設定,程式碼不變。
核心架構概念
Dify 的工作流是由「節點(Node)」組成的有向圖。資料從 Start 節點流入, 經過各類處理節點,最終由 Answer 節點輸出結果。每個節點的輸出可以作為下一個節點的輸入。
工作流示意圖
Dify 提供以下幾類核心節點:
Knowledge Base(知識庫 / RAG)
RAG(Retrieval-Augmented Generation) 是現代企業 AI 應用的核心技術。 原理是:不改動 LLM 本身,而是在每次推論前先去「查資料」,把查到的相關段落塞進 Prompt, 讓模型帶著「參考資料」回答問題。
RAG 完整流程
Dify 支援的文件格式
- •Word(.docx)
- •TXT / Markdown
- •HTML(網頁直接匯入)
- •Web Scraping(爬蟲抓取)
為什麼需要 RAG?
- •LLM 有訓練截止日期,無法知道最新資訊
- •企業私有資料不在公開訓練資料裡
- •Hallucination 減少:有原文依據,比亂猜準確
- •可追溯來源,提升回答可信度
實戰:三種常用應用類型
Chatbot(對話機器人)
有記憶- →支援多輪對話,Dify 自動管理對話歷史(Memory)
- →System Prompt 控制角色定位與行為邊界
- →適合:客服機器人、知識問答助手、內部 FAQ Bot
Workflow(工作流)
一次性任務- →輸入進去,按照設計的節點流程跑,輸出結果
- →確定性強、可重現,輸出格式固定
- →適合:文件摘要、多語翻譯、格式轉換、資料抽取
Agent(自主代理)
自主決策- →能使用工具(Web 搜尋、計算機、自訂 API)
- →LLM 自主決定要呼叫哪個工具、呼叫幾次
- →適合:複雜研究任務、多步驟自動化、需要即時資料的場景
離線環境部署 Dify
Dify 官方提供 Docker Compose 部署方式,在離線環境下只需提前把 image 打包好搬進去即可。 以下是 docker-compose.yml 的核心片段:
離線部署注意事項
- 1提前在有網路的機器用 docker pull 拉取所有 image,再用 docker save 打包成 .tar
- 2離線環境用 docker load 載入 .tar 後再執行 docker compose up
- 3在 Dify 的 Settings → Model Providers 頁面,把 LLM 指向 Ollama 內網 IP(例如 http://192.168.1.100:11434)
- 4向量資料庫(Weaviate / Qdrant)的 compose 設定需正確,否則 Knowledge Base 功能無法使用
Prompt Engineering 關鍵技巧
在 Dify 裡,System Prompt 是控制 AI 行為的核心。一個結構良好的 System Prompt 能讓模型的回應更穩定、 更符合預期。以下是我在實務中常用的模板結構:
角色定義
告訴模型它是誰、能做什麼、不能做什麼
行為規範
設定邊界:不回答範圍外的問題,不猜測,引用來源
輸出格式
指定回答結構(段落 / 清單 / JSON),確保輸出可被解析
注意 {{context}} 和 {{user_name}} 這類變數由 Dify 在執行時動態注入,不需要手動填。Knowledge Base 的搜尋結果也會自動綁定到 {{context}}。
面試常考題
什麼是 RAG?為什麼 LLM 需要它?
RAG(Retrieval-Augmented Generation)是在 LLM 推論前先從外部知識庫搜尋相關文本,把它塞進 Prompt 一起送給模型。這解決了兩個核心問題:① LLM 訓練截止日期後的新知識無法回答;② 企業私有資料(合約、SOP、內部文件)不可能出現在公開訓練資料裡。有了 RAG,LLM 就能「讀」你的私有知識庫再回答。
Dify 的 Workflow 和 Agent 模式有何不同?
Workflow 是「確定性流程」——你事先設計好每個步驟,輸入進去就照著跑,輸出可預測、可重現,適合文件摘要、格式轉換等一次性任務。Agent 是「自主決策」——你給它一個目標和一組工具(搜尋、計算、API 呼叫),它自己決定要用哪個工具、用幾次、按什麼順序,適合複雜、多步驟的開放性問題。簡單說:Workflow = 流水線;Agent = 自動駕駛。
如何評估 RAG 系統的品質?
主要看兩個指標:① 召回率(Recall)——相關的段落有沒有被撈出來,如果召回率低,LLM 拿不到足夠資訊就會亂答。② 精確率(Precision)——撈出來的段落有多少是真的相關,如果 Precision 低會塞入太多雜訊。實務上還會加上 Answer Faithfulness(最終回答和撈出的資料是否一致,偵測幻覺)和 Answer Relevance(回答和問題的相關性)。
在離線 / 隔離環境部署 Dify + Ollama 需要準備什麼?
① 提前在有網路的機器用 docker pull 把所有需要的 image 拉下來(dify-api, dify-web, postgres, redis, weaviate/qdrant);② 用 docker save 打包成 .tar,搬到離線環境後 docker load;③ Ollama 安裝檔和模型檔(~/.ollama/models/)同樣要預先打包搬入;④ 在 Dify 的設定頁面把 LLM Provider 指向 Ollama 的內網 IP + Port;⑤ 確認向量資料庫(Weaviate / Qdrant)的 compose 設定正確,知識庫功能才能用。