Modèle / jeu de données
ZHangZHengEric/Sage avatar
ZHangZHengEric/Sage

Sage : une plateforme d'agents multi-modèles pour l'exécution de tâches longues

Multi-Agent System Framework For Complex Tasks

1 215 étoiles101 forksPythonMIT

En bref

De quoi s’agit-il ?
Sage est un framework Python sous licence MIT qui assemble des agents planificateurs, des canaux de messagerie et un workbench visuel autour d'un runtime de session. Le projet vise l'exécution de tâches complexes, mais sa mise en route demande de trancher entre plusieurs piles et plusieurs surfaces produit.
À qui s’adresse-t-il ?
Sage convient aux équipes qui veulent exécuter des tâches longues avec planification, mémoire et livraison par messagerie, et qui acceptent de gérer elles-mêmes la configuration des modèles et le choix de pile. Il ne convient pas à qui cherche une bibliothèque légère à intégrer dans un service existant : le projet suppose une pile applicative complète avec backend, frontend et comptes locaux.
Puis-je l’utiliser commercialement ?
Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Les derniers commits datent d’il y a 1 jour.
En quel langage est-il écrit ?
Principalement Python, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Le problème visé : des tâches qui ne tiennent pas en un seul appel

Un appel unique à un modèle de langage traite bien une question isolée. Il traite mal une demande du type collecter des informations, produire un livrable, vérifier le résultat et le transmettre à quelqu'un. Sage s'attaque à cette deuxième catégorie. Le README décrit une chaîne allant de la planification à la livraison, avec des agents dédiés à la planification, à l'exécution, à l'autocontrôle, au rappel de mémoire et à la suggestion d'outils. La cible est donc l'équipe qui veut un exécutant de tâches, pas un composant à brancher dans du code existant.

Le dépôt vise plusieurs surfaces : application de bureau, application web, CLI, extension Chrome et canaux de messagerie. Cette diversité indique une ambition de produit complet plutôt que de bibliothèque. Le public naturel est une petite équipe interne qui a besoin d'automatiser des flux récurrents et veut les piloter depuis une interface, pas un développeur qui cherche une fonction à importer.

SAgents Core : le runtime derrière les interfaces

L'architecture décrite dans le README place une couche produit au-dessus d'un noyau nommé SAgents Core. Les entrées (bureau, web, CLI, extension, canaux IM) convergent toutes vers une App Service Layer. Celle-ci alimente le chat et les sessions, la gestion des agents, les tâches et automatisations, le pont navigateur et le workbench visuel. Sous cette couche, un Session Runtime exécute un AgentFlow, qui distribue le travail entre plusieurs agents : Plan, Simple, Fibre et Self-Check.

Le point intéressant est la séparation entre le noyau d'exécution et les surfaces. Un même flux peut donc être déclenché depuis le bureau ou depuis un canal de messagerie, ce qui évite de dupliquer la logique métier. Le revers est que le noyau n'est pas présenté comme une bibliothèque autonome : le README ne documente pas d'API d'import direct pour l'utiliser hors de la pile fournie. Si votre besoin est d'appeler un planificateur depuis votre propre service, cette architecture ajoute une couche dont vous n'avez pas besoin.

Trois façons de démarrer, trois niveaux d'engagement

Le README propose trois chemins. Pour le web depuis les sources, il faut Python 3.10+ et Node.js 18+, puis :

git clone https://github.com/ZHangZHengEric/Sage.git cd Sage ./scripts/dev-up.sh

L'application s'ouvre sur http://localhost:5173. Après connexion, il faut ajouter un fournisseur de modèle dans la gestion des sources de modèles, puis créer ou configurer un agent. Au premier lancement, le script demande de choisir entre une pile Minimal (SQLite) et une pile Full. Le README indique que Minimal est le plus rapide. Deux variables permettent d'ajuster : PYTHON_BIN et USE_UV.

Pour la CLI, le chemin est plus court :

pip install -e . export SAGE_DEFAULT_LLM_API_KEY="your-api-key" export SAGE_DEFAULT_LLM_API_BASE_URL="https://api.deepseek.com/v1" export SAGE_DEFAULT_LLM_MODEL_NAME="deepseek-chat" export SAGE_DB_TYPE="file" sage doctor sage run "Say hello briefly."

La commande sage doctor sert de contrôle avant de lancer quoi que ce soit, ce qui est un bon réflexe à conserver. Les paquets de bureau sont distribués via GitHub Releases en .dmg, .exe NSIS et .deb. Le README précise que la version macOS n'est pas notarisée par Apple et donne la procédure de contournement Gatekeeper, dont xattr -dr com.apple.quarantine /Applications/Sage.app. C'est un détail qui compte en déploiement d'entreprise : la distribution non notarisée suppose une exception manuelle par poste.

Les canaux de messagerie, fonctionnalité la plus différenciante et la plus contrainte

