Code Block
Le node Code Block vous permet d'écrire et d'exécuter du code Python personnalisé dans votre workflow, avec des entrées/sorties dynamiques, plus de 94 packages et un environnement de test intégré.
À quoi sert le node Code Block ?
Le node Code Block vous permet d’écrire et d’exécuter du code Python personnalisé directement dans votre workflow. Lorsque les nodes intégrés ne couvrent pas votre cas d’usage spécifique, Code Block vous offre toute la flexibilité de la programmation avec accès à plus de 94 packages Python.
Cas d’usage courants :
- Transformer des données d’une manière que les nodes standard ne peuvent pas gérer (parsing personnalisé, reformatage, calculs)
- Exécuter des analyses de données ou des calculs statistiques avec NumPy, Pandas ou SciPy
- Scraper ou traiter du contenu web avec BeautifulSoup et Requests
- Appliquer une logique métier personnalisée, des algorithmes de scoring ou des règles de validation aux données du workflow
Configuration rapide
Ajoutez le node au canvas
Ouvrez la bibliothèque de nodes, allez dans Tools > Advanced, puis glissez-déposez le node Code Block sur votre espace de travail.
Définissez vos entrées
Ouvrez les paramètres du node et cliquez sur Open Code Editor. Dans l’éditeur, ajoutez les entrées dont votre code a besoin via la section Inputs à gauche. Chaque entrée a un nom (format identifiant Python) et peut être marquée comme obligatoire ou optionnelle.
Écrivez votre code
Écrivez votre code Python dans l’éditeur. La signature de fonction (def run(...)) et l’instruction return sont auto-générées — vous n’écrivez que le corps de la fonction. Vos entrées sont disponibles en tant que paramètres de la fonction.
Définissez vos sorties
Ajoutez les noms de sortie dans la section Outputs. Ceux-ci deviennent les valeurs que votre code renvoie aux nodes en aval. Une seule sortie renvoie la valeur directement ; plusieurs sorties renvoient un dictionnaire.
Testez votre code
Utilisez le panneau Test intégré sur le côté droit de l’éditeur. Fournissez des valeurs de test pour vos entrées et cliquez sur Run Test pour voir la sortie, stdout, stderr et le temps d’exécution.
Connectez au workflow
Connectez les nodes en amont pour fournir les données d’entrée, et connectez la sortie aux nodes en aval qui utiliseront vos résultats.
Paramètres de configuration
Éditeur de code
Code python required Code Python — Le code personnalisé à exécuter. Vous n’écrivez que le corps de la fonction — la signature et l’instruction return sont auto-générées en fonction de vos entrées et sorties. Le code s’exécute dans un environnement Python sandboxé avec accès à plus de 94 packages.
Inputs dynamic required Paramètres d’entrée — Définissez jusqu’à 10 variables d’entrée que votre code reçoit des nodes en amont. Chaque entrée possède :
- Name : Doit être un identifiant Python valide (minuscules, lettres/chiffres/underscores, commence par une lettre)
- Required/Optional : Les entrées obligatoires doivent être fournies ; les entrées optionnelles ont la valeur par défaut
None
Outputs dynamic required Variables de sortie — Définissez jusqu’à 5 variables de sortie que votre code renvoie aux nodes en aval. Les noms suivent les mêmes règles d’identifiant Python. Si vous définissez une seule sortie, sa valeur est renvoyée directement. Si vous définissez plusieurs sorties, elles sont renvoyées sous forme de dictionnaire.
Timeout number default: 60 Timeout (secondes) — Temps d’exécution maximum pour votre code (1–300 secondes). Si le code prend plus de temps, il est interrompu et une erreur est renvoyée.
N’écrivez pas d’instructions return dans le corps du code. Le return est auto-généré à partir de vos définitions de sortie. Si vous définissez les sorties result et count, le return généré est : return {"result": result, "count": count}.
Packages Python disponibles
L’environnement Code Block inclut plus de 94 packages pré-installés. Voici les packages principaux que vous pouvez utiliser directement :
| Package | Version | Catégorie |
|---|---|---|
aiohttp | 3.13.3 | HTTP / Async |
beautifulsoup4 | 4.14.3 | Web Scraping |
bokeh | 3.8.2 | Visualisation |
gensim | 4.4.0 | NLP |
imageio | 2.37.3 | Image I/O |
joblib | 1.5.3 | Parallélisme |
librosa | 0.11.0 | Audio |
matplotlib | 3.10.8 | Visualisation |
nltk | 3.9.3 | NLP |
numpy | 2.4.3 | Data Science |
opencv-python | 4.13.0.92 | Image/Vidéo |
openpyxl | 3.1.5 | Fichiers Excel |
pandas | 3.0.1 | Data Science |
plotly | 6.6.0 | Visualisation |
pytest | 9.0.2 | Tests |
python-docx | 1.2.0 | Documents Word |
pytz | 2026.1 | Fuseaux horaires |
requests | 2.32.5 | HTTP |
scikit-image | 0.26.0 | Traitement d’image |
scikit-learn | 1.8.0 | Machine Learning |
scipy | 1.17.1 | Calcul scientifique |
seaborn | 0.13.2 | Visualisation |
soundfile | 0.13.1 | Audio I/O |
spacy | 3.8.11 | NLP |
textblob | 0.19.0 | NLP |
urllib3 | 2.6.3 | HTTP |
xlrd | 2.0.2 | Fichiers Excel |
Voir les 94+ packages (dépendances incluses)
| Package | Version |
|---|---|
aiohappyeyeballs | 2.6.1 |
aiohttp | 3.13.3 |
aiosignal | 1.4.0 |
annotated-doc | 0.0.4 |
annotated-types | 0.7.0 |
attrs | 25.4.0 |
audioread | 3.1.0 |
beautifulsoup4 | 4.14.3 |
blis | 1.3.3 |
bokeh | 3.8.2 |
catalogue | 2.0.10 |
certifi | 2026.2.25 |
cffi | 2.0.0 |
charset-normalizer | 3.4.5 |
click | 8.3.1 |
cloudpathlib | 0.23.0 |
confection | 0.1.5 |
contourpy | 1.3.3 |
cycler | 0.12.1 |
cymem | 2.0.13 |
decorator | 5.2.1 |
et-xmlfile | 2.0.0 |
fonttools | 4.62.0 |
frozenlist | 1.8.0 |
gensim | 4.4.0 |
idna | 3.11 |
imageio | 2.37.3 |
iniconfig | 2.3.0 |
jinja2 | 3.1.6 |
joblib | 1.5.3 |
kiwisolver | 1.5.0 |
lazy-loader | 0.5 |
librosa | 0.11.0 |
llvmlite | 0.46.0 |
lxml | 6.0.2 |
markdown-it-py | 4.0.0 |
markupsafe | 3.0.3 |
matplotlib | 3.10.8 |
mdurl | 0.1.2 |
msgpack | 1.1.2 |
multidict | 6.7.1 |
murmurhash | 1.0.15 |
narwhals | 2.17.0 |
networkx | 3.6.1 |
nltk | 3.9.3 |
numba | 0.64.0 |
numpy | 2.4.3 |
opencv-python | 4.13.0.92 |
openpyxl | 3.1.5 |
packaging | 26.0 |
pandas | 3.0.1 |
pillow | 12.1.1 |
platformdirs | 4.9.4 |
plotly | 6.6.0 |
pluggy | 1.6.0 |
pooch | 1.9.0 |
preshed | 3.0.12 |
propcache | 0.4.1 |
pycparser | 3.0 |
pydantic | 2.12.5 |
pydantic-core | 2.41.5 |
pygments | 2.19.2 |
pyparsing | 3.3.2 |
pytest | 9.0.2 |
python-dateutil | 2.9.0 |
python-docx | 1.2.0 |
pytz | 2026.1 |
pyyaml | 6.0.3 |
regex | 2026.2.28 |
requests | 2.32.5 |
rich | 14.3.3 |
scikit-image | 0.26.0 |
scikit-learn | 1.8.0 |
scipy | 1.17.1 |
seaborn | 0.13.2 |
shellingham | 1.5.4 |
six | 1.17.0 |
smart-open | 7.5.1 |
soundfile | 0.13.1 |
soupsieve | 2.8.3 |
soxr | 1.0.0 |
spacy | 3.8.11 |
spacy-legacy | 3.0.12 |
spacy-loggers | 1.0.5 |
srsly | 2.5.2 |
textblob | 0.19.0 |
thinc | 8.3.10 |
threadpoolctl | 3.6.0 |
tifffile | 2026.3.3 |
tornado | 6.5.4 |
tqdm | 4.67.3 |
typer | 0.24.1 |
typing-extensions | 4.15.0 |
urllib3 | 2.6.3 |
wasabi | 1.1.3 |
weasel | 0.4.3 |
wrapt | 2.1.2 |
xlrd | 2.0.2 |
xyzservices | 2025.11.0 |
yarl | 1.23.0 |
Que produit le node en sortie ?
Le format de sortie dépend du nombre de sorties que vous définissez :
Sortie unique (ex. result) :
"The processed value"
La valeur est renvoyée directement au node en aval connecté.
Sorties multiples (ex. summary et score) :
{
"summary": "The article covers SEO best practices...",
"score": 85
}
Chaque sortie devient un point de connexion distinct sur le node.
(dynamic) varies Le type de sortie dépend de ce que votre code Python renvoie. Il peut s’agir d’une chaîne de caractères, d’un nombre, d’une liste, d’un dictionnaire ou de toute valeur sérialisable en JSON.
Exemples d’utilisation
Exemple 1 : Calculer un score de lisibilité
Vous souhaitez calculer un score de lisibilité personnalisé pour du contenu d’article qu’aucun node intégré ne fournit.
Entrées : text (obligatoire)
Sorties : score, level
Code :
words = text.split()
sentences = text.count('.') + text.count('!') + text.count('?')
if sentences == 0:
sentences = 1
avg_words_per_sentence = len(words) / sentences
score = max(0, min(100, 100 - (avg_words_per_sentence - 15) * 5))
level = "Easy" if score > 70 else "Medium" if score > 40 else "Hard"
Exemple 2 : Parser et restructurer des données JSON
Vous recevez du JSON complexe d’une API et devez extraire et restructurer des champs spécifiques.
Entrées : raw_data (obligatoire)
Sorties : cleaned
Code :
import json
data = json.loads(raw_data)
cleaned = json.dumps([
{"name": item["full_name"], "email": item["contact"]["email"]}
for item in data["results"]
if item.get("active", False)
])
Exemple 3 : Analyser une image avec OpenCV
Extraire les couleurs dominantes d’une image de produit.
Entrées : image_url (obligatoire)
Sorties : colors
Code :
import requests
import numpy as np
import cv2
from collections import Counter
response = requests.get(image_url)
img_array = np.frombuffer(response.content, np.uint8)
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pixels = img_rgb.reshape(-1, 3)
rounded = (pixels // 32 * 32).tolist()
most_common = Counter(map(tuple, rounded)).most_common(5)
colors = [{"rgb": list(c), "frequency": f} for c, f in most_common]
Bonnes pratiques
Testez toujours avant de déployer. Utilisez le panneau de test intégré pour vérifier que votre code fonctionne avec des données réelles avant de l’exécuter dans un workflow. Cela économise des crédits d’exécution et du temps de débogage.
Gardez votre code ciblé. Chaque Code Block devrait faire une seule chose bien. Si votre code dépasse 50 lignes, envisagez de le diviser en plusieurs nodes Code Block pour plus de clarté et de réutilisabilité.
Utilisez des noms d’entrée/sortie significatifs. Des noms comme text et score sont bien plus clairs que x et y lors de la lecture du canvas de workflow et de la connexion des nodes.
N’écrivez pas d’instructions return. Le return est auto-généré. Écrire votre propre return provoquera une erreur de validation et empêchera la sauvegarde ou le test.
Surveillez votre timeout. Les opérations complexes (traitement de grandes données, appels API multiples) peuvent dépasser le timeout par défaut de 60 secondes. Augmentez-le dans les paramètres si nécessaire, jusqu’à 300 secondes maximum.
Ne stockez pas de secrets dans le code. Évitez de coder en dur des clés API ou des mots de passe. Utilisez plutôt les variables de workflow ou les credentials d’intégration.
Problèmes courants
Mon code fonctionne dans le panneau de test mais échoue dans le workflow
Cause : Le panneau de test utilise des valeurs statiques, mais le workflow transmet des types ou formats de données différents.
Solution : Vérifiez les données réelles provenant des nodes en amont. Utilisez type() et print() en mode test pour vérifier. Les valeurs d’entrée provenant d’autres nodes sont souvent des chaînes de caractères — vous devrez peut-être utiliser json.loads() pour parser les données JSON.
J'obtiens une erreur de timeout
Cause : Votre code prend plus de temps que le timeout configuré.
Solution : Augmentez le timeout dans les paramètres (jusqu’à 300 secondes). Si le code est intrinsèquement lent, optimisez-le : réduisez la taille des données, évitez les boucles inutiles ou utilisez des opérations vectorisées avec NumPy/Pandas.
Je ne peux pas sauvegarder ni tester — le bouton est désactivé
Cause : Le corps de votre code contient une instruction return, ce qui n’est pas autorisé (le return est auto-généré).
Solution : Supprimez toute instruction return de votre code. À la place, assignez des valeurs à vos noms de variables de sortie et elles seront renvoyées automatiquement.
Un package dont j'ai besoin n'est pas disponible
Cause : L’environnement sandboxé dispose d’un ensemble fixe de plus de 94 packages.
Solution : Cliquez sur “View available packages” pour voir la liste complète. Si votre package n’est pas disponible, essayez une alternative (ex. utilisez requests au lieu de httpx). Pour des besoins très spécifiques, envisagez d’utiliser le node API Connector à la place.
Ma sortie est vide ou None
Cause : La variable de sortie n’a pas reçu de valeur dans tous les chemins du code.
Solution : Assurez-vous que vos variables de sortie sont assignées dans chaque branche de votre code (y compris les cas d’erreur). Utilisez des instructions print() dans le panneau de test pour déboguer le flux d’exécution.
Comment s’intègre-t-il dans un workflow ?
Code Block est un node polyvalent qui peut être placé n’importe où dans un workflow pour du traitement de données personnalisé :
graph LR
Input[Source de données] --> Code[Code Block : Logique personnalisée]
Code --> Next[LLM / Sortie / Étape suivante]
Nodes associés
Pour appeler des API externes sans écrire de code. Utilisez Code Block quand vous avez besoin d’une logique de traitement personnalisée.
Pour l’extraction simple de champs JSON. Utilisez Code Block quand vous avez besoin de transformations complexes.
Pour des remplacements de texte simples. Utilisez Code Block quand vous avez besoin de regex ou de traitement de texte complexe.
Pour le traitement de texte par IA. Combinez avec Code Block pour le pré/post-traitement des entrées/sorties du LLM.