Dify AI實做太陽能領域AI Chatbot
本篇文章以太陽能產業為情境
透過Dify.ai建立一個太陽能領域AI Chatbot
文章內的LLM model並未經過fine-tune
AI回應內容或資料來源可能有誤
截圖、影片、實驗結果僅供參考
本文章重點為Dify.ai開發之應用筆記
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
設定好Model後之後就可以開始建立App
App分為以下幾種類型
- Chatbot
- Agent
- Text Generator
- Chatflow
- Workflow
這篇先只介紹Chatbot跟Agent
知識庫(Knowledge)
在Dify中最強大的就是知識庫
使用知識庫就可以不用自己搞RAG
可以直接將一些專業領域的資料餵給LLM
讓LLM可以根據這些資料做出正確的回應或判斷
比較不會產生幻覺或亂回答一通
支援的資料格式
知識庫支援的資料格式也很多樣
除了基本的TXT, MARKDOWN, MDX, PDF, HTML, XLSX, XLS, DOCX, CSV, MD, HTM之外
還可以使用notion或外部網站來源(用Firecrawl爬蟲)
建立資料
假設需要建立一個App
並且讓LLM有太陽能相關的知識資料
可以上傳一些太陽能相關的法規PDF
或是網站資料HTML內容
上傳資料後
會需要做一些Text preprocessing及cleaning
一開始可以先不特別設定
後續要對LLM做fine-tune的時候再慢慢調整即可
Retrieval Testing
以上為簡易測試範例
透過Retrieval Testing
可以先針對資料做一些測試
看有沒有達到預期的結果
大致上就是依照個方式
上傳各種資料到知識庫上
Chatbot
可快速產生LLM chatbot
以上面截圖為例
只要設定好Instructions跟Context(知識庫內容)
然後選好LLM Model就差不多了
其實很簡單
Prompt Generator
Instructions的部份可以自己簡單文字敘述
或是透過Instructions區塊右上的那個Generate按鈕
直接使用Prompt Generator
將簡單的問題直接丟進去
產生結構化的prompt
然後再依照實際需求自行調整
從上方截圖可以看到
可以先丟出基本的prompt
然後產生出下方這種結構化的prompt
```xml
<instruction>
請扮演一位太陽能專家,熟悉相關法規及知識,負責解答一般民眾對於太陽能、電廠及綠能相關議題的疑問,並消除民眾對於太陽能電廠皆為黑心廠商的刻板印象。
請根據以下步驟回答民眾提問:
步驟一:仔細閱讀民眾提出的問題
步驟二:判斷問題是否屬於「太陽能」、「電廠」、「綠能」相關議題。
步驟三:如果是相關議題,請以專業且易懂的方式解答,內容需包含相關法規及知識,並避免使用過於專業的術語。同時,需積極地消除民眾對於太陽能電廠的負面刻板印象,例如:說明業界的良性發展、政府的相關規範、以及選擇優良廠商的建議等。
步驟四:如果不是相關議題,請回答:「超出太陽能領域範圍,無法提供資訊」。
步驟五:確保你的回答不包含任何 XML 標籤。
<example>
民眾提問:「我想在自家屋頂安裝太陽能板,請問有什麼需要注意的法規嗎?」
你的回答:您好!在自家屋頂安裝太陽能板,需要考慮以下法規:首先,您需要確認您的屋頂結構是否符合安裝要求,並向相關單位申請建築執照。其次,您需要選擇合格的太陽能系統安裝商,並確保其具有相關的專業資格和保險。此外,您還需要了解相關的電網接入規定,並確保您的系統能夠安全可靠地運行。 關於選擇廠商,建議您多方比較,選擇具有良好信譽和豐富經驗的廠商,並仔細閱讀合約條款,避免日後產生糾紛。 目前政府也積極推動綠能政策,提供許多補助和優惠措施,您可以上網查詢相關資訊。
民眾提問:「請問附近要蓋一個新的購物中心,會影響到我的房價嗎?」
你的回答:超出太陽能領域範圍,無法提供資訊。
</example>
</instruction>
Debug & Preview
右上角的按鈕展開即可儲存或發布
也可以直接在設定頁面做測試、Model fine-tune
回覆下方也會顯示chatbot參考了哪些資料
Prompt logs
每個對話都可以點擊Prompt log來查看prompt的運作方式
可以確保LLM是否有依照指示來回應
開場白 & 自動推薦
設定頁的右下有個Feature Manage按鈕
點下去就可作一些功能設定
這時候就可以設定一個開場白(Conversation Opener)或是自動推薦聊天(Follow up)
Conversation Opener可預先設定常見問題
設定完就會長這樣
預設會長出常見問題
user可以直接點擊問題來發問
Agent App
前面講的都是基本的chatbot
如果要進階一點可使用Agent類型
它可以掛tools給chatbot使用
例如下方的Agent我給它掛了維基百科跟Google Search等工具
LLM的知識範圍就更加廣
不只侷限在Dify內的知識庫內
將Chatbot嵌入Web
這個應該是最好用最方便的功能
簡單設定就可以將chatbot掛進Web前端
首先點擊右上Publish按鈕
選擇Embed Intro Site
它提供三種類型
- iframe
- 使用js產出懸浮在網站上的chatbox
- Chrome Extension
我選擇的是懸浮的類型
以下是Demo影片
還有很多沒講到的
像是其實dify的app建立出來後
預設都會有API可以串
有API的話等於什麼事情都可以做
Bar chart tools
其實它有內建的chart工具
可以直接在聊天室產生chart回應
不過今天用太兇了已經到了Rate limit
只好先截圖設定的部份
總結
Dify.ai真的太多太好用的功能
讓一般RD進入AI的門檻降低很多
即使只會網站前端開發的朋友
也可以快速拉一個chatbot
然後馬上就有一個iframe或js可以讓你直接掛在前端
功能真的太多介紹不完
這篇可能講到的不到全部功能的10%
更複雜好用的是Workflow App
Workflow可以串起超複雜的大型應用
還可以在app中串其他app一直疊上去開發
以後有機會再來寫一篇Workflow的文章
Refs
- Deploy with Docker Compose
- Knowledge Base
- Application Type
- Workflow
- Dify Helm Chart
- Conversation Application