NƓuds d'action

NƓuds non-LLM programmatiques pour des opĂ©rations de flux de travail dĂ©terministes. Les nƓuds d'action complĂštent les LLM agents en gĂ©rant la transformation de donnĂ©es, les API intĂ©grations, le flux de contrĂŽle et la logique d'automatisation.

Aperçu

Les nƓuds d'action sont visuellement distincts des LLM nƓuds d'agent — ils utilisent des couleurs et des icĂŽnes uniques pour faciliter la lecture des flux de travail. Chaque type de nƓud gĂšre une catĂ©gorie d'opĂ©ration spĂ©cifique, des HTTP requĂȘtes aux requĂȘtes de base de donnĂ©es en passant par le branchement conditionnel.

Tous les nƓuds d'action partagent un ensemble de propriĂ©tĂ©s standard pour la gestion des erreurs, le traçage, le contrĂŽle d'exĂ©cution et le mappage d'E/S. Ils prennent en charge l'{{variable}} interpolation dans les champs de chaĂźne et reçoivent automatiquement les sorties des nƓuds prĂ©dĂ©cesseurs.

Flux de travail des nƓuds d'action

NƓuds disponibles

NƓudIcîneCouleurDescription
DĂ©clencheur🎯IndigoPoint d'entrĂ©e du workflow (manuel, webhook, planification, Ă©vĂ©nement)
HTTP🌐BleuEffectue des requĂȘtes HTTP vers des APIs externes
DĂ©finir📝VioletDĂ©finir et manipuler les variables d'Ă©tat du workflow
Transformer⚙RoseTransformer les donnĂ©es Ă  l'aide d'expressions ou d'opĂ©rations intĂ©grĂ©es
Commutateur🔀AmbreBranchement conditionnel basĂ© sur des conditions
Boucle🔄ÉmeraudeItĂ©rer sur des tableaux ou rĂ©pĂ©ter des opĂ©rations
Fusionner🔗CyanCombiner plusieurs branches en un seul flux
Attendre⏱GrayMettre en pause le flux de travail pour une durĂ©e ou une condition
CodeđŸ’»RedExĂ©cuter JavaScript personnalisĂ© dans un environnement d'exĂ©cution sandboxĂ©
Base de donnĂ©esđŸ—„ïžTealOpĂ©rations de base de donnĂ©es (PostgreSQL, MySQL, SQLite, MongoDB, Redis)
E-mail📧RoseEnvoyer des e-mails via SMTP ou surveiller via IMAP
Notification🔔OrangeEnvoyer vers Slack, Discord, Teams, ou des webhooks
RSS📡LimeSurveiller les flux RSS/Atom pour de nouvelles entrĂ©es
Fichier📁SkyOpĂ©rations de fichier sur le stockage local ou cloud (S3, GCS, Azure)

Propriétés standard

Chaque nƓud d'action hĂ©rite de ces propriĂ©tĂ©s partagĂ©es :

Identité

PropriétéTypeRÎle
idstringIdentifiant unique
namestringNom d'affichage
descriptionstring?Description optionnelle de l'info-bulle

Gestion des erreurs

ModeComportement
stopArrĂȘter le workflow en cas d'erreur (par dĂ©faut)
continueEnregistrer l'erreur et passer au nƓud suivant
retryRéessayer avec un nombre configurable (1-10) et un délai (ms)
fallbackUtiliser une valeur de repli en cas d'erreur

Traçage

PropriétéTypeRÎle
enabledbooleanActiver les traces d'exécution détaillées
logLevelnone | error | info | debugNiveau de verbosité des logs

ContrÎle d'exécution

PropriétéTypeRÎle
timeoutnumberDélai d'attente en ms (par défaut : 30000)
conditionstring?Ignorer le nƓud si l'expression est Ă©valuĂ©e Ă  faux

Mappage Entrée/Sortie