Sage revendique l'intégration de WeChat Personal via iLink, WeCom, Feishu et DingTalk, avec envoi de messages et de fichiers. C'est probablement ce qui distingue le projet d'un simple orchestrateur d'agents : la livraison du résultat se fait dans l'outil où travaille déjà l'utilisateur final, sans qu'il ait à ouvrir une interface dédiée.

Cette intégration a un coût implicite que le README n'explore pas. Connecter WeChat Personal via iLink suppose de s'appuyer sur un mécanisme non officiel, dont la stabilité dépend d'un tiers qui ne s'engage à rien. Le README ne fournit aucune information sur le taux de défaillance, la procédure de reconnexion ou le comportement en cas de changement côté plateforme. Pour un flux opérationnel critique, c'est un point à tester avant de s'engager. Les canaux WeCom, Feishu et DingTalk relèvent d'API d'entreprise et posent moins ce problème de fond, mais la documentation fournie ici ne détaille pas la configuration de chacun.

Isolation d'exécution : trois options, peu de détails

Le README mentionne trois modes de sandbox : local, passthrough et distant. La distinction entre local et passthrough n'est pas expliquée dans le matériel fourni, et je ne peux pas la déduire. Ce que l'on peut dire, c'est que proposer un mode distant indique une prise en compte du cas où l'agent exécute du code ou navigue sur le web, deux activités qui touchent le système hôte.

Le choix du sandbox est structurant. Un mode local exécute avec les droits du processus, ce qui simplifie le débogage mais expose la machine. Un mode distant déplace le risque mais ajoute une dépendance réseau et une latence. Le README ne donne pas de tableau comparatif, pas de recommandation par cas d'usage, et pas de clé de configuration associée. C'est la zone la plus floue de la documentation accessible, et c'est aussi celle qui décide de ce que vous acceptez de laisser faire à l'agent sur votre poste.

Ce que le projet ne dit pas sur sa maintenance

La licence est MIT, ce qui autorise l'usage commercial, la modification et la redistribution, à condition de conserver l'avis de copyright. Aucune clause de copyleft ne contraint vos propres modules. En revanche, la licence ne dit rien du coût réel : chaque exécution consomme des jetons chez le fournisseur de modèle que vous configurez, et ce coût dépend entièrement de vos flux et de votre fournisseur, pas de Sage.

Sur la maintenance, les éléments disponibles sont minces. Les trois versions récentes listées sont toutes des versions de bureau (desktop-v1.1.6 à desktop-v1.1.8) publiées le même jour, le 26 mai 2026. Le README affiche un badge de version 1.1.0. Le dernier push sur la branche main date du 9 septembre 2026. Ces dates suggèrent une activité, mais elles ne renseignent pas sur la stabilité des interfaces internes. Le README précise par ailleurs que SAgents v2 et Desktop v2 exigent Python 3.12+, alors que le reste du projet fonctionne avec Python 3.10+. Une montée de version majeure implique donc de vérifier la version de Python sur chaque poste avant de migrer. Rien dans le matériel fourni n'indique de politique de dépréciation ou de durée de support.

Face à quoi : LangGraph et le problème du périmètre

L'alternative la plus directe est LangGraph, qui modélise un flux d'agents comme un graphe d'états explicite. La différence d'approche est nette. LangGraph fournit une primitive de graphe que vous câblez vous-même, avec votre propre persistance, votre propre serveur et vos propres canaux de sortie. Sage fournit une pile complète : backend, frontend, comptes locaux, workbench visuel, canaux de messagerie, extension navigateur.

Le compromis est celui du contrôle contre l'intégration. Avec LangGraph, vous décidez de chaque transition et vous n'héritez d'aucune interface. Avec Sage, vous obtenez le workbench, la gestion des agents et la livraison par messagerie sans les écrire, mais vous adoptez aussi ses choix de pile, son runtime de session et ses surfaces. Si votre besoin est d'insérer un agent dans une API existante, la pile complète de Sage est un surcoût. Si votre besoin est de faire tourner des tâches récurrentes avec une interface d'inspection, écrire l'équivalent de SAgents Core représente un travail que Sage vous épargne.

Conclusion éditoriale

Sage convient aux équipes qui veulent exécuter des tâches longues avec planification, mémoire et livraison par messagerie, et qui acceptent de gérer elles-mêmes la configuration des modèles et le choix de pile. Il ne convient pas à qui cherche une bibliothèque légère à intégrer dans un service existant : le projet suppose une pile applicative complète avec backend, frontend et comptes locaux. Avant d'adopter, vérifier le contenu de docs/en/applications/WEB.md sur le choix Minimal contre Full, puis lancer sage doctor après avoir défini SAGE_DEFAULT_LLM_API_KEY, SAGE_DEFAULT_LLM_API_BASE_URL, SAGE_DEFAULT_LLM_MODEL_NAME et SAGE_DB_TYPE.

Sources officielles

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. ZHangZHengEric/Sage on GitHub
Notes de la communauté

Notes de la communauté