Dify 入門:無代碼 AI 應用程式開發

2024-07-26 | Zijian Yang 

Dify 是一個開源的大型語言模型(LLM)應用開發平台,結合了 Backend-as-a-Service 和 LLMOps 的概念,幫助開發者快速構建生產級的生成式 AI 應用程式。即使是非技術人員,也可以參與 AI 應用程式的定義和資料操作。

Dify 內建了構建 LLM 應用所需的關鍵技術堆疊,包括支援數百種模型、直觀的 Prompt 編排界面、高品質的 RAG 引擎以及靈活的 Agent 架構,同時提供一系列易於使用的介面和 API,從而為開發者節省了大量重複造輪子的時間,讓他們專注於創新和業務需求。

Dify 這個名稱來自 “Define”(定義)和 “Modify”(修改),象徵著定義並不斷改進你的 AI 應用。

為什麼使用 Dify?

可以把 LangChain 這類別館想像成一個裝滿工具的箱子,有錘子、釘子等。而相比之下,Dify 提供的是一個更適合生產環境的完整解決方案——Dify 更像是具有精細工程設計和軟體測試的腳手架系統。

最重要的是,Dify 是開源的,由一個專業的全職團隊和社群共同建立。你可以基於任何模型自行部署類似 Assistants API 和 GPTs 的功能,保持對資料的完全控制,並在易於使用的界面上享受靈活的安全性。

Dify 能做什麼?

  • 工作流程:Dify 提供一個視覺化畫布來構建和測試穩健的 AI 工作流程。使用者可以利用 Dify 的全部功能,包括模型內建和 Prompt 創作。
  • 全面的模型支持:該平台支援無縫內建數百種專有和開源 LLM,包括流行的 GPT、Mistral、Llama3 以及任何相容 OpenAI API 的模型。這種廣泛的支援確保了開發者的靈活性和選擇。
  • Prompt IDE:Dify 包含直觀的 Prompt IDE,允許使用者建立提示、比較模型表現,並通過如文本轉語音等附加功能增強應用。
  • RAG Pipeline:Dify 的 RAG(檢索增強生成)功能涵蓋了從檔案匯入到檢索的全過程,並支援多種檔案格式如 PDF 和 PPT 的文本提取。
  • Agent 功能:使用者可以使用 LLM 函式呼叫或 ReAct 定義代理,並內建預構建或自訂工具。Dify 提供超過 50 種內建的 AI 代理工具,如 Google 搜尋、DALL·E、Stable Diffusion 和 WolframAlpha。
  • LLMOps:該平台包括觀察功能,用於監視和分析應用程式的日誌和效能,從而根據實際資料和註釋進行連續改進。
  • Backend-as-a-Service:Dify 為其所有功能提供對應的 API,允許輕鬆內建到現有業務邏輯中。
  • 雲端服務:Dify 提供零設定的雲服務,包括自託管版本的所有功能。Sandbox 計劃提供 200 次免費的 GPT-4 呼叫以供試驗。
  • 自託管:Dify 的社群版可以快速在任何環境中設定,並提供詳細的檔案以進行深入客製化。
  • 企業解決方案:Dify 提供企業級功能,如 SSO 和存取控制,並在 AWS Marketplace 上提供 Dify Premium 選項,包括應用程式的自訂品牌和標誌。

從這篇文章中你可以收穫什麼?

閱讀本文後,你將全面了解如何利用 Dify 這個開源 LLM 應用開發平台來建立強大的 AI 應用,無需編寫代碼。

你將學會如何使用視覺化界面構建和部署工作流程、內建各種模型,並實作進階功能如 RAG 管道和 AI 代理。

此外,本文提供了設定基於雲端和自託管解決方案的實用指南,幫助你高效地部署和管理 AI 應用。

無論你是 AI 新手還是經驗豐富的開發者,都能從中找到增強 AI 開發能力的寶貴見解和實用步驟。

選擇使用方式

  • 雲端服務:在線體驗 Dify 提供適合所有人的雲端服務,因此你可以在不自行部署的情況下使用 Dify 的全部功能。

通過免費計劃開始使用,其中包括 200 次 OpenAI 呼叫的免費試用。要使用雲版本的免費計劃,你需要一個 GitHub 或 Google 帳戶以及 OpenAI API 金鑰。以下是開始的方法:

  1. 註冊 Dify 雲端服務,建立新的工作空間或加入現有工作空間。
  2. 設定你的模型提供商,或者使用託管的模型提供商。
  3. 現在你可以創造應用了!

目前只有兩種登入選項:GitHub 和 Google。你可以選擇其中一個登入。