PropriétéTypeRÎle
inputMappingRecord<string, string>?Mappe les champs d'Ă©tat aux entrĂ©es du nƓud
outputKeystringClĂ© oĂč le rĂ©sultat est stockĂ© dans l'Ă©tat du workflow

RĂ©fĂ©rence des NƓuds

NƓud DĂ©clencheur 🎯

Point d'entrĂ©e du workflow. Chaque workflow commence par un nƓud dĂ©clencheur. Consultez le Guide des DĂ©clencheurs dĂ©diĂ© pour plus de dĂ©tails.

Type de déclencheurDescription
ManuelInitiée par l'utilisateur via une entrée de chat
WebhookHTTP endpoint (POST/GET) avec authentification optionnelle
PlanificationSynchronisation basée sur Cron avec prise en charge des fuseaux horaires
ÉvĂ©nementÉvĂ©nements de systĂšme externe avec filtrage JSONPath

HTTP Node 🌐

Effectue HTTP des requĂȘtes vers des APIs externes avec une gestion complĂšte de l'authentification, des en-tĂȘtes, du corps et de la rĂ©ponse.

Configuration :

PropriétéTypeRÎle
methodGET, POST, PUT, PATCH, DELETEMéthode HTTP
urlstringURL avec interpolation {{variable}}
authobjetAuthentification (aucune, bearer, basic, api_key)
headersRecord<string, string>En-tĂȘtes de requĂȘte
bodyobjetCorps (aucun, json, formulaire, brut)
responseobjetGestion de la réponse (json, texte, binaire) avec extraction JSONPath optionnelle
rateLimitobjet ?Limitation de dĂ©bit (requĂȘtes par fenĂȘtre)

Exemple :

{
  "type": "http",
  "name": "Fetch User Data",
  "method": "GET",
  "url": "https://api.example.com/users/{{userId}}",
  "auth": {
    "type": "bearer",
    "bearer": { "token": "{{API_TOKEN}}" }
  },
  "headers": { "Accept": "application/json" },
  "body": { "type": "none" },
  "response": { "type": "json", "jsonPath": "$.data" },
  "errorHandling": { "mode": "retry", "retryCount": 3, "retryDelay": 1000 },
  "mapping": { "outputKey": "userData" }
}

NƓud Set 📝

Définit et manipule les variables d'état du workflow. Prend en charge les valeurs littérales, les expressions et les secrets.

Configuration :

PropriétéTypeRÎle
modeset, merge, deleteOpération sur les variables
variablesVariable[]Liste des variables à définir
envVarsobject?Charger depuis le fichier .env avec un filtre de préfixe optionnel

Types de variables : string, number, boolean, json, expression

Les variables marquées isSecret: true sont masquées dans les journaux et l'interface utilisateur.

NƓud de transformation ⚙

Transforme les données à l'aide d'expressions ou d'opérations intégrées.

Types de transformations :

Type de valeurRĂŽle
jsonpathExpression JSONPath
jmespathExpression JMESPath
templateModĂšle de chaĂźne avec interpolation
javascriptJavaScript expression

Opérations intégrées : pick, omit, rename, flatten, sort, unique

Cibles de conversion de type : string, number, boolean, array, object

NƓud Switch 🔀

Branchement conditionnel avec plusieurs ports de sortie. Chaque condition correspond à un port de sortie distinct sur le nƓud.

Panneau des propriétés du Switch

Configuration :

PropriétéTypeRÎle
evaluationModefirst_match | all_matchArrĂȘter Ă  la premiĂšre correspondance ou tout Ă©valuer
conditionsSwitchCondition[]Liste de conditions avec des ports de sortie
defaultBranchstring?Port de sortie lorsqu'aucune condition ne correspond

Opérateurs de condition : eq, neq, gt, lt, gte, lte, contains, startsWith, endsWith, matches, in, empty, exists

Exemple :

{
  "type": "switch",
  "evaluationMode": "first_match",
  "conditions": [
    { "id": "ok", "name": "Success", "field": "status", "operator": "eq", "value": "success", "outputPort": "success" },
    { "id": "err", "name": "Error", "field": "status", "operator": "eq", "value": "error", "outputPort": "error" }
  ],
  "defaultBranch": "unknown"
}

