Lernpfad
In diesem Artikel erkläre ich Schritt für Schritt, wie man Flowise einen KI-Agenten erstellt, der Fragen auf der Grundlage eines CSV-Datensatzes beantworten kann.
Flowise ist ein praktisches Tool für alle, die KI-Agenten entwickeln wollen, ohne sich in komplexem Code zu verheddern. Flowise verfolgt einen Low-Code-Ansatz und ermöglicht es uns, uns mehr auf die eigentliche Aufgabe als auf die technischen Details zu konzentrieren.
In letzter Zeit gibt es immer mehr Tools, mit denen man KI-Agenten erstellen kann. Diese Werkzeuge sind zugänglicher und benutzerfreundlicher geworden und ermöglichen es jedem, intelligente Systeme zu erstellen, ohne dass er über umfangreiche technische Kenntnisse verfügen muss. Wenn du mehr über diese Tools erfahren möchtest, schau dir auch diese Tutorials an:
- n8n: Ein Leitfaden mit praktischen Beispielen
- Langflow: Ein Leitfaden mit Demo-Projekt
- Dify AI: Ein Leitfaden mit Demo-Projekt
Was ist Flowise?
Flowise ist ein Tool, das uns dabei hilft, KI-Agenten über eine einfache Drag-and-Drop-Oberfläche zu erstellen. Sie ermöglicht es uns, verschiedene Blöcke, die unterschiedliche Funktionen darstellen, miteinander zu verbinden, um einen individuellen Arbeitsablauf zu erstellen. Jeder Block kann so konfiguriert werden, dass er eine bestimmte Aktion ausführt.
Es gibt zum Beispiel Blöcke, die LLM-Blöcke genannt werden und mit denen man eine Nachricht an ein großes Sprachmodell senden kann. Es gibt auch Funktionsblöcke, die uns die Möglichkeit geben, benutzerdefinierte JavaScript-Funktionen auszuführen, die noch mehr maßgeschneiderte Operationen ermöglichen.
Durch die Verknüpfung dieser Blöcke fließen die Informationen von einem Block zum nächsten und verarbeiten und transformieren die Daten Schritt für Schritt. Dieser modulare Ansatz macht es einfach, KI-Agenten ohne tiefgreifende Programmierkenntnisse zu konstruieren, da wir uns auf die Gestaltung des Workflows und die Konfiguration der notwendigen Aktionen konzentrieren können.
Aufbau eines KI-Agenten für Datenanalysten mit Flowise
Schauen wir uns an, wie man mit Flowise einen KI-Agenten für Datenanalysten erstellt. In diesem Leitfaden geht es um die Anmeldung bei Flowise, den Aufbau eines benutzerdefinierten Workflows und die Verwendung verschiedener Blöcke, um einen interaktiven Agenten zu erstellen, der Datensätze analysieren kann.
Schritt 1: Erstelle ein Konto bei Flowise
Beginnen Sie mit dem Besuch dieser Flowise Anmeldeseite und erstelle ein Konto. Fülle die erforderlichen Angaben aus und befolge die Anweisungen, die du per E-Mail erhältst, um dein Konto zu verifizieren und zu aktivieren.
Schritt 2: Datenbank einrichten
Jetzt, wo wir unser Flowise-Konto eingerichtet haben, ist es an der Zeit, die Datenbank einzurichten, die wir verwenden werden. Wir brauchen eine Datenbank, um die Daten zu speichern, die wir analysieren wollen.
Wir werden SingleStore, einen beliebten und benutzerfreundlichen SQL-Datenbankanbieter, für die Verwaltung unserer Daten verwenden. Lass uns diese Schritte durchgehen:
- Beginne mit dem Besuch der SingleStore Website.
- Melde dich für ein neues Konto bei SingleStore an.
- Wenn du ein aktives SingleStore-Konto hast, musst du im nächsten Schritt den Datensatz hochladen, mit dem wir arbeiten wollen. Für dieses Beispiel verwenden wir einen Datensatz, der sich auf die Social-Media-Gewohnheiten von Schülern konzentriert und den du auf Kaggle. Lade die Datensatzdatei von Kaggle herunter und lade sie auf SingleStore hoch.
- Sobald der Datensatz hochgeladen ist, generiert SingleStore daraus automatisch eine Tabelle in der Datenbank. Diese Tabelle bildet die Grundlage für unsere Datenanalyse und macht die Informationen für unseren Flowise KI-Agenten zugänglich.
Schritt 3: Navigiere zum Abschnitt Chatflows
Sobald du eingeloggt bist, gehst du zum Dashboard und suchst den Bereich "Chatflows". Klicke auf "Neu hinzufügen", um einen neuen Workflow zu erstellen.
Schritt 4: Erstelle eine benutzerdefinierte Funktion zum Laden der Tabelle Informationen
In diesem Schritt schreibst du eine benutzerdefinierte Funktion, um Informationen über die Tabelle abzurufen, z. B. ihre Beschreibung und Spaltennamen. Diese Daten sind wichtig für unseren KI-Agenten, um die Struktur des Datensatzes zu verstehen, den er abfragen wird.
- Erstelle einen benutzerdefinierten Funktionsblock.
- Füge den folgenden Code in den Funktionsblock-Editor ein:
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();
Am Anfang der Funktion müssen wir den Wert connectionUrl
festlegen. Diese findest du in SingleStore auf der Registerkarte "Einsätze".
Der Verbindungsstring sieht wie folgt aus:
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
Der erste Teil, in meinem Fall françois-19ecc
, ist der Nutzername. Direkt danach gibt es einen Platzhalter für das Passwort, , den wir ersetzen müssen.
Diese Funktion stellt eine Verbindung zur SingleStore-Datenbank her und ruft die Spalteninformationen für die Tabelle ab. Sie hat zwei Eingänge:
tableName
: Der Name der TabelletableDescription
: Die Beschreibung der Tabelle.
Diese müssen konfiguriert werden, indem du auf die Schaltfläche "Eingabevariablen" auf dem benutzerdefinierten Code-Knoten klickst. Auf Variablen kann im Code zugegriffen werden, indem ihrem Namen ein $
vorangestellt wird.
In meinem Fall hieß die Tabelle dataset
, als sie auf SingleStore erstellt wurde. Du solltest den Namen verwenden, den du beim Hochladen der CSV-Datei festgelegt hast.
Schritt 5: Einen Prompt-Vorlagenknoten erstellen
An diesem Knotenpunkt erstellen wir die Fragen, die unseren KI-Agenten leiten. Verbinde diesen Knoten mit deiner benutzerdefinierten Funktion.
- Erstelle einen Prompt-Vorlagenknoten.
- Füge die folgende Aufforderung ein:
Based on the SQL table information and the user's questions, return a SQL query that answers that question.
TABLE INFORMATION: {tableInformation}
QUESTION: {question}
Die Eingabeaufforderung hat zwei Platzhalter: {tableInformation}
und {question}
. Die question
ist die vom Benutzer eingegebene Eingabeaufforderung, während die tableInformation
die Ausgabe der Funktion ist, die wir im vorherigen Schritt definiert haben.
Diese Platzhalterwerte müssen konfiguriert werden, indem du auf die Schaltfläche "Prompt-Werte formatieren" auf dem Knoten der Prompt-Vorlage klickst.
Schritt 6: Link zu einem LLM-Kettenblock
Jetzt verbinden wir den Prompt-Vorlagenknoten mit einem LLM-Kettenblock, der den Prompt interpretiert und daraus eine SQL-Abfrage erstellt. Dies sind die Schritte, die wir befolgen müssen:
- Füge einen LLM-Kettenblock hinzu.
- Füge einen Modellblock ein, der für die Verwendung von OpenAI konfiguriert ist, und verbinde ihn mit dem LLM-Kettenblock am Eingang "Sprachmodell".
- Um das OpenAI-Modell zu konfigurieren, musst du einen OpenAI-API-Schlüssel einrichten. Wenn du noch keine hast, kannst du hier erstellen.
- Verbinde den Prompt-Vorlagenblock mit dem Eingang "Prompt".
Schritt 7: Setze einen Variablenblock ein
Um die generierte SQL-Abfrage zur weiteren Verwendung zu speichern, erstellst du einen Set-Variablen-Block und verbindest ihn mit der Ausgabe des LLM-Kettenblocks.
Schritt 8: Führen Sie die SQL-Abfrage aus
Sende die SQL-Abfrage an einen neuen benutzerdefinierten Codeblock, um sie in der Datenbank auszuführen.
- Erstelle einen weiteren benutzerdefinierten Codeblock.
- Gib den folgenden Code ein:
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)}`
}
Denke daran, den Wert connectionUrl
einzustellen. Es ist die gleiche, die wir vorher benutzt haben.
Diese Funktion hat eine Eingabe, nämlich die Abfrage, die wir ausführen wollen, und wird im Code mit $query
aufgerufen.
Schritt 9: Eine weitere Prompt-Vorlage erstellen
Diese Vorlage wird verwendet, um die Antwort zu formatieren, die der KI-Agent dem Nutzer auf der Grundlage der Abfrageergebnisse präsentiert.
- Erstelle eine neue Prompt-Vorlage.
- Verwende diese Aufforderung:
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}
Diese Eingabeaufforderung hat drei Platzhalter:
query
: Die SQL-Abfrage, die vom LLM generiert wurde und die man durch Verbinden des Variablenknotens erhält.queryResult
: Das Ergebnis der Abfrage, das durch den vorherigen benutzerdefinierten Funktionsknoten berechnet wird.question
: Die erste Benutzeraufforderung.
Schritt 10: Letzter LLM-Kettenblock
Zum Schluss verbindest du diese Prompt-Vorlage mit einem neuen LLM-Kettenblock, der den Prompt zur Formulierung der Antwort verwendet. Du kannst dies mit demselben OpenAI-Modellblock verbinden, den du zuvor verwendet hast.
Hier ist der endgültige Agentenfluss:
Wenn diese Schritte abgeschlossen sind, ist unser KI-Agent bereit. Es kann Fragen annehmen, SQL-Abfragen erstellen, um relevante Daten abzurufen, und klare, prägnante Antworten liefern.
Chatten mit dem Datenanalyse-Agenten
Das Mittel ist jetzt einsatzbereit. Um mit ihm zu chatten, klicke auf die lila Chat-Schaltfläche in der oberen rechten Ecke:
Testen wir es, indem wir fragen, wie viele Antworten die Umfrage erhalten hat:
Beachte, dass der Agent die Abfrage in die Antwort einbezieht, weil die letzte Aufforderung so gestaltet war. Lass uns ein paar statistische Fragen zu den Daten stellen:
Hier ist ein weiteres Beispiel:
Meine Gedanken zu Flowise
Nachdem ich mit verschiedenen Tools zur Erstellung von KI-Agenten experimentiert hatte, war meine Erfahrung mit Flowise eher frustrierend. Ein Problem, mit dem ich immer wieder konfrontiert wurde, war das versehentliche Löschen einiger variabler Konfigurationen, was dazu führte, dass der Agent sich unberechenbar verhielt, ohne dass es eine klare Erklärung dafür gab. Das machte die Fehlersuche oft zu einer mühsamen Aufgabe.
Außerdem fehlt bei Flowise ein klarer Ausgangspunkt für die Agentenströme, was es schwierig macht, die Funktionsweise des Agenten zu verstehen. Das kann vor allem für diejenigen entmutigend sein, die neu im Aufbau von KI-Systemen sind. Außerdem ist es mit Flowise nicht möglich, Zwischenergebnisse einfach einzusehen oder Knoten isoliert zu testen. Das macht es schwierig, Probleme zu erkennen oder den Arbeitsablauf effektiv zu verbessern.
Außerdem fand ich es schwierig, die Knotenkonfigurationen auf einen Blick zu sehen. Die benutzerdefinierten Codeknoten, die wir verwendet haben, haben zum Beispiel Eingabevariablen definiert, aber es ist nicht sichtbar, dass dies der Fall ist. Wir müssen auf diesen Abschnitt des Knotens klicken, um ihn zu sehen. Das macht es schwer, den Fluss zu verstehen, wenn man ihn nur ansieht.
Fazit
Flowise bietet zwar eine vielversprechende Low-Code-Oberfläche für die Erstellung von KI-Agenten, hat aber ein paar Probleme mit der Benutzerfreundlichkeit, die es schwieriger machen als ähnliche Tools, vor allem für diejenigen, die eine reibungslosere und intuitivere Erfahrung suchen. Trotz dieser Herausforderungen birgt das Konzept von Flowise Potenzial und könnte mit einigen Verbesserungen ein großartiges Werkzeug für die Entwicklung von KI-Lösungen werden.