Dify 登入

登入後,您將看到 Studio 介面。您可以跳過下一部分,直接進入「模型」章節。

部署社群版:在本地執行

如果您想在本地執行 Dify,可以選擇部署 Dify 社群版,這是開源版本。您可以透過 Docker Compose 或本地原始碼來部署。本文將展示使用 Docker Compose 在 Windows 上本地部署 Dify 的更方便方法。

首先,安裝並執行 Docker Desktop,並啟用 WSL 2。您可以從以下連結下載,詳細的安裝過程不會在本文中介紹:

在您想要儲存 Dify 的目錄中,開啟命令提示字元,並輸入以下指令:

git clone https://github.com/langgenius/dify.git

您將看到以下輸出:

如果您尚未安裝 Git,則可以從 Dify 的 GitHub 儲存庫下載整個專案並提取它,然後再繼續執行以下步驟。但是,此方法對於將來的更新不太方便。

導航到 Dify 源碼目錄,執行一鍵啟動命令:docker

部署輸出:

D:\Joe\Project\Dify\dify\docker>docker compose up -d
[+] Running 75/9
✔ weaviate Pulled 27.0s
✔ web Pulled 61.1s
✔ ssrf_proxy Pulled 26.9s
✔ api Pulled 51.3s
✔ redis Pulled 27.3s
✔ sandbox Pulled 40.4s
✔ db Pulled 30.1s
✔ nginx Pulled 27.1s
✔ worker Pulled 51.3s
[+] Running 11/11
✔ Network docker_default Created 0.0s
✔ Network docker_ssrf_proxy_network Created 0.1s
✔ Container docker-sandbox-1 Started 2.1s
✔ Container docker-weaviate-1 Started 2.7s
✔ Container docker-db-1 Started 2.7s
✔ Container docker-ssrf_proxy-1 Started 2.7s
✔ Container docker-redis-1 Started 2.7s
✔ Container docker-web-1 Started 1.6s
✔ Container docker-api-1 Started 2.9s
✔ Container docker-worker-1 Started 2.9s
✔ Container docker-nginx-1 Started 3.3s

最後,檢查所有容器是否都正常運行:

docker compose ps

執行輸出:

D:\Joe\Project\Dify\dify\docker>docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-api-1 langgenius/dify-api:0.6.15 “/bin/bash /entrypoi…” api 3 minutes ago Up 3 minutes 5001/tcp
docker-db-1 postgres:15-alpine “docker-entrypoint.s…” db 3 minutes ago Up 3 minutes (healthy) 5432/tcp
docker-nginx-1 nginx:latest “sh -c ‘cp /docker-e…” nginx 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
docker-redis-1 redis:6-alpine “docker-entrypoint.s…” redis 3 minutes ago Up 3 minutes (healthy) 6379/tcp
docker-sandbox-1 langgenius/dify-sandbox:0.2.1 “/main” sandbox 3 minutes ago Up 3 minutes
docker-ssrf_proxy-1 ubuntu/squid:latest “sh -c ‘cp /docker-e…” ssrf_proxy 3 minutes ago Up 3 minutes 3128/tcp
docker-weaviate-1 semitechnologies/weaviate:1.19.0 “/bin/weaviate –hos…” weaviate 3 minutes ago Up 3 minutes
docker-web-1 langgenius/dify-web:0.6.15 “/bin/sh ./entrypoin…” web 3 minutes ago Up 3 minutes 3000/tcp
docker-worker-1 langgenius/dify-api:0.6.15 “/bin/bash /entrypoi…” worker

輸出應包括 3 個業務服務:api、worker 和 web,以及 6 個基礎元件:weaviate、db、redis、nginx、ssrf_proxy 和 sandbox。

然後,打開瀏覽器並轉到 訪問 Dify。輸入必要的資訊以完成用戶註冊。http://localhost

Dify 註冊

填寫註冊資訊后,點擊「設置」進入登錄頁面。輸入您剛剛註冊的帳戶資訊並登錄:

您應該能夠成功登錄。此時,您的 Dify 本地部署已準備就緒,可供使用。

當您將來需要更新 Dify 的本地版本時,請導航到 Dify 原始碼中的目錄並按順序執行以下命令:docker

cd dify/docker
docker compose down
git pull origin main
docker compose pull
docker compose up -d

接下來,不要忘記同步您的環境變數配置。這一步非常重要:

  • 如果檔有更新,請務必相應地同步和修改您的本地檔。.env.example.env
  • 檢查檔中的所有配置項,確保它們與您的實際運行環境相匹配。您可能需要將檔中的新變數添加到檔中,並更新任何更改的值。.env.env.example.env

