Programa
Neste artigo, explicarei passo a passo como você pode usar o Flowise para criar um agente de IA que possa responder a perguntas com base em um conjunto de dados CSV.
O Flowise é uma ferramenta útil para quem deseja criar agentes de IA sem se envolver em codificação complexa. O Flowise tem uma abordagem de pouco código e permite que nos concentremos mais na tarefa em questão do que nos detalhes técnicos.
Recentemente, observei um aumento nas ferramentas projetadas para criar agentes de IA. Essas ferramentas se tornaram mais acessíveis e fáceis de usar, permitindo que todos criem sistemas inteligentes sem a necessidade de grandes habilidades técnicas. Se você estiver interessado em saber mais sobre essas ferramentas, confira também estes tutoriais:
- n8n: Um guia com exemplos práticos
- Langflow: Um guia com projeto de demonstração
- Dify AI: Um guia com projeto de demonstração
O que é o Flowise?
O Flowise é uma ferramenta projetada para nos ajudar a criar agentes de IA por meio de uma interface simples de arrastar e soltar. Ele funciona permitindo que você conecte diferentes blocos, que representam várias funções, para criar um fluxo de trabalho personalizado. Cada bloco pode ser configurado para executar uma ação específica.
Por exemplo, há blocos conhecidos como blocos LLM que são usados para enviar uma mensagem a um modelo de linguagem grande. Há também blocos de funções que nos dão a capacidade de executar funções JavaScript personalizadas, permitindo operações ainda mais personalizadas.
Ao vincular esses blocos, as informações fluem de um bloco para o outro, processando e transformando os dados passo a passo. Essa abordagem modular facilita a criação de agentes de IA sem conhecimento profundo de programação, pois podemos nos concentrar no projeto do fluxo de trabalho e na configuração das ações necessárias.
Criando um agente de IA de analista de dados com o Flowise
Vamos detalhar o processo de criação de um agente de IA analista de dados usando o Flowise. Este guia abordará a inscrição no Flowise, a criação de um fluxo de trabalho personalizado e a utilização de vários blocos para criar um agente interativo que possa analisar conjuntos de dados.
Etapa 1: Criar uma conta no Flowise
Comece visitando esta página de registro da Flowise e criar uma conta. Preencha os detalhes necessários e siga as instruções enviadas para o seu e-mail para verificar e ativar sua conta.
Etapa 2: Configuração do banco de dados
Agora que temos nossa conta do Flowise pronta, é hora de configurar o banco de dados que usaremos. Precisamos de um banco de dados para armazenar os dados que queremos analisar.
Usaremos o SingleStore, um provedor de banco de dados SQL popular e fácil de usar, para gerenciar nossos dados. Vamos examinar essas etapas:
- Comece acessando o site da site da SingleStore.
- Inscreva-se em uma nova conta no SingleStore.
- Com uma conta ativa no SingleStore, a próxima etapa é carregar o conjunto de dados com o qual você trabalhará. Para este exemplo, estamos usando um conjunto de dados focado nos hábitos de mídia social dos alunos, que pode ser encontrado no Kaggle. Certifique-se de que você baixou o arquivo do conjunto de dados do Kaggle e o carregou no SingleStore.
- Depois que você fizer o upload do conjunto de dados, o SingleStore gerará automaticamente uma tabela de banco de dados a partir dele. Essa tabela formará a base de nossa análise de dados, preparando as informações para que o agente de IA da Flowise possa interagir com elas.
Etapa 3: Navegue até a seção de fluxos de bate-papo
Depois de fazer login, vá para o painel e encontre a seção "Chatflows". Clique em "Add New" (Adicionar novo) para começar a criar um novo fluxo de trabalho.
Etapa 4: Crie uma função personalizada para carregar as informações da tabela.
Nessa etapa, você deve escrever uma função personalizada para recuperar informações sobre a tabela, como sua descrição e os nomes das colunas. Esses dados são essenciais para que nosso agente de IA compreenda a estrutura do conjunto de dados que ele consultará.
- Crie um bloco de funções personalizado.
- Cole o código a seguir no editor de blocos de função:
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();
Na parte superior da função, precisamos definir o valor connectionUrl
. Isso pode ser encontrado no SingleStore, na guia Deployments (Implantações).
A string de conexão tem a seguinte aparência:
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
A primeira parte, françois-19ecc
no meu caso, é o nome de usuário. Logo depois, há um espaço reservado para a senha, , que precisamos substituir.
Essa função se conecta ao banco de dados do SingleStore e obtém as informações da coluna para a tabela. Ele tem duas entradas:
tableName
: O nome da tabelatableDescription
: A descrição da tabela.
Você deve configurá-las clicando no botão "Input Variables" (Variáveis de entrada) no nó do código personalizado. As variáveis podem ser acessadas no código prefixando seu nome com $
.
No meu caso, a tabela foi nomeada dataset
quando criada no SingleStore. Você deve usar o nome definido quando fez o upload do arquivo CSV.
Etapa 5: Criar um nó de modelo de prompt
É nesse nó que criamos as perguntas que orientam nosso agente de IA. Conecte esse nó à sua função personalizada.
- Crie um nó de modelo de prompt.
- Insira o seguinte prompt:
Based on the SQL table information and the user's questions, return a SQL query that answers that question.
TABLE INFORMATION: {tableInformation}
QUESTION: {question}
O prompt tem dois espaços reservados: {tableInformation}
e {question}
. O question
é o prompt enviado pelo usuário, enquanto o tableInformation
é a saída da função que definimos na etapa anterior.
Esses valores de espaço reservado devem ser configurados clicando no botão "Formatar valores de prompt" no nó do modelo de prompt.
Etapa 6: Link para um bloco de cadeia LLM
Agora, conectamos o nó do modelo de prompt a um bloco de cadeia LLM, que interpretará o prompt e gerará uma consulta SQL a partir dele. Essas são as etapas que precisamos seguir:
- Adicione um bloco de cadeia LLM.
- Inclua um bloco de modelo configurado para usar o OpenAI e conecte-o ao bloco de cadeia LLM na entrada "Language Model".
- Para configurar o modelo OpenAI, você precisará configurar uma chave de API OpenAI. Se você não tiver um, pode criar uma aqui.
- Conecte o bloco de modelo de prompt à entrada "Prompt".
Etapa 7: Usar um bloco de variáveis definido
Para armazenar a consulta SQL gerada para uso posterior, crie um bloco de variáveis de conjunto e vincule-o à saída do bloco de cadeia LLM.
Etapa 8: Executar a consulta SQL
Envie a consulta SQL para um novo bloco de código personalizado para executá-la no banco de dados.
- Crie outro bloco de código personalizado.
- Digite o seguinte código:
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)}`
}
Lembre-se de definir o valor connectionUrl
. É o mesmo que usávamos antes.
Essa função tem uma entrada, que é a consulta que queremos executar, e é acessada no código usando $query
.
Etapa 9: Criar outro modelo de prompt
Esse modelo é usado para formatar a resposta que o agente de IA apresentará ao usuário com base nos resultados da consulta.
- Crie um novo modelo de prompt.
- Use esse prompt:
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}
Esse prompt tem três espaços reservados:
query
: A consulta SQL gerada pelo LLM, que é obtida pela conexão do nó variável.queryResult
: O resultado da consulta, que é calculado pelo nó da função personalizada anterior.question
: O prompt inicial do usuário.
Etapa 10: Bloco final da cadeia LLM
Por fim, conecte esse modelo de prompt a um novo bloco de cadeia do LLM, que usará o prompt para formular a resposta. Você pode conectar isso ao mesmo bloco de modelo OpenAI usado anteriormente.
Aqui está o fluxo final do agente:
Com essas etapas concluídas, nosso agente de IA está pronto. Ele pode aceitar perguntas, gerar consultas SQL para recuperar dados relevantes e fornecer respostas claras e concisas.
Conversando com o agente analista de dados
O agente agora está pronto para ser usado. Para conversar com ele, clique no botão roxo de bate-papo no canto superior direito:
Vamos testá-lo perguntando quantas respostas a pesquisa obteve:
Observe que o agente inclui a consulta na resposta devido à forma como o último prompt foi projetado. Vamos fazer algumas estatísticas sobre os dados:
Aqui está outro exemplo:
Minhas ideias sobre a Flowise
Depois de experimentar várias ferramentas de criação de agentes de IA, minha experiência com o Flowise se mostrou um tanto frustrante. Um problema recorrente que enfrentei foi a exclusão acidental de algumas configurações de variáveis, o que levou o agente a se comportar de forma irregular sem uma explicação clara do motivo. Isso geralmente tornava a solução de problemas uma tarefa tediosa.
Além disso, o Flowise não tem um ponto de partida claro para seus fluxos de agente, o que torna difícil acompanhar e entender como o agente funciona. Isso pode ser particularmente assustador para quem está começando a criar sistemas de IA. Além disso, o Flowise deixa a desejar em termos de visualização fácil de resultados intermediários ou de teste de nós isoladamente. Isso dificulta a identificação de problemas ou o refinamento eficaz do fluxo de trabalho.
Também achei difícil ver as configurações dos nós em um relance. Por exemplo, os nós de código personalizado que usamos definiram variáveis de entrada, mas não é visível que esse seja o caso. Precisamos clicar nessa seção do nó para visualizá-la. Isso faz com que seja difícil entender o fluxo só de olhar para ele.
Conclusão
Embora o Flowise ofereça uma interface promissora de baixo código para a criação de agentes de IA, ele tem alguns problemas de usabilidade que o tornam mais difícil de usar do que ferramentas semelhantes, especialmente para aqueles que buscam uma experiência mais suave e intuitiva. Apesar desses desafios, o conceito da Flowise tem potencial e, com alguns aprimoramentos, pode se tornar uma ótima ferramenta para a criação de soluções de IA.