Fluxuri agentice vizuale în Dify: Workflow și Chatflow pe canvas în Dify: fluxuri agentice, Knowledge și self-hosting

Canvas și Orchestrare Dify 1.18.0 (octombrie 2026)

În Dify, un Workflow sau un Chatflow se construiește pe un canvas din noduri (LLM, Knowledge Retrieval, Agent, IF/ELSE, Code, Tool, HTTP Request etc.), se testează nod cu nod și se publică ca aplicație web, Service API sau server MCP.

Sintaxă & invocare
Studio → Create App → Workflow / Chatflow → User Input sau Trigger → noduri → Output (Workflow) / Answer (Chatflow) → Publish

Dify este o platformă open-source pentru aplicații AI, dezvoltată de LangGenius, Inc. Documentația numește „fluxuri agentice” procesele în care modelele AI lucrează între pași, condiții și căi de rezervă definite de tine, nu singure. Pentru ele există două tipuri de aplicații, cu același canvas și aceleași noduri: Workflow, care rulează o dată de la început la sfârșit (rapoarte, procesare de date, loturi), și Chatflow, în care fiecare mesaj al utilizatorului pornește fluxul. Diferențele sunt pe pagina despre tipurile de aplicații.

Un Workflow pornește dintr-un nod User Input (la cerere, de un utilizator sau prin API) sau dintr-un Trigger (Schedule, Webhook ori Integration) și se poate termina cu nodul Output, fostul End. Output este opțional, dar o ramură fără Output nu întoarce date apelantului. Un Chatflow pornește mereu din User Input și răspunde prin Answer, obligatoriu. Între ele legi noduri ca LLM, Knowledge Retrieval, Agent, Question Classifier, IF/ELSE, Iteration, Loop, Code, Template, HTTP Request și Tool; lista completă este în referința nodurilor.

Nodurile legate în serie rulează unul după altul, iar fiecare poate citi variabilele nodurilor de dinainte. Nodurile pe ramuri paralele rulează în același timp și nu își văd variabilele; nodul în care ramurile se reunesc le citește pe toate. Pentru repetare există Iteration (aceiași pași pentru fiecare element dintr-o listă) și Loop (repetare până la o condiție, cu Exit Loop). Pe lângă ieșirile nodurilor ai variabile de sistem (sys.user_id, sys.app_id, sys.workflow_run_id, sys.timestamp, iar în Chatflow și sys.conversation_id, sys.dialogue_count), variabile de mediu ale aplicației (tipul Secret pentru chei) și, doar în Chatflow, variabile de conversație.

Pentru depanare rulezi un singur nod (Run, apoi Last run pentru intrări, ieșiri, durată și erori). Ieșirile nodurilor rulate rămân în Variable Inspector, unde le poți edita, apoi poți rula din nou doar nodurile din aval. Nodurile LLM, HTTP Request, Code și Tool au gestionare a erorilor (None, Default Value, Fail Branch). Din 1.18.0, o invocare de Workflow Tool se poate deschide din istoricul rulărilor, cu pașii workflow-ului copil.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
User Input Nodul de start la cerere. Definește câmpurile completate de utilizator; doar aplicațiile care pornesc de aici se publică ca web app, Service API, server MCP sau unealtă.
Trigger (Schedule / Webhook / Integration) Nod de start automat, doar în Workflow (din 1.10.0). Nu poate sta pe același canvas cu User Input.
LLM Apel de model cu prompt pe roluri, variabile {{...}}, context din Knowledge Retrieval, Structured Output și memorie (Chatflow).
Knowledge Retrieval Caută în bazele de cunoștințe și dă rezultatele ca context pentru LLM.
Agent Clasic: modelul alege singur uneltele după o strategie (Function Calling, ReAct). Nou (beta): un agent cu sandbox propriu, cu ieșiri declarate și Output Routes.
Question Classifier / IF/ELSE Ramificare semantică (un LLM alege clasa) sau după condiții exacte pe variabile.
Iteration / Loop Procesarea fiecărui element dintr-o listă, secvențial sau paralel; repetare până la o condiție sau un număr maxim de pași.
Code Python sau JavaScript în serviciul sandbox izolat; funcția main întoarce un dicționar cu ieșirile declarate.
Tool / HTTP Request Unelte din Integrations (pluginuri, OpenAPI, workflow-uri, servere MCP) sau apeluri HTTP directe.
Output / Answer Rezultatul final: Output în Workflow (cheile din outputs), Answer în Chatflow (răspunsul din chat).
Variable Inspector Ieșirile nodurilor deja rulate; le poți edita ca să testezi nodurile din aval fără să rulezi din nou tot fluxul.

Exemple practice și scenarii reale

Exemplul 1: Un Workflow care triază tichetele de suport

Clasificarea folosește Structured Output, ca IF/ELSE să compare un număr, nu un text liber. Modelul este doar un exemplu; poate fi orice model configurat în Integrations › Model Provider.

[User Input: tichet (Paragraph), email (Short Text)]
      ▼
[LLM „Clasificare” — claude-sonnet-5-5, Structured Output: categorie (string), urgenta (number)]
      ▼
[IF/ELSE: urgenta > 7]
   ├─ IF   → [HTTP Request: POST către webhook-ul intern de alertare]
   │          → [LLM „Răspuns prioritar”] → [Output: raspuns]
   └─ ELSE → [Knowledge Retrieval: baza „Documentație”]
              → [LLM „Răspuns standard”, context = rezultatul căutării] → [Output: raspuns]

Exemplul 2: Promptul nodului „Răspuns standard”

Contextul vine din nodul Knowledge Retrieval; Dify urmărește automat sursele citate.

System: Ești asistentul de suport al companiei. Răspunde doar din contextul de mai jos.
Dacă informația lipsește, spune asta.

Context:
{{knowledge_retrieval.result}}

User: {{tichet}}

Exemplul 3: Rularea workflow-ului publicat prin API

Variabilele din inputs au numele câmpurilor din User Input; numele variabilelor din nodul Output devin cheile din outputs.

curl -X POST "https://dify.example.com/v1/workflows/run" \
  -H "Authorization: Bearer $DIFY_APP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": {"tichet": "Nu pot descărca factura din octombrie.", "email": "client@example.com"},
    "response_mode": "blocking",
    "user": "client-5544"
  }'

Greșeli frecvente și capcane

  • Cauți nodul End într-un Workflow nou. Acum se numește Output și este opțional, dar o ramură fără Output nu întoarce nimic apelantului API.
  • Folosești același nume de variabilă în două noduri Output. Rezultatele se combină, iar valoarea scrisă mai târziu o suprascrie pe cea anterioară.
  • Pui un Trigger într-un Chatflow sau vrei să publici ca web app un Workflow pornit de un Trigger. Triggerele există doar în Workflow, iar web app, Service API, MCP și Workflow as Tool cer User Input.
  • Strângi clasificarea, căutarea și redactarea într-un singur prompt lung. Separate în noduri, pașii se pot testa pe rând în Variable Inspector și se pot ramifica.

Noțiuni și module înrudite