模型

模型類型

Dify 將模型分為 4 種類型,每種類型都有不同的用途:

  1. 系統推理模型:在應用程式中用於聊天、姓名生成和建議後續問題等任務。
  • 供應商包括 OpenAI、Azure OpenAI Service、Anthropic、Hugging Face Hub、Replicate、Xinference、OpenLLM、科大訊飛 SPARK、wenxinyiyan、通藝、Minimax、智普(ChatGLM) Ollama、LocalAI。
  1. 嵌入模型:用於將分段文件嵌入到知識中,並在應用程式中處理用戶查詢。
  • 供應商包括 OpenAI、ZHIPU (ChatGLM)、Jina AI (Jina Embeddings 2)。

3. Rerank Models:增強 LLM 中的搜尋功能。

  • 供應商:Cohere。

4. 語音轉文本模型:在對話應用程式中將口語轉換為文字。

  • 供應商:OpenAI。

選擇和配置模型

首次登入並進入 Dify Studio 頁面後,您需要在 Dify 的“設定”→“模型提供者”部分添加和設定所需的模型。

按兩下右上角的頭貼按鈕,然後選擇“設定”。

點擊左側功能表中的 「Model Provider」,然後在右上角看到 「System Model Settings」。。在這裡,您可以設定系統的預設模型。

預訂模型整合(以 OpenAI 為例)

Dify 支援主要的模型供應商,如 OpenAI 的 GPT 系列和 Anthropic 的 Claude 系列。每個模型的功能和參數都不同,因此請選擇適合您應用程式需求的模型提供者。在 Dify 中使用 API 金鑰之前,您可以從模型供應商的官方網站取得 API 金鑰。

在這裡,我們將使用 OpenAI 的 API 金鑰作為範例。使用 API 金鑰允許我們從更多模型中進行選擇。在本文中,我們不會詳細介紹如何取得 API 金鑰。如果您需要內建開源模型,Dify 也支援此功能。例如,您可以通過 Hugging Face 或 Ollama 內建開源模型。當然,您也可以暫時跳過任何設定,使用預設的最新 gpt-4o-mini 模型作為系統推理模型,但在這種情況下,您將只有 200 個單詞權杖可用於試用。

要設定 OpenAI API 金鑰,請按下 OpenAI 部分右側的「設定」按鈕,輸入 API 金鑰,然後按下保存。

正確設定 API 金鑰後,您將看到“設定”按鈕上方的指示器變為綠色。此外,通過按兩下OpenAI徽標下方的“27個模型”按鈕,將顯示和存取所有可用模型。

此時,您可以在 「系統模型設置」 中選擇其他需要的模型,例如功能更強大的 gpt-4o。

在這裡,我們注意到 Rerank 模型為空,並且沒有可選選項。這是因為目前只有 Cohere 和 JinaAI 模型支援重新排名。如果需要,您還可以通過設定各自的 API 金鑰來啟用它們。

本文不會深入探討 Rerank 的實踐,但我們可以簡要瞭解 Rerank 是什麼以及它的作用。

混合檢索可以結合不同檢索技術的優點,以實作更好的召回結果。但是,不同檢索模式下的查詢結果需要合併和歸一化(將資料轉換為統一的標準範圍或分佈,以便更好地進行比較、分析和處理),然後才能一起提供給大型模型。此時,我們需要引入一個評分系統:Rerank 模型。

Rerank Model 計算候選檔案清單與使用者查詢之間的語意比對,根據語意比對對結果進行重新排序,以改進語意排名結果。其原理是計算使用者查詢與每個給定候選檔案之間的相關性分數,然後傳回按相關性從高到低排序的檔案清單。常見的 Rerank 模型包括 Cohere rerank、bge-reranker 等。

混合搜索和重新排序流程

在大多數情況下,在重新排名之前會進行初始檢索,因為計算查詢與數百萬個文檔之間的相關性分數效率非常低。因此,重新排名通常放在搜索過程的最後階段,非常適合合併和排序來自不同檢索系統的結果。

它的最大優點是,它不僅提供了一種簡單且複雜度較低的方法來改進搜尋結果,允許使用者將語義相關性合併到現有搜尋系統中,而且不需要對基礎設施進行重大修改。

自訂模型整合(以 Ollama + Llama 3.1 為例)

Dify 可以與本地模型或託管模型內建,例如 Ollama、LocalAI、Hugging Face、Replicate、Xinference 和 OpenLLM。

