Introduction à BoxAgnts (4) — Architecture de base

DEV - 28/05
Les trois articles précédents ont chacun disséqué une couche de l'architecture à trois niveaux de BoxAgnts : Externe...

Les trois articles précédents ont disséqué chacun une couche de l'architecture à trois niveaux de BoxAgnts :

  • Couche externe : expérience utilisateur prête à l'emploi – Tableau de bord Vue 3, API REST, communication en temps réel WebSocket
  • Couche intermédiaire : Agent Toolbox – répartition multimodèle (trait LlmProvider), boucle de raisonnement de l'agent, abstraction unifiée du trait d'outil, planification Cron
  • Couche inférieure : bac à sable de sécurité WASM — moteur Wasmtime, RunOption à 11 dimensions, défense en profondeur à trois couches

Mais la véritable valeur de l’architecture ne réside pas dans ce que chaque couche fait individuellement, mais dans la manière dont elles collaborent. Cet article examine cette collaboration à travers cinq perspectives.

Panorama à trois couches

┌───────────────────────────────── ─────────────────────────────────┐ │ COUCHE EXTERNE │ │ │ │ CLI (clap 6 paramètres) │ Tableau de bord (Vue 3 × 10 pages) │ API REST │ │ ────────────────────────────── ─────────────────────────────── │ │ Interface utilisateur · Visualisation · Ingestion de demande · │ │ Réponse en streaming · Authentification · Hébergement de site │ │ │ │ Ressources préinstallées : 7 outils WASM · 5 compétences · │ │ AGENTS.md · Service de fichiers statiques │ │ │ └────────────────────────────┬──── ─────────────────────────────────┘ │ HTTP REST / WebSocket │ (Routeur Axum) ┌────────────────────────────┴──── ─────────────────────────────────┐ │ COUCHE INTERMÉDIAIRE │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ boxagnts-api │ │boxagnts-query│ │ boxagnts-tools │ │ │ │ LlmProvider │ │ run_query │ │ Trait d'outil │ │ │ │ 20+ fournisseurs │ │ _loop() │ │ registre du gestionnaire d'outils│ │ │ └──────┬───────┘ └──────┬───────┘ └──────────┬───────────┘ │ │ │ │ │ │ │ ┌──────┴─────────────────┴──── ──────────────────┴───────────┐ │ │ │ boxagnts-gateway · Cron · Site │ │ │ │ boxagnts-espace de travail · SQLite · JSON │ │ │ └────────────────────────────── ──────────────────────────────┘ │ │ │ │ Abstractions de base : trait d'outil · QueryConfig (20 champs) · │ │ QueryOutcome │ │ Mécanismes de base : récupération de jeton · Compactage du contexte · │ │ Repli · Budget · Gestionnaire │ └────────────────────────────┬──── ─────────────────────────────────┘ │ Trait d'outil → exécuter() ┌────────────────────────────┴──── ─────────────────────────────────┐ │ COUCHE INFÉRIEURE │ │ │ │ ┌───────────────────────────── ─────────────────────────────┐ │ │ │ WasmTool.execute() → Wasmtime Engine → Composants .wasm │ │ │ │ RunOption (11-dim) · Interception WASI · Défense à 3 couches │ │ │ └───────────────────────────── ─────────────────────────────┘ │ │ │ │ Dimensions de sécurité : Autorisation · Mémoire · Pile · Temps · │ │ Carburant · Fichier · Réseau │ │ Interface de composant : JSON stdin → WASM Exécution → JSON stdout │ │ Système d'extension : Compétence (SKILL.md) · Service (.wasm) │ └───────────────────────────────── ─────────────────────────────────┘
Entrer en mode plein écran Quitter le mode plein écran

Trois interfaces clés : les « articulations » de l'architecture

L'excellence d'une architecture en couches dépend de ses interfaces inter-couches. BoxAgnts définit trois interfaces claires qui relient chaque couche comme les articulations du corps humain :

Interface 1 : Couche externe ↔ Couche intermédiaire — HTTP + WebSocket

C'est la frontière entre l'interaction utilisateur et la logique métier :

Tableau de bord (Vue 3) │ ├── API REST (Axum) ──→ gateway/api/chat.rs, config.rs, cron.rs... │ Format de réponse unifié { succès, données, erreur } │ └── WebSocket ──→ server/dashboard/ws.rs Communication bidirectionnelle en temps réel type_commande : "chat_execute" | "chat_execute_cancel"
Entrer en mode plein écran Quitter le mode plein écran

Décision de conception clé : l'envoi de commandes de chat et la réception de réponses utilisent deux canaux différents :

  • Envoi de commandes : WebSocket (faible latence, bidirectionnel)
  • Réponses en streaming : WebSocket pushÉvénement de requête(en temps réel, unidirectionnel)
  • Chargement de l'historique : API REST (idempotente, pouvant être mise en cache)

Cette séparation évite le problème de longue interrogation de REST et évite également que WebSocket transporte toutes les données.

Interface 2 : Couche intermédiaire ↔ Couche inférieure — Trait d'outil

C'est la fr...
[Courte citation de 8% de l'article original]

Loading...