Installer le skill belt CLI :
npx skills add belt-sh/cli
Workflows d'Automatisation IA
Construisez des workflows IA automatisés via la CLI inference.sh.

Démarrage Rapide
Nécessite la CLI inference.sh (
belt). Instructions d'installation
belt login
# Automatisation simple : Générer une image quotidienne
belt app run falai/flux-dev --input '{
"prompt": "Fond de citation inspirante, design minimaliste, date : '"$(date +%Y-%m-%d)"'"
}'
Modèles d'Automatisation
Modèle 1 : Traitement par Lots
Traitez plusieurs éléments avec le même workflow.
#!/bin/bash
# batch_images.sh - Générer des images pour plusieurs prompts
PROMPTS=(
"Paysage de montagne au lever du soleil"
"Vagues océaniques au coucher du soleil"
"Sentier forestier en automne"
"Dunes de désert la nuit"
)
for prompt in "${PROMPTS[@]}"; do
echo "Génération : $prompt"
belt app run falai/flux-dev --input "{
\"prompt\": \"$prompt, photographie professionnelle, 4K\"
}" > "output_${prompt// /_}.json"
sleep 2 # Limitation de débit
done
Modèle 2 : Pipeline Séquentiel
Chaînez plusieurs opérations IA.
#!/bin/bash
# content_pipeline.sh - Pipeline complet de création de contenu
TOPIC="IA dans la santé"
# Étape 1 : Recherche
echo "Recherche..."
RECHERCHE=$(belt app run tavily/search-assistant --input "{
\"query\": \"$TOPIC derniers développements\"
}")
# Étape 2 : Rédiger l'article
echo "Rédaction de l'article..."
ARTICLE=$(belt app run openrouter/claude-sonnet-45 --input "{
\"prompt\": \"Écris un article de blog de 500 mots sur $TOPIC basé sur : $RECHERCHE\"
}")
# Étape 3 : Générer une image
echo "Génération de l'image..."
IMAGE=$(belt app run falai/flux-dev --input "{
\"prompt\": \"Image d'en-tête pour un article sur $TOPIC, moderne, professionnelle\"
}")
# Étape 4 : Créer un post social
echo "Création du post social..."
SOCIAL=$(belt app run openrouter/claude-haiku-45 --input "{
\"prompt\": \"Écris un thread Twitter (5 tweets) résumant : $ARTICLE\"
}")
echo "Pipeline terminé !"
Modèle 3 : Traitement Parallèle
Exécutez plusieurs opérations simultanément.
#!/bin/bash
# parallel_generation.sh - Générer plusieurs ressources en parallèle
# Démarrer tous les jobs en arrière-plan
belt app run falai/flux-dev --input '{"prompt": "Image principale..."}' > hero.json &
PID1=$!
belt app run falai/flux-dev --input '{"prompt": "Image fonctionnalité 1..."}' > feature1.json &
PID2=$!
belt app run falai/flux-dev --input '{"prompt": "Image fonctionnalité 2..."}' > feature2.json &
PID3=$!
# Attendre la fin de tous les jobs
wait $PID1 $PID2 $PID3
echo "Toutes les images ont été générées !"
Modèle 4 : Workflow Conditionnel
Branchez selon les résultats.
#!/bin/bash
# conditional_workflow.sh - Traiter en fonction de l'analyse du contenu
TEXTE_ENTREE="$1"
# Analyser le contenu
ANALYSE=$(belt app run openrouter/claude-haiku-45 --input "{
\"prompt\": \"Classifie ce texte comme : positif, négatif, ou neutre. Retourne uniquement la classification.\n\n$TEXTE_ENTREE\"
}")
# Brancher selon le résultat
case "$ANALYSE" in
*positif*)
echo "Génération d'une image de célébration..."
belt app run falai/flux-dev --input '{"prompt": "Célébration, succès, heureux"}'
;;
*négatif*)
echo "Génération d'un message de soutien..."
belt app run openrouter/claude-sonnet-45 --input "{
\"prompt\": \"Écris une réponse bienveillante et encourageante à : $TEXTE_ENTREE\"
}"
;;
*)
echo "Génération d'un accusé de réception neutre..."
;;
esac
Modèle 5 : Réessai avec Repli
Gérez les échecs avec élégance.
#!/bin/bash
# retry_workflow.sh - Réessayer les opérations échouées
generer_avec_reessai() {
local prompt="$1"
local max_tentatives=3
local tentative=1
while [ $tentative -le $max_tentatives ]; do
echo "Tentative $tentative..."
resultat=$(belt app run falai/flux-dev --input "{\"prompt\": \"$prompt\"}" 2>&1)
if [ $? -eq 0 ]; then
echo "$resultat"
return 0
fi
echo "Échec, nouvelle tentative..."
((tentative++))
sleep $((tentative * 2)) # Backoff exponentiel
done
# Repli vers un modèle différent
echo "Repli vers un modèle alternatif..."
belt app run google/imagen-3 --input "{\"prompt\": \"$prompt\"}"
}
generer_avec_reessai "Un beau coucher de soleil sur les montagnes"
Automatisation Planifiée
Configuration Cron
# Éditer crontab
crontab -e
# Génération quotidienne de contenu à 9h
0 9 * * * /chemin/vers/daily_content.sh >> /var/log/ai-automation.log 2>&1
# Rapport hebdomadaire tous les lundis à 8h
0 8 * * 1 /chemin/vers/weekly_report.sh >> /var/log/ai-automation.log 2>&1
# Toutes les 6 heures : contenu pour les réseaux sociaux
0 */6 * * * /chemin/vers/social_content.sh >> /var/log/ai-automation.log 2>&1
Script de Contenu Quotidien
#!/bin/bash
# daily_content.sh - Exécuté quotidiennement à 9h
DATE=$(date +%Y-%m-%d)
REPERTOIRE_SORTIE="/output/$DATE"
mkdir -p "$REPERTOIRE_SORTIE"
# Générer l'image de citation quotidienne
belt app run falai/flux-dev --input '{
"prompt": "Fond de citation motivante, minimaliste, ambiance matinale"
}' > "$REPERTOIRE_SORTIE/quote_image.json"
# Générer le conseil quotidien
belt app run openrouter/claude-haiku-45 --input '{
"prompt": "Donne-moi un conseil de productivité exploitable pour aujourd'hui. Sois concis."
}' > "$REPERTOIRE_SORTIE/daily_tip.json"
# Publier sur les réseaux (optionnel)
# belt app run twitter/post-tweet --input "{...}"
echo "Contenu quotidien généré : $DATE"
Surveillance et Journalisation
Wrapper de Journalisation
#!/bin/bash
# logged_workflow.sh - Avec journalisation complète
FICHIER_LOG="/var/log/ai-workflow-$(date +%Y%m%d).log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$FICHIER_LOG"
}
log "Démarrage du workflow"
# Suivre le temps d'exécution
TEMPS_DEBUT=$(date +%s)
# Exécuter le workflow
log "Génération de l'image..."
RESULTAT=$(belt app run falai/flux-dev --input '{"prompt": "test"}' 2>&1)
STATUT=$?
if [ $STATUT -eq 0 ]; then
log "Succès : Image générée"
else
log "Erreur : $RESULTAT"
fi
TEMPS_FIN=$(date +%s)
DUREE=$((TEMPS_FIN - TEMPS_DEBUT))
log "Terminé en ${DUREE}s"
Alerte d'Erreur
#!/bin/bash
# monitored_workflow.sh - Avec alertes d'erreur
executer_avec_alerte() {
local resultat
resultat=$("$@" 2>&1)
local statut=$?
if [ $statut -ne 0 ]; then
# Envoyer une alerte (webhook, email, etc.)
curl -X POST "https://votre-webhook.com/alert" \
-H "Content-Type: application/json" \
-d "{\"error\": \"$resultat\", \"command\": \"$*\"}"
fi
echo "$resultat"
return $statut
}
executer_avec_alerte belt app run falai/flux-dev --input '{"prompt": "test"}'
Automatisation via SDK Python
#!/usr/bin/env python3
# automation.py - Workflow basé sur Python
import subprocess
import json
from datetime import datetime
from pathlib import Path
def run_infsh(app_id: str, input_data: dict) -> dict:
"""Exécuter une application inference.sh et retourner le résultat."""
resultat = subprocess.run(
["belt", "app", "run", app_id, "--input", json.dumps(input_data)],
capture_output=True,
text=True
)
return json.loads(resultat.stdout) if resultat.returncode == 0 else None
def pipeline_contenu_quotidien():
"""Générer du contenu quotidien."""
date_str = datetime.now().strftime("%Y-%m-%d")
repertoire_sortie = Path(f"output/{date_str}")
repertoire_sortie.mkdir(parents=True, exist_ok=True)
# Générer l'image
image = run_infsh("falai/flux-dev", {
"prompt": f"Inspiration quotidienne pour {date_str}, belle, édifiante"
})
(repertoire_sortie / "image.json").write_text(json.dumps(image))
# Générer la légende
legende = run_infsh("openrouter/claude-haiku-45", {
"prompt": "Écris une légende inspirante pour un post de motivation quotidien. 2-3 phrases."
})
(repertoire_sortie / "caption.json").write_text(json.dumps(legende))
print(f"Contenu généré pour {date_str}")
if __name__ == "__main__":
pipeline_contenu_quotidien()
Templates de Workflow
Automatisation de Calendrier de Contenu
#!/bin/bash
# content_calendar.sh - Générer une semaine de contenu
SUJETS=("productivité" "bien-être" "technologie" "créativité" "leadership")
JOURS=("Lundi" "Mardi" "Mercredi" "Jeudi" "Vendredi")
for i in "${!JOURS[@]}"; do
JOUR=${JOURS[$i]}
SUJET=${SUJETS[$i]}
echo "Génération du contenu du $JOUR sur $SUJET..."
# Image
belt app run falai/flux-dev --input "{
\"prompt\": \"Thème $SUJET, motivation $JOUR, style réseaux sociaux\"
}" > "content/${JOUR}_image.json"
# Légende
belt app run openrouter/claude-haiku-45 --input "{
\"prompt\": \"Écris un post de motivation pour $JOUR sur $SUJET. Inclus des hashtags.\"
}" > "content/${JOUR}_caption.json"
done
Pipeline de Traitement de Données
#!/bin/bash
# data_processing.sh - Traiter et analyser les fichiers de données
REPERTOIRE_ENTREE="./data/raw"
REPERTOIRE_SORTIE="./data/processed"
for fichier in "$REPERTOIRE_ENTREE"/*.txt; do
nom_fichier=$(basename "$fichier" .txt)
# Analyser le contenu
belt app run openrouter/claude-haiku-45 --input "{
\"prompt\": \"Analyse ces données et fournis des informations clés au format JSON : $(cat $fichier)\"
}" > "$REPERTOIRE_SORTIE/${nom_fichier}_analysis.json"
done
Bonnes Pratiques
- Limitation de débit - Ajoutez des délais entre les appels API
- Gestion des erreurs - Vérifiez toujours les codes de retour
- Journalisation - Suivez toutes les opérations
- Idempotence - Concevez pour des réexécutions sûres
- Surveillance - Alertez en cas d'échec
- Sauvegardes - Sauvegardez les résultats intermédiaires
- Délais d'attente - Définissez des limites raisonnables
Skills Connexes
# Pipelines de contenu
npx skills add inference-sh/skills@ai-content-pipeline
# Pipelines RAG
npx skills add inference-sh/skills@ai-rag-pipeline
# Automatisation des réseaux sociaux
npx skills add inference-sh/skills@ai-social-media-content
# Skill complet de la plateforme
npx skills add inference-sh/skills@infsh-cli
Parcourez toutes les applications : belt app list