人工智能技术持续发展,聊天应用的功能也日趋丰富。近日,Dify 平台推出一项引人注目的更新,其新发布的聊天应用能够直接在对话中实现数据可视化分析,为用户带来更直观、更高效的交流体验。尽管文章标题提及该功能“效果直逼 ChatGPT”,但实际应用仍有差距,目前更侧重于技术演示和功能探索。该文章缺少原理解读,推荐阅读 Dify 工作流与 AI 智能助理重塑企业数据应用模式 。
ChatGPT 的数据可视化方案
在数据可视化方面,一些领先的 AI 产品,如 ChatGPT,已经进行了积极探索。据悉,ChatGPT 的数据可视化方案,同样是将用户指令转化为 Python 代码,在后台执行后于前台展示结果。但其生成的饼图在中文显示方面存在兼容性问题。
Dify 低代码平台的数据可视化方案
Dify 平台则另辟蹊径,利用其低代码特性,用户无需编写复杂代码,即可快速搭建具备数据可视化功能的聊天应用。
基于 ChatGPT 的实现思路,Dify 平台提供了一种简便方案:将之前使用的 Pandas 代码指令调整为直接生成 Pyecharts 代码,在后台沙箱环境运行后,获取生成的图片或 HTML 文件。这是一种相对简便的实现方式。
但本文将侧重介绍 Dify 这一低代码智能体设计平台,展示其如何便捷地实现数据可视化,因此我们将继续优化之前的工作流设计,充分利用 Dify 内置的工具。
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 代码生成器直接生成的代码存在一些小问题,例如返回结果只包含一个变量,而 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
库进行强制类型转换。否则,将出现如下错误。
工作流运行与结果展示
现在,可以完整运行工作流,查看最终结果。
至此,工作流已成功配置,能够根据用户的数据分析需求,生成饼图结果。
工作流扩展:支持多种图表类型
然而,如果用户需要生成条形图或折线图,则需要对当前工作流进行扩展。
优化的思路是:首先,需要增加“参数提取”节点,使大模型能够从用户指令中识别可视化图表的需求,例如饼图或柱状图。 其次,在数据处理和饼图可视化节点之间添加“条件分支”节点,根据参数提取结果,选择不同的分支路径。 最终的工作流设计如下图所示。
下面我们详细介绍参数提取器的配置方法。 从配置界面可以看出,主要包含以下三个方面:
- 输入变量: 指定大模型从用户指令文本中提取参数。
- 提取参数: 定义需要提取的参数,即用户指令中是否包含图表类型信息。若提取到相关信息,则赋值给新的变量
exl_type
。 - 指令: 参数提取器向大模型发送的提示词。对于大模型而言,参数提取任务相对简单。
如此一来,后续的“条件分支”节点将由大模型根据提取的参数 exl_type
的值来决定执行路径。“条件分支”节点看似复杂,实则原理简单,即根据大模型输出的图表类型,选择相应的分支,生成对应的图表。
接下来,我们演示整体工作流的运行效果。 结果显示,效果良好,表明该工作流可以应用于大模型聊天应用中。
将工作流发布为 Dify 工具并集成到 Agent 应用
为了将此工作流集成到 Dify 中,首先需要将其发布为 Dify 的内置工具。 在工作流界面,点击右上角的“发布”按钮,然后选择“发布为工具”。
注意:此处为关键步骤。 根据经验,发布为工具的工作流,其参数格式必须设置为 text-input
类型。 只有这样,在 Dify Agent 应用中,大模型才能通过 Function Call 正确调用该工具。 否则,大模型将忽略此工具。 因此,务必将工作流的输入变量调整为下图所示的 text-input
类型,然后再发布为工具。
完成上述步骤后,即可将数据分析工作流作为 Function Call 集成到 Dify 中。 接下来,在 Dify 中创建一个 Agent 应用。 对于 Agent 应用不熟悉的读者,可以先按照步骤操作,后续会逐步深入理解其原理和应用。 之后,将撰文详细对比 Dify 中不同应用类型的区别。
接下来,只需将发布好的工具添加到 Agent 应用中即可。 至此,配置完成。 直接进行预览和调试,查看最终效果。
通过以上步骤,Dify 平台成功实现了聊天应用与数据可视化功能的集成,为用户提供了一种全新的交互体验。 借助 Dify 的低代码特性,用户可以快速构建功能强大的智能应用,无需深入繁琐的编码工作,即可享受 AI 技术带来的便利。