Communitygithub.com

Dify 工作流设计

Guide complet pour la conception de workflows Dify - types de nœuds, modèles de conception, templates et bonnes pratiques.

Qu'est-ce que Dify 工作流设计 ?

Cette compétence (skill) fournit un guide exhaustif pour concevoir et optimiser des workflows Dify, un système d'orchestration d'applications IA visuelles. Elle couvre en détail les 10 types de nœuds fondamentaux (Start, LLM, Agent, Knowledge Retrieval, Code, HTTP Request, Tool, If-Else, Iteration, Answer), avec leurs configurations YAML, paramètres clés et stratégies d'exécution (queue-driven, event-driven, parallélisme). Les modèles de conception (séquentiel, conditionnel, itératif, RAG, agrégation multi-source) permettent de structurer des pipelines complexes. La compétence explique le système de variables (système, nœud, session, environnement, itération) et leurs syntaxes. Destinée aux développeurs utilisant Claude Code, Cursor, Codex ou tout agent IA, cette ressource inclut des templates prêts à l'emploi et des bonnes pratiques (modularité, nommage, gestion d'erreurs, performance, maintenabilité). Le tout est basé sur une documentation SKILL.md centralisée avec des liens vers des fichiers dédiés pour chaque nœud et motif de conception.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/SystemTce/dify-skills/tree/main/01-workflow

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Compétence de conception de workflows Dify

Maîtrisez les connaissances essentielles et les meilleures pratiques de conception de workflows Dify

Navigation rapide


Aperçu du workflow

Dify Workflow est un système d'orchestration d'applications IA visuelles qui implémente une logique métier complexe via une combinaison de nœuds et d'arêtes.

Concepts essentiels

  • Nœud (Node) : Unité d'exécution de base du workflow, chaque nœud exécute une fonction spécifique
  • Arête (Edge) : Connecte les nœuds, définit le flux de données et l'ordre d'exécution
  • Variable (Variable) : Transmet des données entre les nœuds
  • DSL (Domain Specific Language) : Langage de définition de workflow au format YAML

Types de workflow

  1. Workflow : Workflow standard, adapté aux traitements multi-étapes complexes
  2. Advanced Chat : Application de dialogue avancée, prise en charge de l'orchestration de workflow
  3. Agent : Agent intelligent, prise de décision autonome et appel d'outils

Modèle d'exécution

  • Piloté par file d'attente (Queue-driven) : Ordonnancement des nœuds basé sur la Ready Queue
  • Piloté par événements (Event-driven) : L'exécution des nœuds génère un flux d'événements
  • Exécution parallèle (Parallel execution) : Prend en charge 2 à 8 threads de travail en parallèle
  • Réponse en flux (Streaming response) : Prise en charge de la sortie en flux en temps réel

Types de nœuds principaux

1. Nœud Start

Fonction : Point d'entrée du workflow, définit les variables d'entrée

Exemple de configuration :

- data:
    desc: ''
    selected: false
    title: Début
    type: start
    variables:
    - label: Saisie utilisateur
      max_length: 1000
      required: true
      type: text-input
      variable: user_input
  id: start
  type: custom

Documentation détaillée : nodes/start.md


2. Nœud LLM

Fonction : Appelle un grand modèle de langage pour le raisonnement et la génération

Exemple de configuration :

- data:
    type: llm
    model:
      provider: openai
      name: gpt-4
      completion_params:
        temperature: 0.7
        max_tokens: 2000
    prompt_template:
    - id: system
      role: system
      text: "Vous êtes un assistant professionnel"
    - id: user
      role: user
      text: "{{#sys.query#}}"
    context:
      enabled: true
      variable_selector: ["knowledge", "result"]
  id: llm

Paramètres clés :

  • model : Configuration du modèle (fournisseur, nom, paramètres)
  • prompt_template : Modèle de prompt (prend en charge les messages système et utilisateur)
  • context : Configuration du contexte (active les résultats de recherche dans la base de connaissances)
  • memory : Configuration de la mémoire de conversation
  • vision : Configuration des capacités visuelles (prend en charge l'entrée d'images)

Documentation détaillée : nodes/llm.md


3. Nœud Agent

Fonction : Agent intelligent, appelle des outils de manière autonome selon les besoins de l'utilisateur

Exemple de configuration :

- data:
    type: agent
    agent_parameters:
      instruction:
        type: constant
        value: "Selon les besoins de l'utilisateur, appelez l'outil approprié pour accomplir la tâche"
      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

Stratégies prises en charge :

  • function_calling : Appel de fonction (recommandé)
  • react : Mode de raisonnement ReAct

Documentation détaillée : nodes/agent.md


4. Nœud Knowledge Retrieval

Fonction : Récupère des informations pertinentes à partir d'une base de connaissances (RAG)

Exemple de configuration :

- 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

Modes de récupération :

  • single : Récupération unique
  • multiple : Récupération multiple

Documentation détaillée : nodes/knowledge-retrieval.md


5. Nœud Code

Fonction : Exécute du code Python ou JavaScript

Exemple de configuration :

- data:
    type: code
    code_language: python3
    code: |
      def main(input_text: str) -> dict:
          # Logique de traitement
          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

Langages pris en charge :

  • Python 3
  • JavaScript (Node.js)

Documentation détaillée : nodes/code.md


6. Nœud HTTP Request

Fonction : Appelle une API HTTP externe

Exemple de configuration :

- 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

Méthodes prises en charge :

  • GET, POST, PUT, DELETE, PATCH

Documentation détaillée : nodes/http-request.md


7. Nœud Tool

Fonction : Appelle des outils intégrés ou personnalisés

Exemple de configuration :

- 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: "fr"
  id: tool

Types d'outils :

  • builtin : Outil intégré
  • api : Outil API
  • workflow : Outil de workflow

Documentation détaillée : nodes/tool.md


8. Nœud If-Else

Fonction : Contrôle de branchement conditionnel

Exemple de configuration :

- data:
    type: if-else
    conditions:
    - variable_selector: ["llm", "text"]
      comparison_operator: contains
      value: "Mot-clé"
    logical_operator: and
  id: condition

Opérateurs pris en charge :

  • contains, not contains
  • is, is not
  • empty, not empty
  • >, <, >=, <=, =, !=

Documentation détaillée : nodes/if-else.md


9. Nœud Iteration

Fonction : Traite de manière itérative des données de type tableau

Exemple de configuration :

- data:
    type: iteration
    iterator_selector: ["start", "items"]
    output_selector: ["iteration_inner", "output"]
    parallel_nums: 3
    error_handle_mode: continue
  id: iteration

Modes de gestion des erreurs :

  • continue : Poursuivre l'exécution
  • stop : Arrêter l'itération

Documentation détaillée : nodes/iteration.md


10. Nœud Answer

Fonction : Affiche le résultat du workflow

Exemple de configuration :

- data:
    type: answer
    answer: "{{#llm.text#}}"
  id: answer

Documentation détaillée : nodes/answer.md


Modèles de conception

1. Modèle de pipeline séquentiel

Cas d'usage : Processus de traitement linéaire simple

Structure :

Début → LLM → Réponse

Exemple : patterns/sequential.md


2. Modèle de branchement conditionnel

Cas d'usage : Exécute différentes logiques de traitement selon des conditions

Structure :

Début → LLM → Si → [Branche A / Branche B] → Réponse

Exemple : patterns/conditional.md


3. Modèle de traitement itératif

Cas d'usage : Traitement par lots de données de type tableau

Structure :

Début → Code → Itération → LLM → Réponse

Exemple : patterns/iterative.md


4. Modèle de récupération de connaissances (RAG)

Cas d'usage : Questions-réponses basées sur une base de connaissances

Structure :

Début → Récupération de connaissances → LLM (avec contexte) → Réponse

Exemple : patterns/rag.md


5. Modèle d'agrégation multi-source

Cas d'usage : Intègre des informations provenant de plusieurs sources de données

Structure :

Début → [Outil1, Outil2, HTTP] → Agrégateur de variables → LLM → Réponse

Exemple : patterns/aggregation.md


Templates de workflow

Questions-réponses simples

Fichier : templates/simple-qa.yml

Description : Workflow de questions-réponses le plus basique

Nœuds : Début → LLM → Réponse


Assistant RAG

Fichier : templates/rag-assistant.yml

Description : Assistant intelligent basé sur une base de connaissances

Nœuds : Début → Récupération de connaissances → LLM → Réponse


Appel d'outils Agent

Fichier : templates/agent-tools.yml

Description : Agent intelligent appelant des outils de manière autonome

Nœuds : Début → Agent → Réponse


Traitement multi-étapes

Fichier : templates/multi-step.yml

Description : Processus de traitement complexe en plusieurs étapes

Nœuds : Début → Code → HTTP → LLM → Si → Réponse


Système de variables

Variables système

{{#sys.query#}}              # Requête utilisateur
{{#sys.files#}}              # Fichiers téléchargés
{{#sys.conversation_id#}}    # ID de conversation
{{#sys.user_id#}}            # ID utilisateur

Variables de nœud

{{#ID_du_nœud.champ_de_sortie#}}  # Référence à la sortie d'un nœud
{{#llm.text#}}                    # Sortie texte du LLM
{{#knowledge.result#}}            # Résultat de la récupération de connaissances
{{#code.output#}}                 # Sortie du nœud de code

Variables de session

{{#conversation.nom_variable#}}   # Variable au niveau de la session

Variables d'environnement

{{#env.API_KEY#}}                 # Variable d'environnement
{{#env.DATABASE_URL#}}            # Connexion à la base de données

Variables d'itération

{{#item#}}                        # Élément d'itération actuel
{{#index#}}                       # Index actuel

Bonnes pratiques

1. Conception modulaire

  • Divisez les processus complexes en plusieurs nœuds indépendants
  • Utilisez des variables pour transmettre les données, évitez le codage en dur
  • Utilisez judicieusement les nœuds de branchement conditionnel et d'itération

2. Conventions de nommage des variables

  • Utilisez des noms de variables significatifs
  • Suivez une convention de nommage uniforme
  • Ajoutez des informations de description si nécessaire

3. Gestion des erreurs

  • Ajoutez une logique de gestion des erreurs dans les nœuds critiques
  • Utilisez des branchements conditionnels pour gérer les cas exceptionnels
  • Fournissez des messages d'erreur conviviaux

4. Optimisation des performances

  • Évitez les appels de nœuds inutiles
  • Utilisez judicieusement les mécanismes de cache
  • Limitez le nombre d'itérations dans les boucles
  • Utilisez des branches parallèles pour améliorer les performances

5. Maintenabilité

  • Ajoutez des descriptions et des commentaires aux nœuds
  • Utilisez des noms de nœuds clairs
  • Gardez la structure du workflow simple
  • Révisez et optimisez régulièrement

Contenu détaillé : best-practices.md


Prochaines étapes


Compétences associées


Version : v1.0.0 Dernière mise à jour : 2026-03-04 Retour : SKILL principal

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

Skills associés