Tout ce dont vous avez besoin pour orchestrer l'IA
EDDI fournit une plateforme complète et prête pour la production permettant de construire, déployer et gérer des agents d'IA, sans écrire de code standard.

Le déroulement d'un tour de conversation
Sélectionnez une étape pour voir ce qu'elle fait, sa configuration et ce qu'elle écrit.
Input
Ce qui se passe ici
Un message arrive depuis le chat, Slack, l'API ou un client MCP. Le texte brut devient la première entrée d'une nouvelle étape dans la Conversation memory. Aucun task n'a encore été exécuté : cette étape montre donc l'étape de mémoire et non une entrée d'audit.
Valeurs d'exemple à titre d'illustration
{
"key": "input",
"value": "What is the weather?"
}Parser
Ce qui se passe ici
Le parser normalise le texte et le cherche dans les dictionnaires de l'agent, transformant mots et phrases en expressions sémantiques comme trigger(current_weather). C'est une recherche, pas un appel à un modèle : le même texte donne toujours les mêmes expressions.
Chaque task du pipeline écrit une entrée : signée par HMAC, en ajout seul, avec contrôle de séquence.
Valeurs d'exemple à titre d'illustration
{
"words": [
{
"word": "weather",
"expressions": "trigger(current_weather)",
"frequency": 0
}
],
"phrases": [
{
"phrase": "what is the weather",
"expressions": "trigger(current_weather)"
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.parser",
"taskType": "expressions",
"taskIndex": 0,
"durationMs": 3,
"input": {
"input": "What is the weather?"
},
"output": {
"expressions": [
"trigger(current_weather)"
]
},
"actions": [],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 0
}Behavior Rules
Ce qui se passe ici
Les Behavior Rules sont des conditions SI-ALORS portant sur les expressions et la Conversation memory. Chaque règle qui correspond émet des actions. Le routage relève de la configuration et non du code : la même entrée suit donc toujours le même chemin.
Chaque task du pipeline écrit une entrée : signée par HMAC, en ajout seul, avec contrôle de séquence.
Valeurs d'exemple à titre d'illustration
{
"behaviorGroups": [
{
"name": "",
"behaviorRules": [
{
"name": "Ask for City",
"actions": [
"ask_for_city"
],
"conditions": [
{
"type": "inputmatcher",
"configs": {
"expressions": "trigger(current_weather)"
},
"conditions": []
}
]
}
]
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.behavior",
"taskType": "behavior_rules",
"taskIndex": 1,
"durationMs": 1,
"input": {
"expressions": [
"trigger(current_weather)"
]
},
"output": {
"behavior_rules:success": [
"Ask for City"
]
},
"actions": [
"ask_for_city"
],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 1
}Tasks
Ce qui se passe ici
Les tasks écoutent les actions : un appel à un LLM, un appel HTTP, un outil MCP ou une recherche dans une base de connaissances. Chaque task écrit une entrée d'audit signée avec ce qu'il a lu, ce qu'il a produit, ainsi que les détails du modèle et des outils.
Chaque task du pipeline écrit une entrée : signée par HMAC, en ajout seul, avec contrôle de séquence.
Valeurs d'exemple à titre d'illustration
{
"tasks": [
{
"actions": [
"send_message"
],
"id": "simpleChat",
"type": "anthropic",
"description": "Answers weather questions",
"parameters": {
"apiKey": "${vault:anthropic-key}",
"modelName": "claude-sonnet-5-5",
"systemMessage": "You are a helpful assistant",
"addToOutput": "true"
}
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.llm",
"taskType": "langchain",
"taskIndex": 2,
"durationMs": 1840,
"input": {
"input": "What is the weather in Vienna?",
"actions": [
"send_message"
]
},
"output": {
"text": "Vienna: 14 °C, light rain."
},
"llmDetail": {
"modelName": "claude-sonnet-5-5",
"inputTokens": 412,
"outputTokens": 18
},
"toolCalls": {
"name": "get_weather",
"args": {
"city": "Vienna"
},
"result": "14 °C, light rain"
},
"actions": [
"send_message"
],
"cost": 0.0016,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 2
}Output
Ce qui se passe ici
Les modèles d'Output transforment les actions émises en réponse : texte et quick replies. La réponse est stockée en mémoire et renvoyée au canal d'où venait le message.
Valeurs d'exemple à titre d'illustration
{
"outputSet": [
{
"action": "ask_for_city",
"timesOccurred": 0,
"outputs": [
{
"valueAlternatives": [
{
"type": "text",
"text": "Which city would you like to know the weather of?"
}
]
}
],
"quickReplies": []
}
]
}{
"key": "output",
"value": [
"Which city would you like to know the weather of?"
]
}Tool boundary
Ce qui se passe ici
Tout appel d'outil, quelle que soit sa source, franchit la même frontière. Les appels qui correspondent à un motif de toolApprovals sont mis en pause jusqu'à la décision d'un humain, et cette décision est écrite dans le ledger sous forme d'entrée hitl.approval. Les identifiants viennent du vault sous forme de références ${vault:keyName}.
Chaque task du pipeline écrit une entrée : signée par HMAC, en ajout seul, avec contrôle de séquence.
Valeurs d'exemple à titre d'illustration
{
"hitlConfig": {
"toolApprovals": {
"requireApproval": [
"mcp:*",
"delete_*",
"transfer_funds"
],
"exempt": [
"mcp:read_*"
],
"approvalTimeout": "PT30M",
"timeoutPolicy": "AUTO_REJECT",
"pauseReason": "Approval required for {toolNames}"
}
}
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": -1,
"taskId": "hitl.approval",
"taskType": "hitl",
"taskIndex": -1,
"durationMs": 0,
"input": {},
"output": {
"verdict": "APPROVED",
"decidedBy": "slack:U04EXAMPLE",
"automated": false,
"pauseType": "TOOL_CALL",
"toolDecisions": [
{
"callId": "call_01",
"toolName": "transfer_funds",
"verdict": "APPROVED",
"amended": false,
"argsDigest": "sha256:9c1d…e407"
}
]
},
"actions": [],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 3
}Conversation memory
Ce qui se passe ici
La Conversation memory conserve chaque étape (input, expressions, actions, output) et des propriétés limitées à l'étape, à la conversation ou à l'utilisateur (longTerm). L'état de la conversation (READY, IN_PROGRESS, ENDED, AWAITING_HUMAN ou ERROR) y est enregistré.
Valeurs d'exemple à titre d'illustration
{
"conversationState": "READY",
"conversationSteps": [
{
"data": [
{
"key": "input",
"value": "What is the weather?"
},
{
"key": "expressions",
"value": [
"trigger(current_weather)"
]
},
{
"key": "actions",
"value": [
"ask_for_city"
]
},
{
"key": "output",
"value": [
"Which city would you like to know the weather of?"
]
}
]
}
],
"conversationProperties": {
"chosenCity": "Vienna"
}
}Plateforme centrale
Les capacités essentielles qui font d'EDDI une plateforme complète d'orchestration d'IA.
🖥️ EDDI Manager
Une interface React prête pour la production pour construire, déployer et superviser vos agents visuellement, avec i18n en 11 langues, débogage de chat en direct et tableaux de bord d'audit.
⚙️ Config-as-Code
La logique de l'agent est une configuration JSON, pas du code compilé. Les ingénieurs de prompts itèrent instantanément, aucun redéploiement nécessaire.
🔌 Serveur MCP (84 outils)
Contrôle natif complet de l'IA via le Model Context Protocol. Claude Desktop, Cursor et les clients personnalisés gèrent les agents de manière programmatique.
🔐 Sécurité intrinsèque
Aucun eval(), intégration Vault, protection contre le path traversal, OIDC/Keycloak, espaces de travail par utilisateur, pistes d'audit cryptographiques.
✋ Humain dans la boucle
Mettez un tour en pause, contrôlez un appel d'outil ou exigez la validation d'une phase. Workflows d'approbation avec politiques de délai, cartes Slack et état résistant aux redémarrages.
🚀 Performance
Runtime d'entreprise avec des millions de threads légers pour les charges de travail LLM liées aux E/S.
🤖 Multi-agents
Découverte basée sur les intentions, conversations gérées et collaboration de groupe avec vote, artefacts partagés et humains comme membres.
Capacités IA
Fonctionnalités IA avancées qui rendent les agents EDDI plus intelligents, rapides et économiques.
🧠 Mémoire et Contexte
Mémoire persistante, consolidation onirique, résumés continus et fenêtrage sensible aux tokens. Des agents qui se souviennent.
📚 Connaissances & RAG
Explorez un site web ou importez des fichiers PDF, Word, Excel et PowerPoint dans une base de connaissances, actualisée selon un planning. 8 fournisseurs d'embedding, 6 stockages vectoriels. Recherche de connaissances entreprise prête à l'emploi.
📈 Cascade de Modèles
Routage multi-modèle optimisé avec stratégies de confiance. Les déploiements publiés de ce modèle font état de coûts d'inférence inférieurs de 31 à 58% à qualité égale (preuves).
🧭 19 fournisseurs LLM
Claude, GPT, Gemini, Grok, DeepSeek, Kimi, Qwen, GLM, Mistral, Llama et d'autres, hébergés ou locaux. Le catalogue de modèles montre les points forts de chacun et comment l'exécuter.
⏰ Planification et Heartbeats
Déclencheurs cron, réveils heartbeat, cycles oniriques. Agents proactifs qui agissent de manière autonome.
Outils d'Agent Intégrés
EDDI est livré avec 12 outils prêts à l'emploi que les agents peuvent appeler pendant les conversations, sans configuration externe.
Config et Portabilité
Les configurations d'agents sont portables, composables et prêtes pour la synchronisation, déplacez les agents entre environnements sans friction.
📤 Import / Export
Agents portables en fichiers ZIP avec nettoyage automatique des secrets. L'import fusionne ou écrase, sans conflits de version.
🔄 Agent Sync
Synchronisation en direct entre instances avec correspondance structurelle, diff de contenu et sélection sélective de ressources.
📝 Prompt Snippets
Blocs de prompts système réutilisables et versionnés. Référence via {{snippets.safety_rules}}.
Excellence d'ingénierie
📊 Observabilité
Chaque étape du pipeline est journalisée avec des pistes d'audit immuables, tokens, coûts, durées et appels d'outils.
🧪 Qualité du code
Plus de 20 000 tests, au vert à chaque merge. Plus de 90% de couverture d'instructions et plus de 80% de couverture de branches imposées. Contrôles CodeQL, Checkstyle et formateur dans la CI.
🧩 Prêt pour l'IA
84 outils MCP, une API compatible OpenAI, patterns CRUD prévisibles, APIs auto-documentées. Conçu pour que les agents de codage travaillent avec.