从零到一,用 Dify 打造 NL2SQL
最近AI的热度持续走高,朋友圈里时不时就有人晒出自己的新作品。我也没忍住,拿Dify这个平台试了试手,做了第一个AI应用。整体体验下来,最大的感受就是——确实方便。Dify的出现,某种意义上把构建AI应用的门槛拉低了一大截。未来能不能彻底解放双手不好说,但至少现在,它已经能帮我们解决不少实际问题了。
1. Dify 是什么
Dify 是个开源的大语言模型(LLM)应用开发平台。它把“后端即服务”和“LLMOps”的理念揉在了一起,让开发者能快速搭出生产级的生成式AI应用。哪怕你不是技术出身,也能参与AI应用的定义和日常数据运营。Dify 内置了构建LLM应用所需的关键技术栈——支持数百个模型、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,同时还提供了易用的界面和API。这等于帮开发者省下了大量重复造轮子的时间,可以更专注在创意和业务需求上。
1). 部署 Dify
Dify 提供了本地源码部署和 Docker Compose 两种方式。如果图省事,选后者就行。前提条件也不复杂,稍微准备一下环境就能上手。
安装步骤很直接,几步就能搞定。看到下面这样的提示,就说明启动成功了,接着用浏览器访问即可。
2). 配置 Dify
在使用 Dify 前,得先把大模型供应商配好。Dify 目前支持主流的模型供应商,比如 OpenAI 的 GPT 系列、Anthropic 的 Claude 系列等。不同模型的能力和参数类型各有差异,你可以根据实际场景挑选最合适的。当然,也可以自建模型,接入本地的大模型。Dify 按使用场景把模型分成了4类(如下图)。我自己配的时候用到了 DeepSeek 和通义千问两个模型。
2. 示例:打造 NL2SQL
下面通过一个具体示例,演示怎么用自然语言直接查数据库里的数据。
1). 需求分析
我们的核心诉求是:用自然语言访问数据库。拆开来看,整个过程大致分几个阶段:
- 用户用自然语言输入查询需求
- 知识库把查询需求和库内元信息整合起来
- LLM 分析后给出对应的 SQL 描述
- 把 SQL 发送给数据库执行
2). 创建应用
动手之前,先确定应用类型。Dify 里可以创建多种应用,根据需求来选就行。这里我们选的是 Chatflow。
3). 构建知识库
需要把数据库的字典信息整理成知识库,方便后面的 LLM 使用。Dify 支持多种构建方式,最简单的就是通过本地文件来构建。实际操作时,我绕了点弯路——摸索之后发现,可以通过注释信息构造出知识库文件再导入。比如下图中黄框的部分,就是根据表结构信息整理出来的。然后在 Dify 里导入生成知识库。这块我没太多经验,反复试了几次才搞定。
4). LLM 处理逻辑
LLM 节点是 Chatflow/Workflow 的核心节点。它能利用大语言模型的对话、生成、分类、处理等能力,根据给定的提示词处理各类任务,并且能在工作流的不同环节使用。这个节点也是整个流程里最核心的一环,主要完成以下几件事:
我们要做的就是用它来推导 SQL 语句。核心在于生成高质量的指导(提示词)。我参考了网上的一些实现,根据实际情况做了点微调。顺便提一句,不同模型的能力差别不小,Dify 提供了多模型联调的能力,可以对比着选最合适的那个。
5). 组件和数据处理
除了核心的 LLM 节点,需求里还要求执行数据库查询。这里直接引用第三方的工具,在 Dify 里安装就行。Dify 已经内置了非常丰富的工具,我单独装了数据库查询工具。另外,实践中发现 LLM 输出的 SQL 文本里会夹杂一些冗余字符,不能直接用,所以我加了一段代码执行逻辑(支持 Python、Ja vaScript 脚本)来做数据的清洗和微调。
6). 工作流绘制
最后把整个逻辑串起来:从开始 → 知识检索 → 语句生成 → 文本微调 → 语句查询 → 反馈结果。这些步骤通过上下文关联在一起。Dify 支持复杂的工作流关系,包括分支、判断、循环等。这里流程比较简单,串行执行就行。
7). 效果展示
整个工作流画完后,可以先调试运行,没问题再发布。简单测试一下——每次输入问题,都会调用工作流。在调试界面可以直观看到每个步骤的执行情况,如果有错误,参考输出信息就能快速定位。