近期 AI 大火,朋友圈很多都在晒成果。我也禁不住尝试,使用Dify这一开发平台做了第一个 AI 应用。整体感觉下来还是非常方便的,也是由于Dify的出现大大降低了构建 AI 应用的门槛,相信未来真的可以解放人的双手,让 AI 帮助我们解决更多的问题。
1. Dify 是什么
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。
1).部署Dify
Dify 提供本地源码部署和Docker Compose两种方式,这里选择后者比较简单一些。前提条件如下
安装步骤也比较简单,只需要几步1.PNG
2.png
当看到如下提示时,代表启动成功了,并可通过浏览器来访问
3.PNG
4.PNG
2).配置Dify
在使用 Dify 之前,需要先配置大模型供应商。Dify 目前已支持主流的模型供应商,例如 OpenAI 的 GPT 系列、Anthropic 的 Claude 系列等。不同模型的能力表现、参数类型会不一样,你可以根据不同情景的应用需求选择你喜欢的模型供应商。当然也可以自建,接入本地的大模型。在 Dify 中,按模型的使用场景将模型分为以下 4 类
5.png
如下图是自己做的配置,使用到了DeepSeek和通义千问
6.PNG
2. 示例:打造NL2SQL
下面通过Dify做个示例,演示使用自然语言来查看数据库中的数据。
1).需求分析
根据我们的诉求,通过自然语言来访问数据库,这里我们来分解下需求,大致可分为几个阶段
- 用户用自然语言方式输入查询需求
- 由知识库将查询需求与库内元信息整合
- 使用LLM来分析并给出SQL描述
- 将SQL发送给数据库执行
2).创建应用
开始前,我们先确定应用类型;Dify里可以创建多类应用,用户可根据自身需求来选择。这里根据需求,选择使用Chatflow
7.PNG
3).构建知识库
需要将数据库的字典信息整理为知识库,为后续LLM使用打好基础。Dify里支持多种构建知识库的方式,这里使用了最为简单的通过本地文件来构建。实践中,这里走了一些弯路,摸索了一下可通过注释信息构造出知识库文件然后导入。例如下图黄框就是根据表结构信息整理出来的
8.png
在Dify中导入生成知识库,这方面没有太多经验,反复尝试了几次
9.png
4).LLM 处理逻辑
LLM 节点是 Chatflow/Workflow 的核心节点。该节点能够利用大语言模型的对话/生成/分类/处理等能力,根据给定的提示词处理广泛的任务类型,并能够在工作流的不同环节使用。也是整个流程中最为核心的节点,其可完成下面功能
10.png
这里是使用LLM节点,完成推导SQL语句的过程。核心点在于为对话生成高质量的指导,这里参考了网上的实现做了微调。顺便说一句,不同模型的能力还是存在差异,Dify提供了一次针对多个模型的联调能力,可对比选择最为合适的模型。
11.png
5).组件和数据处理
除了上述核心节点外,需求中还描述需要实行数据库,这里直接引用第三方的工具,直接在Dify中安装即可。Dify中已经支持了非常丰富的工具可供使用。这里单独安装了数据库查询工具。
12.png
此外,在实践中还是发现从LLM中输出的SQL文本,不能直接使用,仍然存在一些冗余字符需要处理下,因此也引用了代码执行逻辑,其可以执行如Python、JavaScript的脚本来处理数据
13.png
6).工作流绘制
最终我们把整个逻辑串起来,从开始、知识检索、语句生成、文本微调、语句查询、反馈结果多个步骤,通过上下文关联起来。Dify中是可以支持复杂工作流关系,包括如分支、判断、循环等等。这个流程比较简单,串行执行就可以。
14.png
7).效果展示
整个流程绘制完毕后,可以调试运行,都没问题后发布即可。简单测试下
15.png
针对每次问题,都是调用工作流,在调试部分可以直观看到每个步骤的完成情况,如有错误可参考输出修改
16.png