在這裡,我們將展示如何通過 Ollama 將本地部署的 Dify Docker 執行個體連線到本地運行的 Llama 3.1 執行個體,從而在 Dify 中使用開源本地模型。連線其他平臺的方法可以在 官方檔案 中找到。

需要注意的是,如果您想使用 Dify 的官方 Web 版本連線到您的本地 Ollama 執行個體,您將需要使用 Ngrok 或 Frpc 等工具將您的本地 Ollama 埠公開到公共網際網路。或者,如果您的網路有公共 IP,您可以使用路由器埠對映將 Ollama 的服務放置在公共網際網路上。由於網路設定的複雜性和可變性,本文不會深入探討與網路相關的問題。

在上一篇文章如何在 Windows 上運行 Ollama 中,您可以瞭解如何使用 Ollama 在本地運行模型。

Ollama 和模型準備就緒後,請退出 Ollama,然後將環境變數添加到您的系統中(您可以通過搜尋功能找到它)並將其值設定為 。這是為了將 Ollama 的服務公開給 Dify 以供後續呼叫。OLLAMA_HOST0.0.0.0

保存完環境變數后,我們先運行一個 Llama 3.1 實例:

ollama run llama3.1

成功啟動后,Ollama 在本地埠 11434 上啟動 API 服務,可通過 訪問該埠。http://localhost:11434

現在,讓我們檢查您機器的內部IP位址。開啟命令提示符並輸入 。您應該看到類似於以下內容的輸出:ipconfig

C:\Users\Edd1e>ipconfig
Windows IP ConfigurationEthernet adapter Ethernet 5:   Connection-specific DNS Suffix  . : uds.anu.edu.au
Link-local IPv6 Address . . . . . : fe80::5b74:3153:67b9:412c%27
IPv4 Address. . . . . . . . . . . : 130.56.120.123
Subnet Mask . . . . . . . . . . . : 255.255.252.0
Default Gateway . . . . . . . . . : 130.56.120.1Wireless LAN adapter Wi-Fi: Connection-specific DNS Suffix . : anu.edu.au
Link-local IPv6 Address . . . . . : fe80::5bd:7139:58d7:69eb%15
IPv4 Address. . . . . . . . . . . : 10.20.96.139
Subnet Mask . . . . . . . . . . . : 255.255.224.0
Default Gateway . . . . . . . . . : 10.20.96.1

識別並複製它。如果連接了多個網路介面,您可以記錄不同的網路介面並嘗試所有介面。IPv4 AddressIPv4 Addresses

接下來,運行本地部署的 Dify Docker。

登錄 Dify 後,導航到並輸入參數,如圖所示:Settings > Model Providers > Ollama

