Lernpfad
Dify ist eine benutzerfreundliche Plattform, mit der du KI-Anwendungen mit wenig oder gar keinem Code erstellen kannst. Es funktioniert durch Ziehen und Ablegen von Blöcken mit verschiedenen Funktionen. Die Informationen fließen durch die Blöcke und werden verarbeitet und kombiniert, um Antworten zu erhalten.
In diesem Artikel erkläre ich dir die Grundlagen von Dify, indem ich dich durch die Schritte zur Erstellung eines KI-Reisebüros führe.
Wir halten unsere Leserinnen und Leser mit The Median auf dem Laufenden, unserem kostenlosen Freitags-Newsletter, der die wichtigsten Meldungen der Woche aufschlüsselt. Melde dich an und bleibe in nur ein paar Minuten pro Woche auf dem Laufenden:
Was ist Dify?
Dify ist eine Plattform, die die Entwicklung von KI-Anwendungen vereinfacht, ohne dass umfangreiche Programmierkenntnisse erforderlich sind. Es bietet eine benutzerfreundliche Low-Code-Umgebung, in der du durch Ziehen und Ablegen verschiedener Komponenten Apps erstellen kannst.
Stell dir Dify als einen digitalen Werkzeugkasten vor, der mit vorgefertigten Bausteinen gefüllt ist, die zu einer funktionalen Software zusammengesetzt werden können. Dieser Ansatz macht Technologie zugänglicher und ermöglicht es auch Menschen mit begrenzten Programmierkenntnissen, ihre Ideen zu verwirklichen.
Jeder Blocktyp hat Eingänge und wandelt diese in verschiedene Ausgänge um, je nach Blocktyp. Die Informationen werden von Block zu Block weitergegeben und umgewandelt, sodass das Endergebnis entsteht.
Erste Schritte mit Dify
Wir haben zwei Möglichkeiten, Dify zu nutzen:
- Lokale Einrichtung.
- Verwendung der Cloud-Version.
In diesem Lernprogramm verwenden wir die Cloud-Version. Die Cloud-Version von Dify bietet einen kostenlosen Plan an, sodass du diese Anleitung auch ohne ein kostenpflichtiges Abonnement durchführen kannst.
Wenn du dich für die lokale Einrichtung interessierst, ist der einfachste Weg:
- Lade oder klone Dify aus dem offiziellen Repository.
- Führe Dify mit Docker aus, wie im Abschnitt Abschnitt Schnellstart in der README des Repositorys beschrieben wird.
Einen Chatflow mit Dify erstellen
Dify bietet mehrere Arten von Apps an. Wir werden uns darauf konzentrieren, eine Chatflow-App zu bauen, also einen KI-Flow, bei dem die Nutzer über eine Chat-Schnittstelle mit dem Agenten interagieren.
Um eine neue Chatflow-App zu erstellen, klickst du zunächst auf "Aus dem Nichts erstellen" und wählst die Option "Chatflow".
Um den Fluss zu erstellen, gibst du einen Namen ein und klickst dann auf "Erstellen":
Dadurch wird der folgende Standardfluss erstellt:
Dieser Fluss hat drei Blöcke:
- Der Startblock ist für das Starten des Flusses verantwortlich. Bei einem Chatflow wird der Fluss mit dem Senden einer Nachricht durch den Nutzer gestartet.
- Der LLM-Knoten nimmt die Benutzernachricht entgegen und sendet sie an einen LLM, in diesem Fall
gpt-4
. - Der letzte Knoten wird verwendet, um eine Nachricht im Chat anzuzeigen. In diesem Beispiel ist er mit dem LLM-Knoten verbunden, also wird die Ausgabe des LLM-Knotens an den Chat gesendet.
Diese drei Knotenpunkte bilden zusammen einen KI-Chat, der ChatGPT ähnelt. Bevor wir diese App starten, müssen wir das OpenAI-Plugin installieren und einrichten.
Installieren und Einrichten des OpenAI-Plugins
Um das OpenAI-Plugin zu installieren, musst du Folgendes tun:
- Klicke auf die Schaltfläche "Plugins" in der oberen rechten Ecke.
- Klicke auf "Vom Marketplace installieren".
- Gib "openai" in das Suchfeld ein und klicke auf das OpenAI-Plugin.
- Wähle das OpenAI-Plugin aus und klicke auf "Installieren".
Als nächstes müssen wir den OpenAI API-Schlüssel einrichten. Wenn du noch keine hast, kannst du sie hier. Beachte, dass die Nutzung der OpenAI API nicht kostenlos ist. Du musst also eine Zahlungsmethode mit dem API-Schlüssel verknüpfen.
Sobald wir einen Schlüssel haben, können wir ihn konfigurieren, indem wir:
- Wähle den LLM-Knoten aus.
- Klicke auf das Konfigurationssymbol neben dem Modellnamen.
- Klicke oben auf das Modell-Dropdown.
- Klicke unten in der Liste auf "Modellanbietereinstellungen".
- Klicke im Abschnitt "API-Schlüssel" auf "Einrichten".
- Füge den API-Schlüssel ein und klicke auf "Speichern".
Ausführen der App
Jetzt können wir die App starten, indem wir auf die Schaltfläche Vorschau klicken:
Im Moment ist er noch nicht sehr interessant, da er nur ein KI-Chatbot ist. Denke daran, dass es nichts tut, bis der Nutzer eine Nachricht sendet.
Variablen erstellen
Dify ermöglicht es, den Zustand der Anwendung zu speichern, indem es Variablen Werte zuweist, die für alle Blöcke zugänglich sind.
Um eine Variable zu erstellen, klicke auf die Schaltfläche Variable:
Lass uns eine Variable erstellen, um den Namen des Nutzers zu speichern:
Diese Konfiguration erstellt eine Variable namens name
, die einen String (Text) speichert. Wir haben den Standardwert leer gelassen, sodass die Variable anfangs eine leere Zeichenkette sein wird.
Es gibt verschiedene Möglichkeiten, wie wir sie auffüllen können, aber die gängigste ist, einen KI-Block zu verwenden, der sie automatisch aus der Konversation herausfindet. Wie man das macht, erfahren wir später. Zuerst lernen wir, wie man den Wert einer Variablen überprüft, um den Ablauf der Anwendung zu steuern.
IF/ELSE-Blöcke
Um den Wert einer Variablen zu überprüfen, können wir einen IF/ELSE-Block verwenden. Dieser Block wird verwendet, um verschiedene Aktionen abhängig vom Wert einer Variablen auszuführen.
Um einen neuen Block hinzuzufügen, klickst du auf die Schaltfläche "+" am unteren Rand:
Wähle dann den Block aus, den du hinzufügen möchtest. In diesem Fall wählen wir "IF/ELSE":
Dann klicken wir auf den Block, um ihn zu konfigurieren, indem wir die Variable name
auswählen, die wir zuvor erstellt haben.
Um es zu testen, fügen wir zwei Antwortblöcke hinzu. Diese Blöcke werden verwendet, um eine Nachricht im Chat anzuzeigen. Wir verbinden einen davon mit dem Ausgang IF
(der läuft, wenn die Bedingung wahr ist) und den anderen mit dem Ausgang ELSE
(der läuft, wenn die Bedingung falsch ist).
Für die Ausgabe IF
stelle ich die Zeichenfolge "Sorry, I don't know your name." ein, während ich für die Ausgabe ELSE
"Hello, {name}!" einstelle. Wir können die geschweiften Klammern verwenden, um eine Variable in eine Zeichenkette einzufügen. Das wird später beim Erstellen von Prompts nützlich sein.
Wir können diesen Chatflow ausprobieren, indem wir auf die Schaltfläche "Vorschau" klicken. Beachte, dass ein Chatflow durch eine Nutzernachricht ausgelöst wird, also müssen wir zuerst eine Nachricht senden, z.B. "Hallo". Hier sind die Ergebnisse, je nachdem, ob der Name gesetzt ist oder nicht (für das zweite Beispiel habe ich ihn manuell in der Schnittstellenvariable gesetzt):
Variablenzuweiser und Parameterextraktorblöcke
Wir können KI verwenden, um die Werte von Variablen zu identifizieren und zu extrahieren, indem wir einen Parameter Extractor-Block verwenden. Dieser Block verwendet einen LLM, um Informationen aus dem Gespräch zu extrahieren.
Zuerst fügen wir einen Parameter-Extraktor-Block hinzu, der mit dem Zweig IF
verbunden ist. Hier ist die Konfiguration des Blocks:
- Die
INPUT VARIABLE
wird aufsys.query
gesetzt, was der Benutzernachricht entspricht. Das bedeutet, dass der Parameter Extractor-Block versuchen wird, den Wert aus der Benutzernachricht zu extrahieren. - Auf
EXTRACTION PARAMETERS
definieren wir die Informationen, die wir extrahieren wollen. Leider können wir hier nicht direkt eine Variable angeben, also müssen wir diese Information neu definieren, indem wir auf den "+"-Button klicken.
- Das Feld
INSTRUCTION
ist die Eingabeaufforderung, die dem LLM sagt, was zu tun ist. - Als Nächstes fügen wir einen Variablen-Zuweisungsblock hinzu, um den vom Parameter-Extraktor extrahierten Wert (falls vorhanden) der Variablen
name
zuzuweisen.
Stelle sicher, dass du die extrahierte name
der Variablen name
zuweist.
Nach diesem Schritt könnte die Variable name
immer noch undefiniert sein, weil es sein könnte, dass der Nutzer seinen Namen nicht angegeben hat. Also fügen wir einen weiteren IF/ELSE-Block zur Überprüfung hinzu. Wenn der Name gesetzt ist, begrüßen wir den Benutzer. Ansonsten fragen wir nach ihrem Namen.
Hier ist ein Beispiel für eine Interaktion:
Dieser Ablauf veranschaulicht die Grundlagen der Dify-Workflows. Egal, wie die Nachricht des Nutzers lautet, wenn der Name nicht definiert ist, versucht er, den Namen aus der Nachricht zu extrahieren. Wenn es scheitert, fragt es danach. Andernfalls wird der Benutzer nur mit seinem Namen begrüßt.
Zu diesem Zeitpunkt gibt es keine LLM-Sperre, also wird der Agent nichts weiter tun.
Code-Block
Codeblöcke können verwendet werden, um eigenen Python-Code auszuführen. Ändern wir den vorherigen Ablauf, um den Standort des Nutzers anstelle des Nutzernamens zu extrahieren. Dann werden wir einen Code-Block verwenden, um eine Anfrage an eine Wetter-API zu stellen und die Wettervorhersage an den Nutzer zu senden.
- Erstelle eine neue Variable namens
location
. - Ändere die IF/ELSE-Blöcke so, dass sie auf
location
statt aufname
prüfen. - Ändere den Parameter-Extraktor-Block so, dass er den Ort anstelle des Namens extrahiert.
- Ändere den Variablenzuweisungsblock, um den extrahierten Wert der Variable
location
zuzuweisen. - Ändere die Antwortblöcke so, dass sie nach dem Ort fragen bzw. den Ort anzeigen.
Nach diesen Schritten sollte der Ablauf wie folgt aussehen:
Hier ist ein Beispiel für eine Interaktion:
Der nächste Schritt ist das Hinzufügen eines Code-Blocks, nachdem wir den Standort festgelegt haben. Dieser Block stellt eine Anfrage an die OpenWeather API um die Wettervorhersage für diesen Ort zu erfragen.
Die Nutzung dieser API ist kostenlos, solange wir nicht zu viele Anfragen stellen.
Ersetze den zweiten Antwortblock durch einen Codeblock.
Konfiguriere ihn so, dass er einen einzelnen Parameter mit dem Wert location
empfängt.
Für den Python-Code können wir das Paket requests
verwenden, um das Wetter von der OpenWeather-API abzurufen:
import requests
API_KEY = "PASTE_YOUR_API_KEY_HERE"
def main(location: str) -> str:
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": location,
"appid": API_KEY,
"units": "metric",
}
response = requests.get(base_url, params=params)
data = response.json()
if response.status_code == 200:
weather_desc = data["weather"][0]["description"]
temp = data["main"]["temp"]
return {
"result": f"Current weather in {location}: {weather_desc}, Temperature: {temp}°C"
}
else:
return {
"result": "Could not retrieve weather data",
}
Schließlich verbinden wir die Ausgabe des Code-Knotens mit einem Antwort-Knoten, um sie dem Benutzer anzuzeigen.
Wir haben jetzt einen Chatflow, der uns die Wettervorhersage sagen kann:
Projekt: Einen KI-Agenten für den Reiseplaner erstellen
Wir haben jetzt alle Werkzeuge, die wir brauchen, um ein KI-Reisebüro aufzubauen. Die Möglichkeiten sind endlos, aber um dieses Tutorial nicht zu kompliziert zu machen, halten wir es einfach.
Der Agent wird sich auf die Planung eines einzelnen Tages der Reise konzentrieren. Zunächst werden der Standort des Nutzers und die Art der Aktivitäten, die er gerne macht, erfasst. Hierfür verwenden wir zwei Variablen:
location
: Speichere den Ort, an dem der Nutzer unterwegs ist.activities
: Ein Array mit Strings, in dem die Aktivitäten gespeichert sind, die der Benutzer durchführen möchte.
So können wir einen Fluss erstellen, um beide Variablen zu extrahieren:
In diesem Beispiel beginnen wir mit einem Variablenextraktionsblock, um sowohl die location
als auch die Liste der activities
zu extrahieren.
Dann verwenden wir IF/ELSE-Blöcke, um zu prüfen, ob jeder dieser Parameter extrahiert wurde und aktualisieren die Variablen, wenn dies der Fall ist. Im Gegensatz zu unseren vorherigen Beispielen kann der Nutzer hier die Werte aktualisieren.
Am Ende der Wertextraktion und der Variablenzuweisung fügen wir einen weiteren IF/ELSE-Block hinzu, um zu prüfen, ob es fehlende Werte gibt. Wenn etwas fehlt, bitten wir den Nutzer explizit darum, es bereitzustellen.
Wenn sowohl location
als auch activities
definiert sind, verwenden wir den Code-Block, den wir zuvor erstellt haben, um das Wetter an dem angegebenen Ort zu ermitteln. Schließlich geben wir das Wetter, den Ort und die Aktivitäten an einen LLM-Block weiter, um den Tag des Nutzers zu planen.
Der LLM-Block ist mit einem Systemprompt konfiguriert, der dem Modell sagt, was es tun soll. Der Ort, die Aktivitäten und das Wetter werden miteinbezogen. Hier ist der letzte Teil des Flusses:
Hier ist ein Beispiel für eine Interaktion mit dem Agenten:
Wir sehen in der Antwort, dass der Agent dank des Code-Knotens dem Nutzer das Wetter mitteilen und es bei der Planung der Aktivitäten berücksichtigen kann.
Aufgrund der Art und Weise, wie der Ablauf eingerichtet wurde, wird der Agent, wenn der Nutzer die Informationen direkt in der ersten Nachricht angibt, direkt einen Plan für den Tag erstellen.
Eine eigene Begrüßung definieren
Du hast vielleicht bemerkt, dass der Agent den Benutzer mit einer Nachricht begrüßt hat:
Um dies zu ermöglichen, müssen wir die Funktion "Gesprächseröffner" (Conversation Opener) aktivieren.
Dify Tools
In diesem Tutorium haben wir die grundlegenden Bausteine von Dify kennengelernt. Ein Aspekt, den wir nicht behandelt haben, waren Werkzeuge.
In Dify sind Tools leistungsstarke Erweiterungen, die es deinen KI-Agenten ermöglichen, über die Grenzen eines Sprachmodells hinaus mit der Außenwelt zu interagieren. Ein LLM kann zwar Schlussfolgerungen ziehen und Antworten auf der Grundlage seiner Trainingsdaten und des Kontextes der Aufforderung generieren, hat aber keinen Echtzeit-Zugang zu Live-Daten oder externen Diensten.
Tools lösen dieses Problem, indem sie deinen Agenten in die Lage versetzen, API-Aufrufe zu tätigen, Datenbanken abzufragen, Berechnungen durchzuführen, Dokumente abzurufen und vieles mehr, um so als Brücke zwischen deiner KI und externen Informationsquellen zu fungieren.
Du kannst die Tools in Dify über die visuelle Schnittstelle der Plattform konfigurieren, indem du den Tooltyp (z. B. HTTP-Anfragen, Code-Interpreter oder Plugins von Drittanbietern), das Eingabe-/Ausgabeschema und alle Authentifizierungsanforderungen festlegst. Sobald sie eingerichtet sind, können diese Werkzeuge in deinem Agentenfluss über Werkzeugblöcke verwendet werden, die es dir ermöglichen, Daten an und von dem Werkzeug zu übergeben und die Ergebnisse in LLM-Knoten oder andere Logikblöcke einzuspeisen.
Dadurch werden deine Agenten nicht nur intelligenter, sondern auch handlungsorientierter und können durch die Interaktion mit realen Diensten aktuelle, kontextbezogene Antworten geben.
In unserem Beispiel haben wir einen Codeblock verwendet, um eine Anfrage an die Wetter-API zu stellen. Eine Alternative wäre gewesen, ein Tool zu entwickeln und es dem LLM zur Verfügung zu stellen.
Fazit
In diesem Tutorial haben wir uns einige der grundlegenden Bausteine angeschaut, die du brauchst, um mit Dify zu arbeiten. Dify bietet jedoch noch viele weitere Funktionen und Möglichkeiten, die es zu entdecken gilt.
Um dein Verständnis zu festigen, wäre es eine gute Übung, das von uns erstellte Reisebüro zu verbessern. Ziehe in Erwägung, Funktionen wie die Internetsuche hinzuzufügen, um lokale Aktivitäten online zu finden, was die Funktionalität des Agenten bereichern und dynamischere Vorschläge liefern kann.
Wenn du dich für KI-Agentenentwickler wie Dify interessierst, empfehle ich dir, unsere anderen Tutorials zu lesen: