跳至主要内容

Flowise AI:含演示项目的指南

学习如何使用 Flowise(基于工作流的低代码工具)构建一个能基于 CSV 数据集回答问题的 AI 代理。
· 12分钟 阅读

使用 AI 探索

在本文中,我将一步步讲解如何使用Flowise来构建一个能够基于 CSV 数据集回答问题的 AI 代理。

Flowise 对于想要构建 AI 代理但又不想陷入复杂编码的人来说是一个顺手的工具。它采用低代码思路,让我们更多地专注于要完成的任务,而不是技术细节。

最近,我看到用于构建 AI 代理的工具激增。这些工具越来越易用、友好,使每个人都无需大量技术背景就能创建智能系统。如果您有兴趣进一步了解这些工具,也可以看看以下教程:

什么是 Flowise?

Flowise 是一款通过简单的拖放界面帮助我们创建 AI 代理的工具。它的工作方式是允许我们连接代表不同功能的各类模块,构建自定义工作流。每个模块都可以配置为执行特定操作。

例如,有些模块被称为 LLM 模块,用于向大型语言模型发送消息。也有函数模块,赋予我们执行自定义 JavaScript 函数的能力,从而实现更贴合需求的操作。

通过将这些模块连接起来,信息会从一个模块流向下一个模块,逐步处理并转换数据。这种模块化方法让我们无需深厚的编程知识也能轻松构建 AI 代理,因为我们可以专注于设计工作流并配置必要的动作。

使用 Flowise 构建数据分析师 AI 代理

下面我们来分解使用 Flowise 构建数据分析师 AI 代理的流程。本指南将涵盖注册 Flowise、构建自定义工作流,以及使用各种模块创建可分析数据集的交互式代理。

步骤 1:在 Flowise 上创建账户

首先访问这个Flowise 注册页面并创建一个账户。填写所需信息,并按照发送至您邮箱的说明进行验证与激活。

步骤 2:数据库设置

现在我们已经准备好了 Flowise 账户,接下来要设置要使用的数据库。我们需要一个数据库来存储要分析的数据。

我们将使用 SingleStore,这是一家广受欢迎且用户友好的 SQL 数据库提供商,来管理数据。请按照以下步骤操作:

  1. 首先前往SingleStore 官网。
  2. 在 SingleStore 注册一个新账户。
  3. 激活 SingleStore 账户后,下一步是上传我们将使用的数据集。本例中,我们使用的是一个聚焦学生社交媒体习惯的数据集,来源于Kaggle。请确保先从 Kaggle 下载数据集文件,再将其上传至 SingleStore。

将文件加载到 SingleStore

  1. 上传数据集后,SingleStore 会自动据此生成一张数据库表。该表将成为我们数据分析的基础,使 Flowise AI 代理可以与之交互。

步骤 3:进入 chatflows 区域

登录后,进入仪表盘并找到 "Chatflows" 区域。点击 "Add New" 开始创建新的工作流。

在 Flowise 中创建新的 chatflow

步骤 4:创建自定义函数以加载表信息

此步骤需要编写一个自定义函数以检索表的信息,例如其描述及列名。这些数据对我们的 AI 代理理解所要查询的数据集结构至关重要。

  1. 创建一个自定义函数模块。

添加自定义函数模块

  1. 将以下代码粘贴到函数模块编辑器中:
const mysql = require('mysql2/promise');

const tableName = $tableName;
const tableDescription = $tableDescription;
const connectionUrl = "<PASTE_YOUR_CONNECTION_STRING_HERE>" 

async function main() {
  try {
    const pool = mysql.createPool(connectionUrl);
    const q = 
    DESCRIBE ${tableName};
    ;
    const [rows] = await pool.query(q);
    const fields = rows.map((row) => ${row.Field} of type ${row.Type}).join("\n");
    const tableInformation = Table name: ${tableName}\nTable description:\n${tableDescription.trim()}\nColumns:\n${fields.trim()};
    return tableInformation;
  } catch(error) {
    return String(error);
  }  
}

return main();

在函数开头,我们需要设置 connectionUrl 的值。可在 SingleStore 的 Deployments 选项卡中找到。

获取数据库连接信息

连接字符串类似如下所示:

françois-19ecc:<françois-19ecc Password>@svc-3482219c-a389-4079-b18b-d50662524e8a-shared-dml.aws-virginia-6.svc.SingleStore.com:3333/db_franois_88ec0

第一部分,在我的示例中是 françois-19ecc,表示用户名。紧接着是密码占位符 <françois-19ecc Password>,需要我们替换为实际密码。

该函数会连接到 SingleStore 数据库并获取表的列信息。它有两个输入:

  • tableName:表名
  • tableDescription:表的描述。

这些输入需通过点击自定义代码节点上的 “Input Variables” 按钮进行配置。在代码中可通过在变量名前加上 $ 来访问。

访问变量。

在我的例子中,该表在 SingleStore 上创建时命名为 dataset。您应当使用上传 CSV 文件时所设置的名称。

在 SingleStore 中检查表名。

步骤 5:创建提示模板节点

此节点用于编写引导 AI 代理的问题。将该节点连接到您的自定义函数。

  1. 创建一个提示模板节点。

在 Flowise 中创建提示模板节点

  1. 插入以下提示:
Based on the SQL table information and the user's questions, return a SQL query that answers that question.
TABLE INFORMATION: {tableInformation}
QUESTION: {question}

在 Flowise 中将自定义函数连接到提示模板

