AI 離線部署
EP.03

Dify 工作流程設計
在本地 LLM 前加 Orchestration 層

No-code AI Pipeline、Knowledge Base、Agent 串接
打造可控的企業級 AI 應用

Joseph Chen

2026
14 min read
實戰筆記

部署了 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 節點輸出結果。每個節點的輸出可以作為下一個節點的輸入。

工作流示意圖

用戶輸入
前處理節點
LLM 節點
後處理 / 條件節點
輸出

Dify 提供以下幾類核心節點:

Start工作流的起點,定義輸入變數與使用者傳入的資料格式。
LLM 節點呼叫語言模型(Ollama / OpenAI / Claude),傳入 Prompt 並取得回應。
Knowledge Base(RAG)向量資料庫相似度搜尋,把相關段落注入 LLM 上下文。
IF / ELSE條件分支,根據前一節點輸出決定流程走向。
Code(Python / JS)執行自訂程式邏輯,做資料清洗、格式轉換、計算等。
Answer工作流終點,把結果回應給使用者或呼叫端 API。

Knowledge Base(知識庫 / RAG)

RAG(Retrieval-Augmented Generation) 是現代企業 AI 應用的核心技術。 原理是:不改動 LLM 本身,而是在每次推論前先去「查資料」,把查到的相關段落塞進 Prompt, 讓模型帶著「參考資料」回答問題。

RAG 完整流程

建庫文件 → 分塊(Chunking)→ 向量化(Embedding)→ 存入向量資料庫
查詢使用者問題 → 向量化 → 相似度搜尋(Cosine Similarity)→ 取前 K 個相關段落
生成相關段落 + 使用者問題 → 組合成 Prompt → 送給 LLM → 回答

Dify 支援的文件格式

  • PDF
  • 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 的核心片段:

docker-compose.yml(重點片段)
version: '3'
services:
  dify-api:
    image: langgenius/dify-api:latest
    environment:
      - SECRET_KEY=your-secret-key
      - DB_USERNAME=postgres
      - DB_PASSWORD=difyai123456
      - DB_HOST=db
      - REDIS_HOST=redis
      - VECTOR_STORE=weaviate
    depends_on:
      - db
      - redis

  dify-web:
    image: langgenius/dify-web:latest
    ports:
      - "3000:3000"
    environment:
      - CONSOLE_API_URL=http://localhost:5001

  db:
    image: postgres:15
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=difyai123456
      - POSTGRES_DB=dify

  redis:
    image: redis:alpine
    command: redis-server --requirepass difyai123456

離線部署注意事項

  • 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),確保輸出可被解析

system-prompt-template.txt
# 角色定義
你是一名工廠設備維護助理,專門協助工程師查詢設備 SOP 與故障排查。

# 行為規範
- 只回答與設備維護、操作規範相關的問題
- 若知識庫沒有相關資料,明確告知使用者「資料庫無此資訊」,不要猜測
- 回答使用繁體中文,技術術語保留英文原文

# 輸出格式
1. 直接回答問題(23 句)
2. 若有 SOP 步驟,用編號清單呈現
3. 附上知識庫來源文件名稱

# 可用變數
- {{user_name}}:呼叫者姓名
- {{equipment_id}}:設備編號
- {{context}}:知識庫檢索結果(自動注入)

注意 {{context}} {{user_name}} 這類變數由 Dify 在執行時動態注入,不需要手動填。Knowledge Base 的搜尋結果也會自動綁定到 {{context}}

面試常考題

Q

什麼是 RAG?為什麼 LLM 需要它?

RAG(Retrieval-Augmented Generation)是在 LLM 推論前先從外部知識庫搜尋相關文本,把它塞進 Prompt 一起送給模型。這解決了兩個核心問題:① LLM 訓練截止日期後的新知識無法回答;② 企業私有資料(合約、SOP、內部文件)不可能出現在公開訓練資料裡。有了 RAG,LLM 就能「讀」你的私有知識庫再回答。

Q

Dify 的 Workflow 和 Agent 模式有何不同?

Workflow 是「確定性流程」——你事先設計好每個步驟,輸入進去就照著跑,輸出可預測、可重現,適合文件摘要、格式轉換等一次性任務。Agent 是「自主決策」——你給它一個目標和一組工具(搜尋、計算、API 呼叫),它自己決定要用哪個工具、用幾次、按什麼順序,適合複雜、多步驟的開放性問題。簡單說:Workflow = 流水線;Agent = 自動駕駛。

Q

如何評估 RAG 系統的品質?

主要看兩個指標:① 召回率(Recall)——相關的段落有沒有被撈出來,如果召回率低,LLM 拿不到足夠資訊就會亂答。② 精確率(Precision)——撈出來的段落有多少是真的相關,如果 Precision 低會塞入太多雜訊。實務上還會加上 Answer Faithfulness(最終回答和撈出的資料是否一致,偵測幻覺)和 Answer Relevance(回答和問題的相關性)。

Q

在離線 / 隔離環境部署 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 設定正確,知識庫功能才能用。

這篇學到什麼

🧩Dify 是 Ollama 的最佳搭檔——Ollama 跑模型,Dify 控制模型行為,把 AI 應用變得可設計、可監控
📚RAG 解決了 LLM 的兩大核心問題:訓練截止日期限制 + 企業私有資料無法存取
⚙️Workflow = 確定性流水線;Agent = 自主決策代理;Chatbot = 帶記憶的多輪對話
🔒離線部署關鍵:提前 docker save 打包所有 image,搬入後 docker load,再把 Ollama endpoint 指向內網 IP
Dify
RAG
LLM
Ollama
AI
Orchestration
EP.03