Dify AI實做太陽能領域AI Chatbot

2024/12/28

dify-ai.middle

本篇文章以太陽能產業為情境

透過Dify.ai建立一個太陽能領域AI Chatbot

文章內的LLM model並未經過fine-tune

AI回應內容或資料來源可能有誤

截圖、影片、實驗結果僅供參考

本文章重點為Dify.ai開發之應用筆記

 


 

Dify.AI

https://dify.ai/

為open source AI應用程式開發平台

其中結合LLM+RAG

並可快速建立AI agent或GenAI應用

另外建立出來的app也都有相應的前端chatbox或API可用

Demo影片先上

有興趣的話後面再慢慢看

 

使用Docker在local建立開發環境

ref: https://docs.dify.ai/getting-started/install-self-hosted/docker-compose

畢竟平台上的免費版資源Quota很少

付費也不便宜

如果只是要簡單研究可直接使用官方的docker image

步驟超簡單

照著上方的文件連結

  • clone下來
  • 進到docker目錄用.env.example複製出.env
  • docker-compose up即可
  • 如果需要調整web port可更新.env的NGINX_PORT

馬上就可以將服務跑起來

 

LLM Model設定

第一次使用一定要至少設定一個LLM Model才能使用

點擊左上方的的Avatar > 選擇Settings

接著選擇Model Provider即可設定你想用的LLM

 

我自己則是直接選擇Gemini

透過Popup上方的連結即可快速建立Gemini API Key

dify-ai-model-settings

 

設定好Model後之後就可以開始建立App

App分為以下幾種類型

  • Chatbot
  • Agent
  • Text Generator
  • Chatflow
  • Workflow

這篇先只介紹Chatbot跟Agent

dify-ai-create-blank-app

 

知識庫(Knowledge)

ref

在Dify中最強大的就是知識庫

使用知識庫就可以不用自己搞RAG

可以直接將一些專業領域的資料餵給LLM

讓LLM可以根據這些資料做出正確的回應或判斷

比較不會產生幻覺或亂回答一通

 

支援的資料格式

知識庫支援的資料格式也很多樣

除了基本的TXT, MARKDOWN, MDX, PDF, HTML, XLSX, XLS, DOCX, CSV, MD, HTM之外

dify-ai-knowledge-base-tdata-ype

 

還可以使用notion或外部網站來源(用Firecrawl爬蟲)

dify-ai-external-website

 

建立資料

假設需要建立一個App

並且讓LLM有太陽能相關的知識資料

可以上傳一些太陽能相關的法規PDF

或是網站資料HTML內容

 

上傳資料後

會需要做一些Text preprocessing及cleaning

一開始可以先不特別設定

後續要對LLM做fine-tune的時候再慢慢調整即可

dify-ai-dataset-text-processing-and-cleaning

 

Retrieval Testing

dify-ai-retrieval-testing

以上為簡易測試範例

透過Retrieval Testing

可以先針對資料做一些測試

看有沒有達到預期的結果

 

大致上就是依照個方式

上傳各種資料到知識庫上

dify-ai-knowledge-dataset

 

Chatbot 

可快速產生LLM chatbot

dify-ai-chatbot

 

以上面截圖為例

只要設定好InstructionsContext(知識庫內容)

然後選好LLM Model就差不多了

其實很簡單

 

Prompt Generator

dify-ai-prompt-generator

Instructions的部份可以自己簡單文字敘述

或是透過Instructions區塊右上的那個Generate按鈕

直接使用Prompt Generator

將簡單的問題直接丟進去

產生結構化的prompt

然後再依照實際需求自行調整

 

從上方截圖可以看到

可以先丟出基本的prompt

然後產生出下方這種結構化的prompt