该提示包含两个占位符:{tableInformation} 和 {question}。其中 question 是用户提交的提示,而 tableInformation 是我们在上一步定义函数的输出。

需要在提示模板节点上点击 “Format Prompt Values” 按钮来配置这些占位符的取值。

在 Flowise 中配置提示变量

步骤 6:连接到 LLM chain 模块

现在将提示模板节点连接到一个 LLM chain 模块,由其解释提示并据此生成 SQL 查询。我们需要执行以下步骤:

  1. 添加一个 LLM chain 模块。
  2. 添加一个配置为使用 OpenAI 的模型模块,并将其连接到 LLM chain 模块的 “Language Model” 输入上。
  3. 要配置 OpenAI 模型,您需要设置 OpenAI API 密钥。如果还没有,可以在此创建。
  4. 将提示模板模块连接到 “Prompt” 输入。

在 Flowise 中配置 LLM Chain 节点

步骤 7:使用 set variable 模块

为便于后续使用,创建一个 set variable 模块来存储生成的 SQL 查询,并将其连接到 LLM chain 模块的输出。

在 Flowise 中使用 set variable 模块存储值

步骤 8:执行 SQL 查询

将 SQL 查询发送到一个新的自定义代码模块,在数据库上执行它。

  1. 再创建一个自定义代码模块。
  2. 输入以下代码:
const mysql = require('mysql2/promise');

const connectionUrl = "<PASTE_THE_SAME_URL_USED_BEFORE>";

function formatQuery() {
  // This function is used to clean the query provided by ChatGPT 
  // by removing markdown quotes
  const q = $query;
  let lines = q.trim().split(/\r\n|\r|\n/);
  if(lines[0].startsWith("")) {
    lines = lines.slice(1, lines.length - 1);
  }
  return lines.join("\n").trim()
}

const q = formatQuery();
try {
  const pool = mysql.createPool(connectionUrl);
  const [rows] = await pool.query(q);
  return rows;
} catch(error) {
  return Query: ${q}\nError:${String(error)}`
}

请记得设置 connectionUrl 的值,与之前使用的一致。

该函数只有一个输入,即我们要执行的查询,在代码中通过 $query 访问。

在自定义函数节点中访问变量

步骤 9:创建另一条提示模板

此模板用于根据查询结果,格式化 AI 代理将呈现给用户的答案。

  1. 创建一个新的提示模板。
  2. 使用以下提示:
Based on the question and the query result, provide an answer to the user's question. Always show the query to the user.
QUERY: {query}
QUERY RESULT: {queryResult}
QUESTION: {question}

该提示包含三个占位符:

  • query:由 LLM 生成的 SQL 查询,通过连接变量节点获得。
  • queryResult:查询结果,由前一个自定义函数节点计算得出。
  • question:用户最初的提问。

在 Flowise 中连接到第二个用于生成 SQL 查询的提示模板

步骤 10:最终的 LLM chain 模块

最后,将此提示模板连接到一个新的 LLM chain 模块,由其根据提示生成回复。您可以复用先前使用的同一个 OpenAI 模型模块。

以下是最终的代理流程:

Flowise 中的最终流程

完成以上步骤后,我们的 AI 代理就已就绪。它可以接收问题、生成 SQL 查询以检索相关数据,并给出清晰、简明的答案。

与数据分析师代理聊天

代理现在可以使用了。要与它对话,请点击右上角的紫色聊天按钮:

与 AI 代理聊天

我们来测试一下,先问问这份问卷收到了多少份回应:

使用 Flowise 的 AI 代理示例

请注意,由于最后一条提示的设计方式,代理会在回复中附上查询。我们再来询问一些关于数据的统计信息:

使用 Flowise 的 AI 代理示例

再来看一个示例:

使用 Flowise 的 AI 代理示例

我对 Flowise 的看法

在尝试了多款用于构建 AI 代理的工具后,我对 Flowise 的体验有些令人沮丧。我反复遇到的问题之一是,不小心删除了某些变量配置,导致代理表现异常,却很难明确原因。这常使得排错过程变得繁琐。

此外,Flowise 的代理流程缺乏清晰的起点,使得跟踪与理解代理的工作方式颇为困难。对于刚接触构建 AI 系统的人来说尤为如此。再者,Flowise 在便捷查看中间结果或对单个节点进行独立测试方面也有所不足,这使得定位问题或有效优化工作流变得不易。

我还发现很难一目了然地查看节点配置。比如,我们使用的自定义代码节点定义了输入变量,但这一点并不直观可见。必须点击节点的相应区域才能看到。这使得仅通过观察流程来理解其运作变得困难。

结论

虽然 Flowise 为创建 AI 代理提供了一个很有前景的低代码界面,但在易用性方面存在一些问题,使其相较于类似工具更难上手,尤其是对于追求更流畅、更直观体验的用户而言。尽管存在这些挑战,Flowise 的理念依然具有潜力,随着后续改进,它有望成为构建 AI 解决方案的优秀工具。

François Aubry

作者

François Aubry

全栈工程师,CheapGPT 创始人。我一直热爱教学。从学生时代起,我就积极寻找机会为同学提供辅导与帮助。这份热情促使我攻读博士学位,并在此期间担任助教,以支持我的学术追求。那些年里,我在传统课堂环境中收获了极大的成就感,既建立联系也促进学习。随着在线学习平台的兴起,我也看到了数字教育的变革潜力。事实上,我曾参与我们大学一款此类平台的建设。我致力于将传统教学理念与创新的数字方法相融合。我的热情在于打造既有吸引力、信息量充足,又能让当代学习者轻松获取的课程。

主题