iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
生成式 AI

Python 新手的 AI 之旅:從零開始打造屬於你的 AI / LLM 應用系列 第 18

【Day18】Dify 工作流 (1):工作流基本介紹 (Chatflow, Workflow)

  • 分享至 

  • xImage
  •  

前言

經過前三天的介紹,我們已經可以用 Dify 做出一個自己的聊天機器人了,但如果你希望機器人處理更複雜的情況,那就會需要用到工作流。接下來一邊認識工作流,一邊做一個聊天機器人吧~

工作流

Dify 有兩種工作流

  • Chatflow:適用於問答的情境,像是客服、語意搜索,以及你需要建構多步驟對話的應用程式。
  • Workflow:適用於需要自動化和批次處理的情境,像是電子郵件自動回覆、內容生成、數據分析等等。

到創建空白應用這邊,新增工作流編排

然後就會看到預設的工作流,至少會有一個「開始」節點

接下來針對這個畫面上的東西,來一一介紹吧!

開始

點擊開始節點,右邊會出現該節點的資訊,以及下一步節點的資訊

變數名稱 資料類型 功能 備註
sys.query String 使用者在對話框中初始輸入的內容
sys.files Array[File] 使用者在對話框內上傳的圖片 圖片上傳功能需在應用編排頁右上角的 "功能" 處開啟,給多模態模型使用
sys.dialogue_count Number 使用者與 Chatflow 類型應用互動時的對話輪數。每輪對話後自動計數增加 1,可與 if-else 節點搭配出豐富的分支邏輯。例如到第 X 輪對話時,回顧歷史對話並給出分析
sys.conversation_id String 對話框互動會話的 ID,將所有相關的訊息分組到同一個對話中,確保 LLM 針對同一個主題和上下文持續對話
sys.user_id String 分配給每個應用使用者的 ID,用以區分不同的對話使用者
可以在「輸入字段」這邊增加變數,變數就跟我們前幾天 Dify 入門用到的一樣,一樣可以在 Prompt 中使用

全域變數

右上角也可以放環境變數,當你想把這個工作流分享給別人開發的時候,通常會匯出成一個 DSL 檔案,而環境變數不會被放到 DSL 中,適合拿來放一些 API key, toke

旁邊的「對話變數」可以把它想成資料的暫存器,利用一個叫「變數分配器」的節點來輸入,在同一個 conversation 中很好用,就不需要全部依賴模型的記憶功能。

新增節點

在空白處點按右鍵 -> 添加節點,這邊我們再新增一個 LLM 節點,然後把他接到 LLM 的後面,你可以按 delete 將節點之間連接的線段刪除。

也可以幫節點改名字

LLM 節點

最重要的節點之一,可以設定模型、上下文、SYSTEM prompt, USER proompt、記憶功能等等,之後會很常用到,到時候再來觀察細節

直接回覆

決定了使用者在聊天室中會看到的回覆,所有回覆都是以這個為主,使用者不會知道過程中 LLM 怎麼運作,對他來說這就像是一個黑盒子 (當然你也可以把節點的流程打開讓使用者看到)

在任何輸入框中都可以用 / 或者 { 來叫出變數清單,用法跟之前差不多,像這邊我們就會希望輸出的文字是由上一個 LLM 節點的輸出內容

節點幾乎都會有輸出變數名稱,這個輸出變數就是讓接續的節點去使用的,以上面例子來說就是 翻譯的 LLM / text ,要特別注意不要選錯了

翻譯聊天機器人實作

實作

接下來我會做一個基本的聊天機器人,不過這個機器人輸出的結果會由另一個 LLM 節點翻譯成英文或者簡體中文

首先,我們先拉一個這樣的工作流,由兩個 LLM、開始和一個直接回覆組成

在開始節點新增變數 Language,並且設定成下拉選項

然後在思考的 LLM 中設定模型的參數,方便起見,你可以直接用預設的參數,這邊我選了「創意」,所以他的 Temperature 和 Top P 比較高

溫度 (Temperature) 越高,表示模型的隨機性越高,可預測性越低,對於事實和準確性很要求的答案,一定要將溫度設低一點;Top P 則限制最有可能出現的單字範圍,當 Top P 愈高,表示模型在生成文本時可選擇的單詞範圍越廣。

舉例來說,如果是溫度高、Top P 低,那句子的「結構」會有更多變化,但是整體可能會更不連貫

SYSTEM prompt 和 USER prompt 的設定,並且把「記憶功能」打開。記憶功能開啟後,每次輸入給 LLM 的資訊就會包含對話紀錄,才能多輪問答的效果才會比較好。

因為「翻譯的 LLM 」節點只需要做翻譯任務,所以就不用把記憶功能打開,但是需要加上開始談話之前選擇的語言以及上一個節點傳過來的字串。

最後是直接回覆,我們同時將「思考的 LLM」和 「翻譯的 LLM 」內容輸出,看看差別

測試

點擊預覽可以開啟聊天視窗,這邊我們將 Language 變數設定成簡體中文

打招呼,看起來效果不錯歐

小結

今天用了工作流之後有沒有覺得 Dify 真的很方便XD,重點是我們沒有寫任何一行程式碼,這樣可以更專注在這個 Chatbot 背後「思考」的流程設計,如果是傳統使用 OpenAI API 或者 LangChain 來實作上面的功能還可以,但是如果加上 RAG, 問題分類等等,就會更複雜,畢竟流程這種東西還是畫出來最直觀,如果可以用拖拉的就更讚。

明天要介紹「知識檢索」和「問題分類」這兩個節點,期待一下吧~

偷偷宣傳一下我的社團 Google Developer Group on Campus NCKU,今天的期初社大因為山陀兒颱風的關係變成線上的,但我還是好緊張RRR感覺介紹自己專案的時候有點落漆,希望可以找到志同道合的夥伴><


上一篇
【Day17】Dify 入門 (3):使用知識庫來做 RAG 並結合 Notion database
下一篇
【Day19】Dify 工作流 (2):在 RAG 之前先進行問題分類吧!
系列文
Python 新手的 AI 之旅:從零開始打造屬於你的 AI / LLM 應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言