Dify-Workflow-Design SKILL
Beherrsche das Kernwissen und die Best Practices für das Design von Dify-Workflows
Schnellnavigation
Workflow-Überblick
Dify-Workflow ist ein visuelles System zur Orchestrierung von KI-Anwendungen, das durch die Kombination von Knoten und Kanten komplexe Geschäftslogik realisiert.
Kernkonzepte
- Knoten (Node): Die grundlegende Ausführungseinheit eines Workflows; jeder Knoten führt eine bestimmte Funktion aus.
- Kante (Edge): Verbindet Knoten und definiert den Datenfluss und die Ausführungsreihenfolge.
- Variable (Variable): Überträgt Daten zwischen Knoten.
- DSL (Domain Specific Language): Workflow-Definitionssprache im YAML-Format.
Workflow-Typen
- Workflow: Standard-Workflow, geeignet für komplexe mehrstufige Verarbeitungen.
- Advanced Chat: Erweiterte Chat-Anwendung mit Workflow-Orchestrierung.
- Agent: Intelligenter Agent mit autonomer Entscheidungsfindung und Tool-Aufruf.
Ausführungsmodell
- Queue-gesteuert: Knotenplanung basierend auf der Ready Queue.
- Ereignisgesteuert: Knotenausführung erzeugt Ereignisströme.
- Parallele Ausführung: Unterstützt 2–8 parallele Arbeitsthreads.
- Streaming-Antwort: Unterstützt Echtzeit-Streaming-Ausgabe.
Kernknotentypen
1. Start-Knoten
Funktion: Einstiegspunkt des Workflows, definiert Eingabevariablen.
Konfigurationsbeispiel:
- data:
desc: ''
selected: false
title: Start
type: start
variables:
- label: Benutzereingabe
max_length: 1000
required: true
type: text-input
variable: user_input
id: start
type: custom
Ausführliche Dokumentation: nodes/start.md
2. LLM-Knoten
Funktion: Ruft ein großes Sprachmodell zur Inferenz und Generierung auf.
Konfigurationsbeispiel:
- data:
type: llm
model:
provider: openai
name: gpt-4
completion_params:
temperature: 0.7
max_tokens: 2000
prompt_template:
- id: system
role: system
text: "Du bist ein professioneller Assistent"
- id: user
role: user
text: "{{#sys.query#}}"
context:
enabled: true
variable_selector: ["knowledge", "result"]
id: llm
Wichtige Parameter:
model: Modellkonfiguration (Anbieter, Name, Parameter)prompt_template: Prompt-Vorlage (unterstützt System- und Benutzernachrichten)context: Kontextkonfiguration (aktiviert Ergebnisse der Wissensabfrage)memory: Konfiguration des Gesprächsgedächtnissesvision: Konfiguration der visuellen Fähigkeiten (unterstützt Bildeingabe)
Ausführliche Dokumentation: nodes/llm.md
3. Agent-Knoten
Funktion: Intelligenter Agent, der basierend auf Benutzeranfragen autonom Tools aufruft.
Konfigurationsbeispiel:
- data:
type: agent
agent_parameters:
instruction:
type: constant
value: "Rufe basierend auf den Benutzeranforderungen geeignete Tools auf, um die Aufgabe abzuschließen"
model:
type: constant
value:
provider: openai
model: gpt-4
completion_params:
temperature: 0.7
query:
type: constant
value: "{{#sys.query#}}"
tools:
type: constant
value:
- enabled: true
provider_name: time
tool_name: current_time
type: builtin
- enabled: true
provider_name: duckduckgo
tool_name: ddgo_search
type: builtin
agent_strategy_name: function_calling
id: agent
Unterstützte Strategien:
function_calling: Funktionsaufruf (empfohlen)react: ReAct-Reasoning-Modus
Ausführliche Dokumentation: nodes/agent.md
4. Knowledge-Retrieval-Knoten
Funktion: Ruft relevante Informationen aus der Wissensdatenbank ab (RAG).
Konfigurationsbeispiel:
- data:
type: knowledge-retrieval
dataset_ids:
- "dataset-uuid-1"
- "dataset-uuid-2"
query_variable_selector: ["start", "sys.query"]
retrieval_mode: single
single_retrieval_config:
model:
provider: openai
name: text-embedding-3-small
top_k: 3
score_threshold: 0.7
reranking_model:
provider: cohere
model: rerank-english-v2.0
id: knowledge
Abrufmodi:
single: Einmalige Abfragemultiple: Mehrfache Abfrage
Ausführliche Dokumentation: nodes/knowledge-retrieval.md
5. Code-Knoten
Funktion: Führt Python- oder JavaScript-Code aus.
Konfigurationsbeispiel:
- data:
type: code
code_language: python3
code: |
def main(input_text: str) -> dict:
# Verarbeitungslogik
result = input_text.upper()
return {
"output": result,
"length": len(result)
}
variables:
- variable: input_text
value_selector: ["start", "user_input"]
outputs:
output:
type: string
length:
type: number
id: code
Unterstützte Sprachen:
- Python 3
- JavaScript (Node.js)
Ausführliche Dokumentation: nodes/code.md
6. HTTP-Request-Knoten
Funktion: Ruft externe HTTP-APIs auf.
Konfigurationsbeispiel:
- data:
type: http-request
method: POST
url: "https://api.example.com/endpoint"
headers:
Content-Type: application/json
Authorization: "Bearer {{#env.API_KEY#}}"
body:
type: json
data:
query: "{{#sys.query#}}"
options:
temperature: 0.7
timeout: 30
id: http
Unterstützte Methoden:
- GET, POST, PUT, DELETE, PATCH
Ausführliche Dokumentation: nodes/http-request.md
7. Tool-Knoten
Funktion: Ruft integrierte oder benutzerdefinierte Tools auf.
Konfigurationsbeispiel:
- data:
type: tool
provider_id: google_translate
provider_type: builtin
provider_name: google_translate
tool_name: translate
tool_parameters:
content:
type: mixed
value: "{{#sys.query#}}"
dest:
type: mixed
value: "zh-CN"
id: tool
Tool-Typen:
builtin: Integrierte Toolsapi: API-Toolsworkflow: Workflow-Tools
Ausführliche Dokumentation: nodes/tool.md
8. If-Else-Knoten
Funktion: Bedingte Verzweigungssteuerung.
Konfigurationsbeispiel:
- data:
type: if-else
conditions:
- variable_selector: ["llm", "text"]
comparison_operator: contains
value: "Schlüsselwort"
logical_operator: and
id: condition
Unterstützte Operatoren:
contains,not containsis,is notempty,not empty>,<,>=,<=,=,!=
Ausführliche Dokumentation: nodes/if-else.md
9. Iterations-Knoten
Funktion: Iterative Verarbeitung von Array-Daten.
Konfigurationsbeispiel:
- data:
type: iteration
iterator_selector: ["start", "items"]
output_selector: ["iteration_inner", "output"]
parallel_nums: 3
error_handle_mode: continue
id: iteration
Fehlerbehandlungsmodi:
continue: Ausführung fortsetzenstop: Iteration beenden
Ausführliche Dokumentation: nodes/iteration.md
10. Answer-Knoten
Funktion: Gibt das Workflow-Ergebnis aus.
Konfigurationsbeispiel:
- data:
type: answer
answer: "{{#llm.text#}}"
id: answer
Ausführliche Dokumentation: nodes/answer.md
Entwurfsmuster
1. Sequentielles Pipeline-Muster
Anwendungsbereich: Einfache lineare Verarbeitungsabläufe.
Struktur:
Start → LLM → Answer
Beispiel: patterns/sequential.md
2. Bedingtes Verzweigungsmuster
Anwendungsbereich: Führt je nach Bedingung unterschiedliche Verarbeitungslogiken aus.
Struktur:
Start → LLM → If-Else → [ZweigA / ZweigB] → Answer
Beispiel: patterns/conditional.md
3. Iteratives Verarbeitungsmuster
Anwendungsbereich: Batch-Verarbeitung von Array-Daten.
Struktur:
Start → Code → Iteration → LLM → Answer
Beispiel: patterns/iterative.md
4. Wissensabrufmuster (RAG)
Anwendungsbereich: Frage-Antwort basierend auf der Wissensdatenbank.
Struktur:
Start → Knowledge Retrieval → LLM (mit Kontext) → Answer
Beispiel: patterns/rag.md
5. Multi-Source-Aggregationsmuster
Anwendungsbereich: Integration von Informationen aus mehreren Datenquellen.
Struktur:
Start → [Tool1, Tool2, HTTP] → Variable Aggregator → LLM → Answer
Beispiel: patterns/aggregation.md
Workflow-Vorlagen
Einfaches Frage-Antwort
Datei: templates/simple-qa.yml
Beschreibung: Der einfachste Frage-Antwort-Workflow.
Knoten: Start → LLM → Answer
RAG-Assistent
Datei: templates/rag-assistant.yml
Beschreibung: Intelligenter Assistent basierend auf der Wissensdatenbank.
Knoten: Start → Knowledge Retrieval → LLM → Answer
Agent-Tool-Aufruf
Datei: templates/agent-tools.yml
Beschreibung: Autonomer Tool-Aufruf durch den intelligenten Agenten.
Knoten: Start → Agent → Answer
Mehrstufige Verarbeitung
Datei: templates/multi-step.yml
Beschreibung: Komplexer mehrstufiger Verarbeitungsablauf.
Knoten: Start → Code → HTTP → LLM → If-Else → Answer
Variablensystem
Systemvariablen
{{#sys.query#}} # Benutzeranfrage
{{#sys.files#}} # Hochgeladene Dateien
{{#sys.conversation_id#}} # Konversations-ID
{{#sys.user_id#}} # Benutzer-ID
Knotenvariablen
{{#KnotenID.Ausgabefeld#}} # Verweis auf Knotenausgabe
{{#llm.text#}} # LLM-Textausgabe
{{#knowledge.result#}} # Ergebnis der Wissensabfrage
{{#code.output#}} # Ausgabe des Code-Knotens
Konversationsvariablen
{{#conversation.Variablenname#}} # Konversationsspezifische Variable
Umgebungsvariablen
{{#env.API_KEY#}} # Umgebungsvariable
{{#env.DATABASE_URL#}} # Datenbankverbindung
Iterationsvariablen
{{#item#}} # Aktuelles Iterationselement
{{#index#}} # Aktueller Index
Best Practices
1. Modulares Design
- Zerlege komplexe Abläufe in mehrere unabhängige Knoten.
- Verwende Variablen zur Datenübergabe, vermeide Hartcodierung.
- Setze bedingte Verzweigungen und Iterationsknoten sinnvoll ein.
2. Variablenbenennung
- Verwende aussagekräftige Variablennamen.
- Folge einheitlichen Benennungskonventionen.
- Füge bei Bedarf Beschreibungen hinzu.
3. Fehlerbehandlung
- Füge an kritischen Knoten Fehlerbehandlungslogik hinzu.
- Verwende bedingte Verzweigungen zur Behandlung von Ausnahmefällen.
- Gib benutzerfreundliche Fehlermeldungen aus.
4. Leistungsoptimierung
- Vermeide unnötige Knotenaufrufe.
- Nutze Caching-Mechanismen sinnvoll.
- Begrenze die Anzahl der Iterationen.
- Verwende parallele Zweige zur Leistungssteigerung.
5. Wartbarkeit
- Füge Knotenbeschreibungen und Kommentare hinzu.
- Verwende klare Knotennamen.
- Halte die Workflow-Struktur einfach und übersichtlich.
- Überprüfe und optimiere regelmäßig.
Ausführliche Details: best-practices.md
Nächste Schritte
- Vertiefe dein Wissen in Knotentypen im Detail
- Erkunde Entwurfsmuster
- Starte schnell mit Workflow-Vorlagen
- Lies Best Practices zur Verbesserung deiner Fähigkeiten
Verwandte SKILLS
- 02-plugin SKILL – Entwicklung benutzerdefinierter Tools und Plugins
- 03-performance SKILL – Optimierung der Workflow-Leistung
- 06-reference SKILL – DSL-Syntaxreferenz
Version: v1.0.0 Letzte Aktualisierung: 2026-03-04 Zurück: Gesamt-SKILL