NƓud de boucle 🔄

ItÚre sur des tableaux, se répÚte un nombre fixe de fois, ou boucle tant qu'une condition est remplie.

Types de boucles :

Type de valeurRĂŽle
forEachItérer sur un tableau à partir de l'état
whileBoucler tant que la condition est vraie
timesRépéter N fois

Exécution parallÚle : Activer parallel.enabled avec les options batchSize et delayBetween pour une itération concurrente.

Agrégation des résultats : Lorsque results.collect est vrai, les résultats de l'itération sont collectés dans un tableau sous results.aggregationKey.

NƓud de fusion 🔗

Combine plusieurs branches parallÚles en un seul flux. PossÚde plusieurs ports d'entrée.

Modes de fusion :

ModeComportement
wait_allAttend toutes les branches entrantes
wait_anyContinue lorsque la premiÚre branche est terminée
wait_nContinuer aprÚs N embranchements terminés

Combiner les stratégies : array, object, first, last

Délai d'attente optionnel avec continue ou error comportement.

NƓud d'attente ⏱

Met en pause l'exécution du workflow.

Types d'attente :

Type de valeurRĂŽle
fixedAttendre une durée fixe (ms, s, m, h)
untilAttendre jusqu'à un horodatage spécifique
webhookAttendre un webhook entrant
conditionVérifier une condition à intervalles réguliers

Code Node đŸ’»

Exécute du code personnalisé JavaScript dans un environnement d'exécution isolé boa_engine. L'état du graphe est injecté en tant qu'objet global input.

Configuration :

PropriétéTypeRÎle
languagejavascript, typescriptLangage du code
codestringCode à exécuter
sandboxobjetLimites de sécurité (réseau, systÚme de fichiers, mémoire, temps)

ParamÚtres par défaut du bac à sable :

LimiteDéfaut
AccÚs réseaufaux
AccĂšs au systĂšme de fichiersfaux
Limite de mémoire128 MB
Limite de temps5000 ms

NƓud de base de donnĂ©es đŸ—„ïž

Effectue des opĂ©rations de base de donnĂ©es avec un pool de connexions et des requĂȘtes paramĂ©trĂ©es.

Bases de données prises en charge :

Base de donnéesPiloteFonctionnalités
PostgreSQLsqlx (postgres)Pool asynchrone, requĂȘtes paramĂ©trĂ©es, ligne-Ă -JSON
MySQLsqlx (mysql)Pool asynchrone, requĂȘtes paramĂ©trĂ©es, ligne-Ă -JSON
SQLitesqlx (sqlite)Pool asynchrone, requĂȘtes paramĂ©trĂ©es, ligne vers JSON
MongoDBmongodbBSON natif, rechercher/insérer/mettre à jour/supprimer
RedisredisGET, SET, DEL, HGET, HSET, LPUSH, LRANGE

Les chaßnes de connexion sont traitées comme des secrets et masquées dans les journaux.

NƓud Email 📧

Envoyez des e-mails via SMTP ou surveillez les e-mails entrants via IMAP.

Mode d'envoi (SMTP) :

  • Prise en charge TLS/SSL
  • Authentification
  • Destinataires À/CC/BCC
  • Corps HTML ou texte brut
  • Interpolation {{variable}} dans l'objet et le corps
  • PiĂšces jointes Ă  partir de l'Ă©tat

Mode de surveillance (IMAP) :

  • SĂ©lection de dossier (par dĂ©faut : INBOX)
  • Filtres : expĂ©diteur, objet, plage de dates, non lus uniquement
  • Marquer comme lu aprĂšs traitement

NƓud de Notification 🔔

Envoie des notifications aux plateformes de messagerie.

Canaux : Slack, Discord, Microsoft Teams, webhook personnalisé

