Dify 搭建私有數據可視化智能體,效果直逼 ChatGPT 原創
前幾天寫的文章??《Trae + Dify 10分鐘構建 Data McpServer 與 Agent ,和 Excel 說再見!》??,跟大家一起實現了簡單的大模型數據處理,返回的最后結果只是json格式的數據。今天我們做一個完整的聊天應用,可以在聊天結果中實現數據可視化分析。
標題說效果直逼ChatGPT,還是有點差距的,這差距多大呢,差不多一光年吧!畢竟我們今天做的還只是玩具。
我們先一起來看一下ChatGPT如何實現數據可視化結果的呈現。
很顯然,ChatGPT的思路和我們一樣,先將用戶的提問轉為Python代碼,后臺運行后,在前臺顯示。不過最后做的餅圖對中文不太友好呀!
按照這個思路,我們其實再把前幾天的Pandas代碼生成的提示詞修改成直接寫生成Pyecharts的代碼,后臺沙箱運行后,獲取最后生成的圖片或者Html文件,這是個比較容易的方案。
但是我不太想講太多代碼,而是想讓大家多了解一下Dify這種低代碼智能體設計平臺是如何實現簡單的可視化的。這就需要我們繼續編排之前的工作流。
下面就是我們要用到的Dify內置的圖表生成工具,很容易就能清楚這三種圖表傳入的參數要求,都是字符串且格式一樣。
下面這個Json數據,是我們上一個教程,工作流輸出的最后結果格式,不能直接將其傳入到上面的dify圖表格式中。所以我們需要修改之前的工作流,對輸出結果進行處理。
{"status": "success", "data_result": {"學校": 2, "互聯網": 1, "物流": 1, "硬件": 1, "教育機構": 1, "傳統零售": 1, "傳統媒體": 1, "制造業": 1}}
這里面直接選用了最省事的Python代碼格式轉化,也就是需要增加這個代碼執行的節點。在里面填寫需要執行的Python代碼。
這個Python代碼我們直接問大模型就可以,Dify自帶代碼生成器,我們只需要描述清楚需求就可以了。下面是我輸入的代碼生成提示詞。
{"status": "success", "data_result": {"學校": 2, "互聯網": 1, "物流": 1, "硬件": 1, "教育機構": 1, "傳統零售": 1, "傳統媒體": 1, "制造業": 1}} 邊寫一段Pytho函數代碼,,接受json輸入,將data_result的所有key值拼接為一個字符串,每個key之間用 ";" 分隔,賦值到變量exl_ key,將data_result的所有value值拼接為一個字符串,每個value之間用 ";" 分隔,賦值到變量exl_value,將exl_key exl_value返回
直接生成的代碼還是有點小問題的,返回的變量只有一個,而Dify的餅圖工具需要兩個變量,所以我們修改了return語句,返回結果必須是dict。
import json
def main(data: dict) -> dict:
data = json.loads(data)
exl_key = ";".join(data["data_result"].keys())
exl_value = ";".join(map(str, data["data_result"].values()))
return {'exl_key': exl_key, 'exl_value': exl_value}
上面的代碼其實有個大坑,如果大模型生成的數據格式不是{key:value,key,value}這種格式,這種代碼會報錯,這個我們下次再解決,這次先實現。
這里還有一個易錯點是代碼執行起接受的輸入變量格式的問題,默認傳入的是字符串,需要使用json庫強制轉化一下。不然會報下面的錯誤。
OK ,現在我們可以整體跑一遍工作流看一下結果了。
大功告成,這樣工作流就可以根據用戶的分析需求,生成餅圖的結果了。
但是,如果用戶想看條形圖、折線圖該怎么實現呢。這里需要對工作流進行改進了。
第一是增加一個節點——參數提取,讓大模型從用戶的提示詞中查找可視化圖表的需求,是做成餅圖和柱狀圖。
第二是增加在數據處理和可視化餅圖之間增加條件分支節點,根據參數的提取結果,選擇不同的分支。最后工作流的效果如下。
我們下面先來看參數提取器怎么設置。其實從下面的設置我們可以看到,有三個地方。
1.輸入變量是指大模型會從用戶的提示詞這段文本中提取出需要的參數。
2.提取啥參數,就是用戶的提示詞中有沒有提到想要什么樣的圖表結果,如果能提取到,賦值到新的變量exl_type。
3.指令就是參數提取器給大模型的提示詞,這對大模型來說小菜一碟。
這樣下一個條件分支的節點就由大模型來決定了。條件分支這個地方,看著復雜,其實很簡單,就是判斷大模型給出的圖形類型,也就是上一步新增的變量exl_type的值是啥,然后生成對應的圖表即可。
下面我們再看一下整體工作流的運行效果。
效果還是非常不錯的,那我們就可以把這個工作流用在大模型聊天里面了!
我們可以先將這個工作流發布為dify的內置工具。點擊工作流右上方的發布,點擊最下方發布為工具。
注意這里是重點,敲黑板了 !這是我當小白的時候,踩過的最大的坑,完全是自己試出來的。發布為工具的工作流,參數格式必須是文本text-input,Dify Agent應用中,大模型才能Function Call調用,不然大模型是忽略這個工具的!
所以你的工作流中的輸入變量要調整成下面這樣!再發布為工具!
OK ,接下來我們就要把數據分析這個工作流當做Function Call了。在dify中創建Agent應用,不懂沒關系,照著做,后面見多了就明白了。我后面也會寫文仔細對比這幾個類型的區別。
然后不需要做什么,把工具添加上就行了。
這樣就大功告成了!直接預覽調試,我們直接看結果吧!
到此,我們已經初步完成了數據可視化智能體的構建,還有很多細節工作需要去優化,我們下一期再詳細說。
本文轉載自公眾號九歌AI大模型 作者:九歌AI
