AI Kit embarque deux moteurs de workflow derrière une façade unique,Documentation Index
Fetch the complete documentation index at: https://ai.aidalinfo.fr/llms.txt
Use this file to discover all available pages before exploring further.
WorkflowKit :
legacy(défaut) — le moteur en mémoire que vous construisez aveccreateWorkflow/WorkflowBuilder. Zéro dépendance supplémentaire, s’exécute en mémoire, l’état vit en mémoire.world— le Vercel Workflow SDK adossé à un world durable : Postgres auto-hébergé (@workflow/world-postgres) ou MongoDB (@workflow-worlds/mongodb). Les runs survivent aux redémarrages (replay durable, file de jobs, journal d’événements).
WorkflowKit vous permet de choisir le moteur via la configuration ; le défaut est toujours legacy, donc le code existant continue de fonctionner et les utilisateurs du mode legacy n’importent jamais une dépendance Vercel.
Quand utiliser lequel
legacy (défaut) | world | |
|---|---|---|
| Persistance | En mémoire uniquement | Durable (Postgres / MongoDB) |
| Survit aux redémarrages / crashs | Non | Oui (replay) |
| Dépendances supplémentaires | Aucune | @ai_kit/workflow-world + workflow + un backend world |
| Étape de build | Aucune | Build Nitro requis (compile "use workflow") |
| Runtime | Quelconque (en process) | Worker long-lived (pas serverless) |
| Écriture | Builder createWorkflow().then(...) | Fonctions "use workflow" / "use step" |
legacy pour l’orchestration rapide en process et le développement local ; utilisez world quand vous avez besoin de durabilité, de suspension (sleep) et de processus longs reprennables.
La façade WorkflowKit
engine: "world" et en fournissant une config world :
kit.start()/kit.stop()gèrent le worker world long-lived. Ce sont des no-ops surlegacy, donc le même code de cycle de vie fonctionne pour les deux moteurs.kit.run(...)dispatche vers le moteur configuré. Vous pouvez surcharger par appel :kit.run(wf, input, { engine: "world" }).
Configuration
engine: "world" sans world lève une erreur, et un world.type inconnu lève également une erreur.
Consultez la référence API WorkflowKit pour la surface complète.
Installer le moteur world
Le moteur world vit dans un package optionnel afin que le core reste léger :engine: "world" sans @ai_kit/workflow-world installé, WorkflowKit lève une erreur claire vous demandant de l’installer.
Écrire des workflows world
Un workflow world est une simple fonction async marquée avec la directive"use workflow" ; le vrai travail se passe dans des fonctions "use step". Ces directives sont détectées à la compilation par le compilateur workflow/nitro.
Il n’existe pas de helper runtime
defineWorldStep. Le compilateur Vercel n’instrumente les directives que sur des liaisons de niveau supérieur (une fonction nommée, ou une flèche/fonction liée directement à un const). Passer la fonction à un appel wrapper casserait silencieusement la détection — l’étape s’exécuterait comme du code ordinaire non durable. Écrivez donc la directive vous-même et annotez (optionnellement) avec les types exportés.@ai_kit/workflow-world exporte les types WorldStep / WorldWorkflow pour l’ergonomie :
Le flux de contrôle est du JavaScript natif
Parce qu’un workflow world est simplement une fonction async, vous n’avez pas besoin de primitives spéciales — utilisez le langage :| Besoin | Moteur world |
|---|---|
| Séquentiel | await successifs |
| Boucle / itération | for / while, for (const x of items) |
| Parallèle / fan-out | await Promise.all(items.map(step)) |
| Race / timeout | await Promise.race([hook, sleep("24h")]) |
| Condition | if / switch |
| Human-in-the-loop | createWebhook() ou defineHook() + hook.resume(...) |
| Délai durable | await sleep("30d") |
| Nouvelles tentatives | automatiques (max 3) + FatalError / RetryableError |
"use workflow" doit rester déterministe (pas de Date.now(), Math.random(), fetch, I/O directe) — mettez ces effets dans des fonctions "use step".
Postgres : provisionner le schéma une fois
Avant le premier run, le world Postgres a besoin que son schéma soit créé (sinon vous obtenez une erreurundefined_table / 42P01). C’est une opération unique au déploiement :
MongoDB (expérimental)
Le world MongoDB est maintenu par la communauté. Seule la configuration change ; le code applicatif est identique à Postgres :Contraintes de build & de runtime
Le Vercel Workflow SDK impose :- Une étape de build — Nitro compile les fonctions
"use workflow"/"use step". Ajoutez le moduleworkflow/nitroaunitro.config.tsde votre application hôte. AI Kit simplifie la configuration runtime mais ne peut pas supprimer cette étape de build. - Un worker long-lived — le world interroge la base de données pour les jobs, donc le moteur world n’est pas compatible avec les déploiements purement serverless.
Migrer un workflow legacy vers le moteur world
La migration est une réécriture du builder déclaratif vers une fonction impérative — il n’existe pas de traducteur automatique. Avant (legacy) :| Builder legacy | Réécriture world |
|---|---|
.then(step) | await step() successifs |
.while({ condition }) | while (await condition()) { ... } |
forEach (parallèle) | await Promise.all(items.map(step)) |
.branchParallel(...) | await Promise.all([stepA(), stepB()]) |
.conditions(...).then(...) | if (...) {} else {} |
.human(...) + resumeWithHumanInput | defineHook() + hook.resume(...) |
Couverture fonctionnelle
Parce que le moteurworld embarque le vrai SDK Vercel, il hérite de toutes ses capacités : exécution durable, sleep, webhooks/hooks (human-in-the-loop), streaming, agents durables, nouvelles tentatives automatiques, et le tableau de bord d’observabilité npx workflow web. Les API runtime avancées s’utilisent directement depuis le package workflow — la fine façade WorkflowKit gère uniquement la sélection du moteur, le cycle de vie et le dispatch des runs.