Dify Referenz SKILL
Nachschlagen von Syntax, API-, CLI- und anderen Referenzinformationen
Schnellnavigation
DSL-Syntax-Referenz
Workflow-DSL-Struktur
version: 0.0.1
graph:
nodes:
- id: node_id
data:
type: node_type
# Knotenkonfiguration
edges:
- source: source_node_id
target: target_node_id
Knotentypen
| Typ | Beschreibung | Erforderliche Felder |
|---|---|---|
start | Startknoten | variables |
llm | LLM-Knoten | model, prompt_template |
agent | Agent-Knoten | agent_parameters |
knowledge-retrieval | Wissensabruf | dataset_ids, query_variable_selector |
http-request | HTTP-Anfrage | url, method, headers |
code | Codeausführung | code_type, code |
tool | Werkzeugknoten | provider_type, tool_name |
if-else | Bedingungsverzweigung | conditions |
iteration | Iteration | iterator_variable_name |
loop | Schleife | max_loop_count |
answer | Antwortknoten | answer |
Variablenreferenzen
# Systemvariablen
{{#sys.query#}} # Benutzerabfrage
{{#sys.files#}} # Hochgeladene Dateien
{{#sys.conversation_id#}} # Konversations-ID
# Knotenausgabe
{{#node_id.output_field#}}
# Array-Zugriff
{{#items[0]#}} # Erstes Element des Arrays
{{#items[-1]#}} # Letztes Element des Arrays
# Objektattribute
{{#object.field#}} # Objektattribut
Vollständiges Beispiel
workflow:
graph:
nodes:
- id: start
data:
type: start
variables:
- name: query
type: text
required: true
- id: classify
data:
type: question-classifier
instruction: "Klassifiziere die Benutzerfrage"
categories:
- name: technical
description: Technische Fragen
- name: general
description: Allgemeine Fragen
- id: llm
data:
type: llm
model:
provider: openai
name: gpt-4
prompt_template:
- role: system
text: "Du bist ein Assistent"
- role: user
text: "{{#start.query#}}"
context:
enabled: false
- id: answer
data:
type: answer
answer: "{{#llm.text#}}"
edges:
- source: start
target: classify
- source: classify
target: llm
source_handle: general
- source: llm
target: answer
API-Referenz
Authentifizierung
Alle API-Anfragen müssen den API-Key im Header mitführen:
Authorization: Bearer YOUR_API_KEY
Endpunktübersicht
App-API
| Endpunkt | Methode | Beschreibung |
|---|---|---|
/v1/chat-messages | POST | Chat-Nachricht senden |
/v1/completions | POST | Textvervollständigung |
/v1/parameters | GET | App-Parameter abrufen |
/v1/file-upload | POST | Datei hochladen |
Workflow-API
| Endpunkt | Methode | Beschreibung |
|---|---|---|
/v1/workflows/run | POST | Workflow ausführen |
/v1/workflows/run | GET | Ausführungsstatus abrufen |
/v1/workflows/tasks | GET | Aufgabenliste abrufen |
Datensatz-API
| Endpunkt | Methode | Beschreibung |
|---|---|---|
/v1/datasets | GET | Datensätze auflisten |
/v1/datasets | POST | Datensatz erstellen |
/v1/datasets/{id}/documents | GET | Dokumente auflisten |
/v1/datasets/{id}/retrieve | POST | Wissen abrufen |
Anfrage/Antwort-Format
Chat-Nachrichtenanfrage
{
"query": "Benutzerabfrage",
"user": "user_123",
"conversation_id": "optionale Konversations-ID",
"response_mode": "blocking | streaming",
"files": [
{
"type": "image",
"transfer_method": "remote_url",
"url": "https://example.com/image.jpg"
}
],
"retrieval_model": {
"query": "{{#sys.query#}}",
"top_k": 3
}
}
Chat-Nachrichtenantwort
{
"message_id": "msg_xxx",
"conversation_id": "conv_xxx",
"answer": "KI-Antwortinhalt",
"metadata": {
"usage": {
"prompt_tokens": 100,
"completion_tokens": 50,
"total_tokens": 150
},
"retrieval_resources": [
{
"position": 1,
"document_id": "doc_xxx",
"content": "Relevanter Dokumenteninhalt..."
}
]
}
}
Fehlerantworten
{
"code": "invalid_api_key",
"message": "Ungültiger API-Key",
"status_code": 401
}
Häufige Fehlercodes:
| Fehlercode | HTTP-Statuscode | Beschreibung |
|---|---|---|
invalid_api_key | 401 | API-Key ungültig |
invalid_parameter | 400 | Parameterfehler |
quota_exceeded | 403 | Kontingent überschritten |
rate_limit_exceeded | 429 | Ratenlimit überschritten |
internal_server_error | 500 | Serverfehler |
SDK-Referenz
Python SDK
Installation
pip install dify-client
Grundlegende Verwendung
from dify_client import DifyClient
# Client initialisieren
client = DifyClient(
api_key="app-xxx",
base_url="https://api.dify.ai/v1"
)
# Chat-Nachricht senden
response = client.chat.messages.create(
query="Hallo",
user="user_123"
)
print(response.answer)
Streaming-Antwort
from dify_client import DifyClient
client = DifyClient(api_key="app-xxx")
# Streaming-Chat
for event in client.chat.messages.stream(
query="Erzähl eine Geschichte",
user="user_123"
):
if event.event == "message":
print(event.data.answer, end="")
Workflow-Ausführung
# Workflow ausführen
response = client.workflows.run(
inputs={"query": "Test"},
user="user_123",
response_mode="blocking"
)
print(response.data.output)
SDK-Klassenreferenz
DifyClient
class DifyClient:
def __init__(self, api_key: str, base_url: str = "https://api.dify.ai/v1"):
"""Client initialisieren"""
pass
@property
def chat(self) -> ChatClient:
"""Chat-Client"""
pass
@property
def workflows(self) -> WorkflowClient:
"""Workflow-Client"""
pass
@property
def datasets(self) -> DatasetClient:
"""Datensatz-Client"""
pass
ChatClient
class ChatClient:
def create(self, query: str, user: str, **kwargs) -> ChatMessage:
"""Chat-Nachricht senden (blockierend)"""
pass
def stream(self, query: str, user: str, **kwargs) -> Iterator[ChatEvent]:
"""Chat-Nachricht senden (Streaming)"""
pass
CLI-Referenz
Installation
pip install dify-cli
Befehlsübersicht
Plugin-Befehle
# Plugin initialisieren
dify plugin init [options]
# Plugin ausführen
dify plugin run [options]
# Plugin paketieren
dify plugin package [options]
# Plugin veröffentlichen
dify plugin publish [options]
# Installierte Plugins auflisten
dify plugin list
Workflow-Befehle
# Workflow exportieren
dify workflow export <workflow_id> [options]
# Workflow importieren
dify workflow import <file> [options]
# Workflow validieren
dify workflow validate <file>
# Workflow ausführen
dify workflow run <workflow_id> --inputs '{}'
App-Befehle
# Apps auflisten
dify app list
# App-Informationen abrufen
dify app info <app_id>
# App bereitstellen
dify app deploy <app_id>
Umgebungsvariablen-Befehle
# Umgebungsvariablen auflisten
dify env list
# Umgebungsvariable setzen
dify env set <key> <value>
# Umgebungsvariable abrufen
dify env get <key>
# Umgebungsvariable löschen
dify env delete <key>
Optionen
| Option | Kurzform | Beschreibung | Standardwert |
|---|---|---|---|
--api-key | -k | API-Key | Umgebungsvariable DIFY_API_KEY |
--base-url | -b | Basis-URL | https://api.dify.ai/v1 |
--output | -o | Ausgabeformat | json |
--quiet | -q | Stiller Modus | false |
--debug | -d | Debug-Modus | false |
Verwendungsbeispiele
# API-Key setzen
export DIFY_API_KEY="app-xxx"
# Plugin-Projekt initialisieren
dify plugin init my-plugin --template tool
# Plugin ausführen
dify plugin run --port 5000
# Workflow exportieren
dify workflow export wf_xxx -o workflow.yaml
# Workflow importieren
dify workflow import workflow.yaml
Häufig gestellte Fragen
API-bezogen
F: Wie erhalte ich einen API-Key? A: Erstelle ihn in der Dify-Konsole unter Einstellungen -> API.
F: Wie hoch ist das Ratenlimit? A: Standardmäßig 60 Anfragen/Minute, eine Erhöhung kann beantragt werden.
F: Wie verarbeite ich Streaming-Antworten?
A: Verwende response_mode=streaming und parse SSE-Ereignisse.
Workflow-bezogen
F: Wie referenziere ich Variablen?
A: Verwende die Syntax {{#node_id.field#}}.
F: Welche Knotentypen werden unterstützt? A: Siehe die Tabelle der Knotentypen.
F: Wie handhabe ich Schleifen?
A: Verwende die Knoten iteration oder loop.
Plugin-bezogen
F: Wie entwickle ich ein benutzerdefiniertes Plugin? A: Siehe das 02-plugin SKILL.
F: Wie erhält ein Plugin Anmeldeinformationen?
A: Verwende self.runtime_credentials.
Verwandte SKILLs
- 01-workflow - Workflow-Design
- 02-plugin - Plugin-Entwicklung
- 05-integration - Integrationserweiterungen
Verwandte Ressourcen
Versionsinformationen: v1.0.0 | Letzte Aktualisierung: 2026-03-05