Formats de message : texte brut, markdown, blocs spécifiques à la plateforme (Block Kit, Embeds, Adaptive Cards)

NƓud RSS 📡

Surveille les flux RSS/Atom pour les nouvelles entrées.

  • Intervalle d'interrogation configurable
  • Filtres par mot-clĂ©, auteur, catĂ©gorie et date
  • Suivi des Ă©lĂ©ments vus pour Ă©viter les doublons
  • Contenu complet ou rĂ©sumĂ© uniquement (optionnel)

NƓud de Fichier 📁

Opérations de fichier sur le stockage local ou cloud.

Opérations : lire, écrire, supprimer, lister

Fournisseurs cloud : Amazon S3, Google Cloud Storage, Azure Blob Storage

Formats de fichier : JSON, CSV, XML, texte, binaire (avec options d'analyse CSV pour le dĂ©limiteur, les en-tĂȘtes, les guillemets)


Interpolation de Variables

Tous les champs de chaüne dans les nƓuds d'action supportent la syntaxe {{variable}} pour les valeurs dynamiques :

https://api.example.com/users/{{userId}}
Bearer {{API_TOKEN}}
Hello {{user.name}}, your order {{orderId}} is ready.

Les variables sont résolues à partir de l'état du workflow au moment de l'exécution. La notation par points (user.name) accÚde aux valeurs imbriquées.

NƓuds Multi-Ports

Deux types de nƓuds ont des nombres de ports dynamiques :

  • Switch — un port de sortie par condition, plus un port par dĂ©faut optionnel
  • Merge — plusieurs ports d'entrĂ©e, un par branche entrante

Ces ports sont reprĂ©sentĂ©s visuellement sur le nƓud et se connectent Ă  diffĂ©rents nƓuds en aval/amont.


Génération de Code

Les nƓuds d'action compilent en code Rust de production aux cĂŽtĂ©s des LLM agents. Les dĂ©pendances sont auto-dĂ©tectĂ©es et ajoutĂ©es au Cargo.toml gĂ©nĂ©rĂ©.

NƓudCrateCe qu'il gĂ©nĂšre
HTTPreqwestRequĂȘtes HTTP asynchrones avec authentification, en-tĂȘtes, corps, extraction JSONPath
Base de donnĂ©essqlx / mongodb / redisPools de connexions, requĂȘtes paramĂ©trĂ©es, commandes Redis
Courriellettre / imapSMTP envoi avec TLS; surveillance IMAP avec filtres de recherche
Codeboa_engineExécution embarquée de JavaScript avec l'état du graphe comme objet input
DéfinirnatifAffectation de variable (littéral, expression, secret)
TransformernatifMapper, filtrer, trier, réduire, aplatir, grouper, sélectionner, fusionner, modÚle
FusionnatifCombinaison de branches (waitAll, waitAny, append)

Tout le code généré utilise adk-graph FunctionNode closures avec GraphError::NodeExecutionFailed pour la gestion des erreurs.

Exemple de code généré (HTTP node) :

let http_node = FunctionNode::new("fetch_data", |ctx| async move {
    let client = reqwest::Client::new();
    let resp = client.get("https://api.example.com/data")
        .bearer_auth(&ctx.get("API_TOKEN").unwrap_or_default())
        .send().await
        .map_err(|e| GraphError::NodeExecutionFailed {
            node: "fetch_data".into(),
            message: e.to_string(),
        })?;
    let body: serde_json::Value = resp.json().await?;
    Ok(NodeOutput::new().with_update("apiData", body))
});

Exemple de code généré (Code node) :

let code_node = FunctionNode::new("process", |ctx| async move {
    let mut js_ctx = boa_engine::Context::default();
    // Graph state injected as global `input` object
    // User code executed in thread-isolated sandbox
    Ok(NodeOutput::new().with_update("result", output))
});

PrĂ©cĂ©dent : ← Studio | Suivant : Triggers →

NƓuds d'action - Documentation ADK-Rust | ADK-Rust