```xml
<instruction>
請扮演一位太陽能專家,熟悉相關法規及知識,負責解答一般民眾對於太陽能、電廠及綠能相關議題的疑問,並消除民眾對於太陽能電廠皆為黑心廠商的刻板印象。

請根據以下步驟回答民眾提問:

步驟一:仔細閱讀民眾提出的問題

步驟二:判斷問題是否屬於「太陽能」、「電廠」、「綠能」相關議題。

步驟三:如果是相關議題,請以專業且易懂的方式解答,內容需包含相關法規及知識,並避免使用過於專業的術語。同時,需積極地消除民眾對於太陽能電廠的負面刻板印象,例如:說明業界的良性發展、政府的相關規範、以及選擇優良廠商的建議等。

步驟四:如果不是相關議題,請回答:「超出太陽能領域範圍,無法提供資訊」。

步驟五:確保你的回答不包含任何 XML 標籤。


<example>
民眾提問:「我想在自家屋頂安裝太陽能板,請問有什麼需要注意的法規嗎?」

你的回答:您好!在自家屋頂安裝太陽能板,需要考慮以下法規:首先,您需要確認您的屋頂結構是否符合安裝要求,並向相關單位申請建築執照。其次,您需要選擇合格的太陽能系統安裝商,並確保其具有相關的專業資格和保險。此外,您還需要了解相關的電網接入規定,並確保您的系統能夠安全可靠地運行。  關於選擇廠商,建議您多方比較,選擇具有良好信譽和豐富經驗的廠商,並仔細閱讀合約條款,避免日後產生糾紛。  目前政府也積極推動綠能政策,提供許多補助和優惠措施,您可以上網查詢相關資訊。


民眾提問:「請問附近要蓋一個新的購物中心,會影響到我的房價嗎?」

你的回答:超出太陽能領域範圍,無法提供資訊。
</example>

</instruction>

 

Debug & Preview

dify-ai-debug-and-preview-and-prompt-log

右上角的按鈕展開即可儲存或發布

也可以直接在設定頁面做測試、Model fine-tune

回覆下方也會顯示chatbot參考了哪些資料

 

Prompt logs 

 每個對話都可以點擊Prompt log來查看prompt的運作方式

可以確保LLM是否有依照指示來回應

 

開場白 & 自動推薦

dify-ai-feature-manage

設定頁的右下有個Feature Manage按鈕

點下去就可作一些功能設定

這時候就可以設定一個開場白(Conversation Opener)或是自動推薦聊天(Follow up)

 

Conversation Opener可預先設定常見問題

dify-ai-opening-questions

 

設定完就會長這樣

預設會長出常見問題

user可以直接點擊問題來發問

conversation-opening-and-follow-up-preview

 

Agent App

前面講的都是基本的chatbot

如果要進階一點可使用Agent類型

它可以掛tools給chatbot使用

例如下方的Agent我給它掛了維基百科Google Search等工具

LLM的知識範圍就更加廣

不只侷限在Dify內的知識庫內

dify-ai-agent

 

將Chatbot嵌入Web

這個應該是最好用最方便的功能

簡單設定就可以將chatbot掛進Web前端

 

首先點擊右上Publish按鈕

選擇Embed Intro Site

embed-intro-website

 

它提供三種類型

  • iframe
  • 使用js產出懸浮在網站上的chatbox
  • Chrome Extension

dify-ai-ebmed-intro-website-type

 

我選擇的是懸浮的類型

以下是Demo影片

 

還有很多沒講到的

像是其實dify的app建立出來後

預設都會有API可以串

有API的話等於什麼事情都可以做

dify-app-build-in-api

  

Bar chart tools

其實它有內建的chart工具

可以直接在聊天室產生chart回應

不過今天用太兇了已經到了Rate limit

只好先截圖設定的部份

dify-ai-chart

 

總結

Dify.ai真的太多太好用的功能

讓一般RD進入AI的門檻降低很多

即使只會網站前端開發的朋友

也可以快速拉一個chatbot

然後馬上就有一個iframe或js可以讓你直接掛在前端

 

功能真的太多介紹不完

這篇可能講到的不到全部功能的10%

更複雜好用的是Workflow App

Workflow可以串起超複雜的大型應用

還可以在app中串其他app一直疊上去開發

以後有機會再來寫一篇Workflow的文章

 

Refs