圖中所示參數的具體含義和填寫方法如下:

  • 型號名稱:llama3.1
  • 基本 URL:,其中 URL 由後跟之前獲取的本地 IP 位址和埠號組成。http://<your-ollama-endpoint-domain>:11434http://
  • 請注意,在此處使用將不起作用;您需要使用本地 IP 位址。127.0.0.1
  • 如果使用 Docker 部署 Dify,請考慮使用本地網路 IP 位址(例如)或 Docker 主機 IP 位址(例如 .http://192.168.1.100:11434http://172.17.0.1:11434
  • 如果 Ollama 在 Docker Desktop 中運行,則可能是正確的地址,因為 Docker 中的 localhost 與主機的 localhost 不同,因為容器存在於單獨的網路命名空間中。http://host.docker.internal:11434
  • 如果使用本地源碼部署方式部署 Dify,可以嘗試使用 。http://localhost:11434
  • 型號類型:Chat
  • 模型上下文長度:4096
  • 模型的最大上下文長度。如果不確定,請使用預設值 4096。
  • 最大權杖限制:4096
  • 模型返回的最大 Token 數。如果模型沒有特定要求,則可以與模型上下文長度一致。
  • 支援 Vision:No
  • 如果模型支援影像理解(多模態),請選擇此選項, 例如 。llava

在驗證沒有錯誤後,按兩下 「Save」 在應用程式中使用該模型。

Embedding 模型的集成方式與 LLM 類似,只需將模型類型更改為 Text Embedding 即可。

儲存後,您將能夠看到添加的模型:

此時,Dify 已準備好與 Ollama 合作。建議繼續閱讀下面的實踐部分,以驗證本節中所做的工作的有效性。此外,您還可以創建自己的RAG(檢索增強一代)知識庫聊天機器人。

如果您使用 docker 部署 Dify 和 Ollama,則可能會遇到以下錯誤:

httpconnectionpool(host=127.0.0.1, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8562812c20>: fail to establish a new connection:[Errno 111] Connection refused'))
httpconnectionpool(host=localhost, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8562812c20>: fail to establish a new connection:[Errno 111] Connection refused'))

出現此錯誤的原因是無法從 docker 容器存取 Ollama 服務。 通常是指容器本身,而不是主機或其他容器。要解決此問題,您需要向網路公開 Ollama 服務。localhost

以下是在 macOS 和 Linux 上為 Ollama 設置環境變數的方法。前面已經提到了 Windows 的相關設置。

如果 Ollama 作為 macOS 應用程式運行,則應使用以下方式設定環境變數:launchctl

  1. 對於每個環境變數,調用 .launchctl setenv
launchctl setenv OLLAMA_HOST "0.0.0.0"

2. 重新啟動 Ollama 應用程式。

3. 如果以上步驟無效,您可以使用以下方法:

問題在於 Docker 本身,以及訪問 Docker 主機。您應該連線到 。因此,在服務中替換 將使其有效工作。host.docker.internallocalhosthost.docker.internal

http://host.docker.internal:11434

如果 Ollama 作為 systemd 服務運行,則應使用以下方法設置環境變數:systemctl

  1. 通過調用 編輯 systemd 服務。這將打開一個編輯器。systemctl edit ollama.service
  2. 對於每個環境變數,在 section 下新增一行 :Environment[Service]
[Service] 
Environment="OLLAMA_HOST=0.0.0.0"

3. 保存並退出。

4. 重新載入並重新啟動 Ollama:systemd

systemctl daemon-reload  
systemctl restart ollama

應用程式編排

在 Dify 中,「應用程式」是指基於 GPT 等大型語言模型構建的實際場景應用程式。通過創建應用程式,您可以將智慧 AI 技術應用於特定需求。它包括開發 AI 應用程式的工程範例和特定的可交付成果。

簡而言之,應用程式為開發人員提供:

  • 使用者友好的 API,可由後端或前端應用程式直接調用,通過 Token 進行身份驗證
  • 一個即用型、美觀且託管的 WebApp,您可以使用 WebApp 範本進一步開發它
  • 易於使用的介面,包括提示工程、上下文管理、日誌分析和註釋

您可以選擇其中任何一項或全部來支援您的 AI 應用程式開發。

創建應用程式

您可以通過三種方式在 Dify 的工作室中建立應用程式:

  • 應用程式樣本建立 (建議初學者)
  • 創建空白應用程式
  • 使用 DSL 檔案建立應用程式 (本機/線上)

從範本創建應用程式

首次使用 Dify 時,您可能不熟悉如何創建應用程式。為了説明新使用者快速瞭解可以在 Dify 上構建哪些類型的應用程式,Dify 團隊的提示工程師已經為多種場景創建了高品質的應用程式範本。

您可以從導航功能表中選擇“Studio”,然後在應用程式清單中選擇“Create from Template”。

選擇任何範本並將其添加到您的工作區。

以 三步翻譯工作流 作為範例,您可以在創建工作流後開始編輯工作流。從 LLM 2 的說明中可以明顯看出,這是一個專業的中文翻譯機器人。通過檢測專業術語、直譯、審校、二次自由翻譯等步驟,提高專業文章翻譯的準確性。

點擊 「Publish」 和 「Run App」 可以測試包含許多技術術語作為翻譯材料的論文摘要。右側窗口顯示工作流程和翻譯結果,非常出色。

建立新應用程式

如果您需要在 Dify 上建立一個空白應用程式,您可以從導航中選擇“Studio”,然後在應用程式清單中選擇“從空白創建”。

首次建立應用程式時,您可能需要首先瞭解 Dify 上四種不同類型應用程式的基本概念:

應用程式類型

Dify 提供四種類型的應用程式:

  • 聊天助手:基於 LLM 構建的對話助手
  • 文本生成:文本生成任務的助手,例如編寫故事、文本分類、翻譯等。
  • Agent:能夠進行任務分解、推理和工具調用的對話式智慧助手
  • 工作流:基於流程編排定義更靈活的 LLM 工作流

文字生成和 Chat Assistant 之間的區別如下表所示:

文本生成和聊天助手的區別

在創建應用程式時,您需要為其命名,選擇合適的圖示,並使用清晰簡潔的文字來描述此應用程式的用途,以方便其後續在團隊內部使用。

對話助手

對話應用程式使用「一問一答」模式與用戶進行持續對話。

適用場景

對話應用程式可用於客戶服務、在線教育、醫療保健、金融服務等領域。這些應用程式可以幫助組織提高工作效率,降低人工成本,並提供更好的用戶體驗。

如何撰寫

對話應用程式支援提示、變數、上下文、開場白和下一個問題的建議。

這裏,我們以一個 Interviewer 應用為例,介紹一下編寫 Conversation 應用的方法。

步驟 1 建立應用程式

點擊首頁的 「Create Application」 按鈕,創建應用程式。填寫應用程式名稱,然後選擇 Chatbot 作為應用程式類型。

第 2 步:編寫應用程式

應用程式創建成功后,它將自動重定向到應用程式概述頁面。單擊側面功能表:「Orchestrate」 以編寫應用程式。

2.1 填寫提示

提示短語用於指導 AI 提供專業的回復,使回復更加準確。您可以利用內置的提示生成器來製作合適的提示。提示支援插入表單變數,例如 .提示變數中的值將替換為使用者填寫的值。{{input}}

例:

  1. 輸入 interview scenario 命令。
  2. 提示將在右側內容框中自動生成。
  3. 您可以在提示中插入自定義變數,以根據特定需求或詳細資訊對其進行定製。

為了獲得更好的體驗,我們將添加一個開場對話:"Hello, {{name}}. I'm your interviewer, Bob. Are you ready?"

要添加開場對話,請點擊底部的 「Add Feature」 按鈕,然後啟用 「Conversation Opener」 功能:

在編輯開場白時,您還可以添加幾個介紹性問題:

2.2 Adding Context

If an application wants to generate content based on private contextual conversations, it can use the knowledge feature. Click the “Add” button in the context to add a knowledge base.

2.3 Debugging

Enter user inputs on the right side and check the response content.

如果結果不理想,您可以調整提示和模型參數。點擊右上角的模型名稱,設置模型的參數:

使用多個模型進行調試:

如果使用單個模型進行調試感覺效率低下,您可以利用「作為多個模型調試」功能來批量測試模型的回應有效性。

支援同時添加多達 4 個 LLM。

2.4 發佈應用

調試應用程式後,按兩下右上角的 Publish」 按鈕以創建獨立的 AI 應用程式。除了通過公共 URL 體驗應用程式外,您還可以基於 API 進行二次開發,將其嵌入到網站中等等。

代理

Agent Assistant 可以利用大型語言模型 (LLM) 的推理能力。它獨立設定目標、簡化複雜任務、操作工具並優化流程以自主完成任務。

為了便於快速學習和使用,“探索”部分中提供了 Agent Assistant 的應用程式範本。您可以將這些範本整合到您的工作區中。新的 Dify “Studio”還允許創建自定義 Agent Assistant 以滿足個人需求。該助理可以協助分析財務報告、撰寫報告、設計徽標和組織旅行計劃。

編排 Agent Assistant 的提示:在“說明”部分,您可以定義 Agent Assistant 的任務目標、工作流程、資源和限制。這通過為代理的操作提供明確的指導來確保最佳結果。

為 Agent Assistant 添加工具:在 「Context」 部分,您可以整合有助於資訊檢索的知識庫工具,從而增強代理的背景知識。“工具”部分允許添加擴展語言學習模型 (LLM) 功能的工具,例如互聯網搜索、科學計算或圖像創建。Dify 支援內置和自定義工具,包括與 OpenAPI/Swagger 和 OpenAI 外掛程式標準相容的自定義 API 工具。

工具支援在 Dify 上創建更強大的 AI 應用程式。它們允許 Agent Assistant 通過推理、步驟分解和工具調用來執行複雜的任務。此外,這些工具還有助於將應用程式與外部系統或服務集成,從而允許執行代碼和訪問專有資訊源等活動。

代理設置:Dify 為 Agent Assistant 提供了兩種推理模式:Function Calling 和 ReAct。支援函數調用的模型,例如 GPT-3.5 和 GPT-4,性能更好、更穩定。對於不支援函數調用的模型,使用 ReAct 推理框架來實現類似的結果。Agent (代理) 設定還允許修改代理的反覆運算限制。

配置對話打開器:您可以為 Agent Assistant 設定對話開場白和初始問題。此功能在使用者首次交互開始時顯示,突出顯示座席可以執行的任務類型並提供範例問題。

調試和預覽:在將 Agent Assistant 發佈為應用程式之前,您可以對其進行調試和預覽。此步驟允許您測試代理完成任務的有效性並進行必要的調整。

應用程式工具包

在 Studio — Application Orchestration 中,按兩下 Add Feature 以打開應用程式工具箱。

應用程式工具箱為 Dify 的應用程式提供了各種附加功能:

對話開場白

在對話式應用程式中,AI 會主動說出第一句話或提出一個問題。您可以編輯開場白的內容,包括初始問題。使用對話開場白可以引導使用者提出問題、解釋應用程式背景,並降低發起對話的門檻。在與 AI 應用程式的交互過程中,我們通常會對內容安全、用戶體驗和法律法規有嚴格的要求。在這種情況下,我們需要 「敏感內容審核」 功能來為最終用戶創造更好的交互環境。

下一步問題建議

設置下一步問題建議可以讓 AI 根據之前的對話生成 3 個後續問題,指導下一輪交互。

引文和署名

啟用此功能后,大型語言模型將在回答問題時引用知識庫中的內容。您可以在回應下方查看特定的引文詳細資訊,包括原始文本片段、片段編號和匹配分數。

內容審核

在與 AI 應用程式的交互過程中,我們通常會對內容安全、用戶體驗和法律法規有嚴格的要求。在這種情況下,我們需要 「敏感內容審核」 功能來為最終用戶創造更好的交互環境。

帶註釋的回復

帶註釋的回復功能允許通過手動編輯和註釋來定製高品質的問答回復。

工作流

工作流通過將複雜任務分解為更小的步驟(節點)來降低系統複雜性,減少對快速工程和模型推理功能的依賴,並提高 LLM 應用程式在複雜任務中的性能。這還可以提高系統的可解釋性、穩定性和容錯能力。

Dify 工作流分為兩種類型:

  • Chatflow:專為對話場景而設計,包括客戶服務、語義搜索和其他在響應構建中需要多步驟邏輯的對話應用程式。
  • 工作流:面向自動化和批處理場景,適用於高品質翻譯、數據分析、內容生成、電子郵件自動化等。

為了解決自然語言輸入中使用者意圖辨識的複雜性,Chatflow 提供了問題理解節點。與 Workflow 相比,它增加了對 Chatbot 功能的支援,例如對話歷史記錄(記憶體)、帶註釋的回覆和 Answer 節點。

為了處理自動化和批次處理場景中的複雜業務邏輯,Workflow 提供了多種邏輯節點,例如代碼節點、IF/ELSE 節點、範本轉換、反覆運算節點等。此外,它還提供定時和事件觸發操作的功能,從而促進自動化流程的構建。

節點是工作流中的基本元件,通過連線具有各種功能的節點來實作一系列操作。

核心節點:

  1. 開始:設置初始參數以開始工作流程。
  2. 結束:定義結束工作流流程的最終輸出。
  3. 回答:指定 Chatflow 流程中的響應內容。
  4. 大型語言模型 (LLM):利用大型語言模型來回答問題或處理自然語言。
  5. 知識檢索:從知識庫中獲取相關文本內容,以便在下游 LLM 節點中獲取上下文。
  6. 問題分類器:使用定義的分類描述允許 LLM 對使用者輸入進行分類。
  7. IF/ELSE:根據條件語句將工作流拆分為兩個分支。
  8. 代碼執行:使用 Python/NodeJS 代碼執行自訂邏輯,例如數據轉換。
  9. 範本轉換:使用 Python 樣本語言 Jinja2 進行靈活的數據轉換和文本處理。
  10. 變數聚合器:將多個分支的變數合併為一個,以便在下游節點中統一配置。
  11. 參數提取器:使用 LLM 從自然語言中推斷和提取結構化參數,以供後續工具使用或 HTTP 請求。
  12. 反覆運算:對清單物件重複步驟,直到處理完所有結果。
  13. HTTP 請求:使用 HTTP 協定傳送伺服器請求,以進行外部資料檢索、Webhook、圖像生成等。
  14. 工具:允許在工作流程中集成內置的 Dify 工具、自訂工具、子工作流程等。

構建 Workflow 的過程既靈活又複雜。本文提供了詳細的介紹,讓您自由探索。

實施RAG:使用Ollama和 Dify 建立簡單的本地知識庫聊天應用程式

大型語言模型的訓練資料通常基於公開可用的資料,並且每個訓練對談都需要大量的計算能力。這意味著模型的知識一般不包括私域知識,在公共知識域存在一定的延遲。為了解決這個問題,目前常見的解決方案是使用RAG(Retrieval-Augmented Generation)技術,它使用使用者的問題來比對最相關的外部資料,並在檢索到相關內容后,重新組織並插入回復作為模型提示的上下文。

Dify 的知識庫功能將RAG管道中的每個步驟視覺化,提供簡單易用的使用者介面,説明應用程式構建者管理個人或團隊知識庫,並將其快速內建到 AI 應用程式中。您只需要準備文字內容,例如:

  • 長文本內容(如 TXT、Markdown、DOCX、HTML、JSONL,甚至是 PDF 文件)
  • 結構化數據(如 CSV、Excel 等)

在 Dify 中,知識 是由文件組成的集合。知識庫可以作為檢索上下文整合到應用中。文件可以由開發者或操作團隊成員上傳,或者從其他數據來源同步(通常對應於數據來源中的一個單位文件)。

什麼是 RAG?

RAG(檢索增強生成)架構以向量檢索為核心,已成為讓大型模型能夠存取最新外部知識的主流技術框架,同時解決生成內容中的幻覺問題。這項技術已經在多種應用場景中得以實現。

開發者可以利用這項技術,以低成本構建 AI 驅動的客戶服務、企業知識庫、AI 搜尋引擎等。通過自然語言輸入與各種知識組織形式進行互動,他們可以創建智能系統。我們以一個代表性的 RAG 應用為例:

在下方圖示中,當用戶問「誰是美國總統?」時,系統不會直接將問題交給大型模型回答,而是先在知識庫(例如圖中的維基百科)中執行向量搜索,通過語義相似度匹配找到相關內容(如「喬·拜登是美國第 46 任且現任總統…」)。然後,系統將用戶的問題與檢索到的相關知識一起提供給大型模型,讓其能夠基於足夠的資訊來可靠地回答問題。

RAG flow for the example

為什麼這是必要的?

我們可以把大型模型想像成一個精通各領域知識的超級專家,但它也有其局限性。例如,模型不會知道有關您的個人資訊,因為這些資訊屬於隱私,並不會公開於網路上,因此模型沒有機會事先學習到這些內容。

當您想聘請這位超級專家作為您的個人理財顧問時,您需要允許他查看您的投資紀錄、家庭支出和其他資料,才能更好地回答您的問題。透過這種方式,專家才能根據您的個人情況提供專業建議。

這正是RAG系統的作用:它説明大型模型暫時獲得它不具備的外部知識,使其能夠在回答問題之前找到答案。

從上面的例子中,不難看出RAG系統最關鍵的部分是外部知識的檢索。專家能否提供專業的財務建議,取決於他們是否能準確找到必要的資訊。如果他們找到您的減肥計劃而不是您的投資記錄,即使是最博學的專家也將無能為力。

讓我們動手創建一個具有知識庫的簡單聊天機器人。以下步驟基於之前 Dify 和 Ollama 的本地部署和整合。

首先,按下 。Knowledge > Create Knowledge

選擇以上傳文件。在這裡,我將使用 Nvidia 的最新論文 ChatQA 2:在長上下文和 RAG 功能中彌合與專有 LLM 的差距 作為示例。上傳后,按兩下Import from fileNext

論文摘要

按兩下以完成知識庫的建立。Save & Process

看到「已建立知識」提示表示知識庫的建立已完成。

建立知識庫後,轉到 。Studio > Create from Blank

選擇要測試的 Chatbot 類型,您可以將其命名為您喜歡的任何名稱。

按兩下 旁邊的按鈕以從知識庫添加檔。您還會注意到右上角正在運行本地 Ollama 模型,這表明 Dify 和 Ollama 已成功集成。按兩下允許您選擇其他模型或調整模型參數。在左側的輸入框中,您可以為聊天機器人編寫提示。一切設置好后,點擊保存。AddContextInstructionsPublish

點擊 後,您可以直接點擊運行應用程式。PublishRun App

通過從論文中詢問與 ChatQA 2 相關的問題,我們可以看到機器人利用了知識庫中的文檔並提供了準確的答案,證明瞭 RAG 的有效性。這樣,一個簡單的RAG聊天機器人就成功創建了。

結論

本文全面介紹了 Dify,這是一個開源平臺,可簡化大型語言模型 (LLM) 應用程式的開發。Dify 的主要功能(例如提示編排、RAG 管道和廣泛的模型支援)使開發人員和非技術使用者都可以使用。該平臺將 Backend-as-a-Service 與 LLMOps 相結合,使使用者能夠快速建立和部署 AI 應用程式,而無需大量編碼。通過詳細介紹雲和本地部署選項,本文為讀者提供了利用 Dify 構建和管理可擴充 AI 解決方案的實用知識。Dify 的開源性質和社群驅動的方法提供了靈活性和持續改進,使其成為任何希望在 AI 領域創新的人的寶貴工具。本指南使讀者能夠自信地使用 Dify 開始或增強他們的 AI 開發之旅。

資料來源:https://medium.com/@researchgraph/getting-started-with-dify-no-code-ai-application-development-52c98aef48f7

Related posts