Tipurile de aplicații Dify: Workflow, Chatflow, Agent, Chatbot și Text Generator în Dify: fluxuri agentice, Knowledge și self-hosting

Canvas și Orchestrare Dify 1.18.0 (octombrie 2026)

Dify recomandă Workflow și Chatflow pentru aplicații noi; Chatbot, Legacy Agent și Text Generator rămân tipuri de bază, iar noul Agent (beta în 1.18.0) lucrează în propriul sandbox și se folosește singur sau într-un nod Agent.

Sintaxă & invocare
Studio → Create App → Workflow | Chatflow  (tipuri de bază: Chatbot, Agent, Text Generator)
Agents → Create  (noul Agent, beta)

Când creezi o aplicație în Studio, alegi tipul ei. Documentația recomandă Workflow sau Chatflow. Pe lângă ele există trei tipuri de bază, cu interfețe mai simple: Chatbot, Agent (numit în documentația API Legacy Agent) și Text Generator. Toate rulează pe același motor de workflow. În API, tipul apare în câmpul mode al răspunsului de la GET /info: workflow, advanced-chat (Chatflow), agent (noul Agent), chat (Chatbot), agent-chat (Legacy Agent) și completion (Text Generator).

Un Workflow rulează o dată, de la început la sfârșit: primește o intrare, o trece prin noduri și întoarce un rezultat. Pornește dintr-un nod User Input sau dintr-un Trigger (programare, webhook, eveniment dintr-o integrare) și poate fi folosit ca unealtă în alte aplicații. Un Chatflow adaugă un strat de conversație: fiecare mesaj al utilizatorului pornește fluxul. Are memorie în nodurile LLM, variabile de conversație care se păstrează de la o tură la alta și nodul Answer, care trimite text, imagini și fișiere pe parcurs. Chatflow pornește mereu din User Input și nu are triggere.

Noul Agent (beta în 1.18.0, activ implicit pe Docker Compose) se creează pe pagina Agents. Separă capabilitatea (rolul, promptul, modelul, skill-urile, uneltele Dify și fișierele) de sarcină (mesajul trimis sau instrucțiunea din nod). Lucrează într-un sandbox propriu: rulează comenzi, instalează programe, citește și scrie fișiere. Îl folosești ca aplicație de chat (web app sau Service API, doar în modul streaming) sau ca pas într-un nod Agent. Skill-urile sunt pachete cu un fișier SKILL.md și fișiere ajutătoare; biblioteca unui workspace ține cel mult 500. Documentația avertizează că, în Community Edition, runtime-ul Agent nu este o barieră de securitate întărită între utilizatori care nu au încredere unii în alții.

Tipurile de bază rămân pentru cazuri simple. Chatbot: model plus prompt, cu conversație. Legacy Agent: chat în care modelul raționează și apelează unelte. Ambele păstrează în istoric cel mult 500 de mesaje sau 2.000 de tokeni pe conversație. Text Generator: o singură tură, fără istoric, cu variabila query introdusă automat în prompt. O aplicație se exportă în DSL (YAML). Din 1.18.0, exportul implicit este un pachet .ifpkg, cu DSL-ul plus fișierele, skill-urile și agenții de care are nevoie aplicația; exportul YAML explicit a rămas disponibil.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
Workflow (workflow) O rulare pe cerere sau automată. Pornește din User Input sau Trigger, se termină opțional cu Output. Se poate publica drept unealtă (Workflow as Tool) dacă pornește din User Input.
Chatflow (advanced-chat) Workflow declanșat la fiecare mesaj. Variabile de conversație, memorie LLM, nodul Answer obligatoriu. Nu poate fi folosit ca unealtă.
Agent nou (agent) Beta. Sandbox propriu, skill-uri, fișiere, unelte Dify. Aplicație de chat doar cu response_mode: streaming; o rulare se oprește după 1 oră implicit sau după 500 de cereri către model.
Chatbot (chat) Model plus prompt, cu variabile completate de utilizator înainte de conversație. Fără unelte.
Legacy Agent (agent-chat) Chat în care modelul decide singur ce unelte apelează. Documentația prezintă noul Agent (beta) ca tip separat, cu sandbox propriu.
Text Generator (completion) O singură tură: prompt + intrări → răspuns. Endpoint-ul API este POST /completion-messages.
Skills Pachete reutilizabile (SKILL.md + scripturi și referințe), create, importate (.zip sau .skill, implicit până la 50 MB) și publicate pe pagina Skills. Folosite de noul Agent.
DSL / .ifpkg DSL este formatul YAML care descrie aplicația (noduri, prompturi, variabile, setări), fără loguri sau baze de cunoștințe. Din 1.18.0, exportul dă un pachet .ifpkg; versiunile mai vechi exportă doar .yml.
Snippets Grupuri de noduri salvate și reutilizate în alte workflow-uri; nu conțin noduri de start, Output, Answer, Knowledge Retrieval sau Human Input.

Exemple practice și scenarii reale

Exemplul 1: Află tipul unei aplicații din API

Cheia API ține de o singură aplicație. Câmpul mode din răspuns îți spune ce endpoint-uri poți folosi.

curl https://dify.example.com/v1/info \
  -H "Authorization: Bearer $DIFY_APP_KEY"

Exemplul 2: Cum alegi tipul

Sarcină dintr-o singură trecere (raport, extragere, lot de date)   → Workflow
Rulare automată la o oră fixă sau la un eveniment extern            → Workflow cu Trigger
Asistent de chat cu pași controlați la fiecare mesaj               → Chatflow
Un singur „lucrător” care își alege pașii și lucrează cu fișiere   → Agent (beta)
Chat simplu: model + prompt                                        → Chatbot
Text dintr-o singură cerere, fără conversație                      → Text Generator

Exemplul 3: Sarcina unui nod Agent cu ieșiri declarate

În câmpul Agent task tastezi / pentru variabile din nodurile anterioare și pentru New output. Aici vendor_quotes vine din amonte, iar vendor_name și quote_file sunt ieșiri declarate. Variabilele trimise ca text se trunchiază la 2.000 de caractere; conținutul lung se trimite ca fișier.

Compară cele trei oferte din {{vendor_quotes}} și scrie o recomandare. Pune numele furnizorului câștigător în {{vendor_name}} și PDF-ul ofertei lui în {{quote_file}}.

Greșeli frecvente și capcane

  • Confunzi noul Agent cu Legacy Agent. Sunt tipuri diferite, cu moduri API diferite (agent și agent-chat) și evenimente de streaming diferite.
  • Trimiți response_mode: "blocking" către o aplicație Agent sau Legacy Agent. Ele acceptă doar streaming; cererea blocking întoarce 400.
  • Expui același Agent din Community Edition unor clienți care nu au încredere unul în altul. Documentația spune că runtime-ul nu este o barieră de securitate întărită; pentru izolare strictă îți trebuie infrastructură separată.
  • Vrei să folosești un Chatflow ca unealtă în altă aplicație. Doar un Workflow care pornește din User Input poate fi publicat ca unealtă.

Noțiuni și module înrudite