Présentation du projet
GenericAgent est un framework d’agent autonome, à la fois minimaliste et capable de s’auto-évoluer. Son cœur ne fait que ~3K lignes de code : grâce à 9 outils atomiques et à une boucle Agent Loop d’environ 100 lignes, il permet à n’importe quel LLM d’obtenir un contrôle de niveau système sur l’ordinateur local.
Sa philosophie de conception est particulièrement intéressante : ne pas prédéfinir des compétences, mais les acquérir par évolution. À chaque nouvelle tâche résolue, GenericAgent fige automatiquement le chemin d’exécution en une Skill. Plus vous l’utilisez longtemps, plus vous accumulez de compétences, jusqu’à former un arbre de compétences entièrement à vous, qui pousse à partir de ce germe de code de 3K lignes.
TIP
Le plus impressionnant : ce projet dispose aussi d’un papier technique sur arXiv, qui prouve son approche de conception « efficacité en tokens + maximisation de la densité d’information du contexte ».
Par rapport à OpenClaw (~530K lignes de code), GenericAgent suit une voie résolument minimaliste : déploiement simple (pip install + API Key), pas besoin d’orchestration multi-services, mais il conserve néanmoins des capacités essentielles telles que le contrôle complet du navigateur, les actions clavier/souris, ainsi que la commande d’appareils mobiles via ADB.
Difficulté / Durée / Résultats
- Difficulté : niveau débutant, sans besoin d’une expérience poussée en programmation
- Durée : environ 30 minutes
- Résultats : maîtriser la configuration et le déploiement de GenericAgent + l’intégration des trois grandes plateformes IM (WeChat/QQ/Feishu), pour piloter l’IA sur ordinateur avec votre téléphone, partout et à tout moment
Profil des lecteurs cibles
- Développeurs backend ou full-stack avec 1 à 5 ans d’expérience
- Utilisateurs qui souhaitent créer un assistant IA personnel et des workflows automatisés
- Personnes intéressées par la technologie Agent, qui veulent tester rapidement « faire en sorte que l’IA fasse réellement les choses pour vous »
- Besoin d’intégrer plusieurs messageries (par ex. contrôler à distance l’ordinateur via WeChat/QQ)
Dépendances clés et environnement
| Catégorie | Exigence |
|---|---|
| Python | 3.11 ou 3.12 (ne pas utiliser 3.14, incompatible avec pywebview) |
| Système d’exploitation | Windows / macOS / Linux |
| Support LLM | Claude / GPT-4o / Gemini / Kimi / MiniMax et autres modèles courants |
| Réseau | Environnement réseau pouvant accéder aux API LLM |
| Dépendances optionnelles | streamlit / pywebview (GUI desktop), pycryptodome / qrcode (WeChat) |
WARNING
GenericAgent ne fournit pas d’API LLM : vous devez disposer de votre propre API Key. Il est recommandé d’utiliser un service de relais compatible avec Claude/GPT : le prix est plus bas et l’accès depuis la Chine est plus stable. Par exemple Defapi : un prix officiel à moitié, prise en charge de l’ensemble de la gamme Claude/GPT, et reconnaissance automatique des protocoles compatibles.
Structure complète du projet
GenericAgent/
├── agentmain.py # Point d’entrée principal, prend en charge le mode ligne de commande
├── launch.pyw # Script de lancement d’interface GUI desktop
├── agent_loop.py # Boucle Agent Loop (environ 100 lignes)
├── llmcore.py # Gestion de session LLM
├── ga.py # GenericAgentHandler, gestion de la mémoire et dispatch des outils
├── frontends/ # Adaptateurs pour les plateformes IM
│ ├── wechatapp.py # Bot WeChat
│ ├── qqapp.py # Bot QQ
│ ├── fsapp.py # Bot Feishu
│ ├── tgapp.py # Bot Telegram
│ ├── wecomapp.py # Bot WeCom (entreprise)
│ ├── dingtalkapp.py # Bot DingTalk
│ ├── tuiapp.py # UI du terminal
│ └── ...
├── assets/
│ ├── mykey_template.py # Modèle de configuration pour l’API Key
│ ├── tools_schema.json # Définition de 9 outils atomiques
│ ├── sys_prompt*.txt # System prompts
│ └── tmwd_cdp_bridge/ # Plugin d’injection pour navigateur
├── memory/ # Dossier de stockage de la mémoire
└── temp/ # Fichiers temporaires et logs
Étapes détaillées
Step 1 : Installer le projet et les dépendances
D’abord, clonez le dépôt puis installez les dépendances de base :
# Cloner le dépôt
git clone https://github.com/lsdefine/GenericAgent.git
cd GenericAgent
# Installer les dépendances de base
pip install requests
# Installer les dépendances GUI (mode desktop)
pip install streamlit pywebview
# Ou installer les dépendances pour l’UI du terminal
pip install requests textual
TIP
La philosophie de conception de GenericAgent est « que l’Agent installe son environnement lui-même ». Ainsi, vous n’avez pas besoin d’installer au préalable trop de dépendances. L’Agent lit le code et vous dit : « veuillez installer toutes les dépendances Python nécessaires », puis il s’en charge.
Step 2 : Configurer l’API Key
Copiez le modèle de configuration :
cp assets/mykey_template.py mykey.py
Modifiez mykey.py en y renseignant votre configuration LLM. Voici un exemple avec Defapi (en prenant Claude comme exemple) :
# Relais Claude via Defapi (moitié prix officiel)
native_claude_config = {
'name': 'claude-defapi', # Nom affiché
'apikey': 'sk-ant-your-defapi-key', # La clé fournie par Defapi
'apibase': 'https://api.defapi.org', # Endpoint côté Defapi
'model': 'claude-sonnet-4-6', # ou claude-opus-4-7
'fake_cc_system_prompt': True, # Le service de relais doit l’activer
'thinking_type': 'adaptive',
'max_tokens': 16384,
}
WARNING
Si vous utilisez un service de relais de type CC switch (comme Defapi, anyrouter, etc.), vous devez définir fake_cc_system_prompt: True. En revanche, le véritable endpoint officiel Anthropic (connexion directe avec un préfixe sk-ant-) n’en a pas besoin.
GenericAgent détecte automatiquement le format de protocole selon le nom des variables :
- Contient
native+claude→ NativeClaudeSession (champ tool natif) - Contient
native+oai→ NativeOAISession (champ tool natif OpenAI) - Contient
claude(sansnative) → ClaudeSession (outils en protocole texte)
Step 3 : Démarrer GenericAgent
Commencez par tester si le mode ligne de commande fonctionne correctement :
python agentmain.py
Vous devriez voir l’invite interactive > : saisissez une phrase pour tester :
> Sur le bureau, créez un fichier hello.txt, dont le contenu est Hello World
Si tout est correct, l’Agent exécutera la tâche et vous renverra le résultat.
Passez au mode GUI desktop :
python launch.pyw
Step 4 : Intégrer le Bot WeChat
Le Bot WeChat prend en charge la connexion par scan de QR code WeChat personnel, ce qui est le plus simple.
Installer des dépendances supplémentaires :
pip install pycryptodome qrcode requests
Configuration (optionnelle : même sans configuration, cela fonctionne, mais il est recommandé de définir une liste blanche) :
Ajoutez ceci dans mykey.py :
# Liste blanche WeChat : renseignez l’ID WeChat. Si vide, tous les utilisateurs sont autorisés
wechat_allowed_users = []
Lancer le Bot WeChat :
python frontends/wechatapp.py
Au premier démarrage, une fenêtre de QR code s’affiche : scannez-la avec WeChat pour confirmer. Une fois la connexion réussie, votre WeChat devient l’interface de dialogue avec GenericAgent.
TIP
Les commandes du Bot WeChat sont identiques à celles de la version desktop : /new pour démarrer une nouvelle conversation, /continue pour reprendre les sessions précédentes.
Step 5 : Intégrer le Bot QQ
Le Bot QQ utilise l’API officielle des robots QQ et n’a pas besoin de webhook en accès public : il reçoit les messages via une connexion longue WebSocket.
Installer les dépendances :
pip install qq-botpy
Configuration :
- Allez sur QQ Open Platform pour créer un robot et obtenir AppID et AppSecret
- Ajoutez dans
mykey.py:
qq_app_id = "Votre_APP_ID"
qq_app_secret = "Votre_APP_SECRET"
qq_allowed_users = ["useropenid"] # ou ['*'] pour autoriser tout le monde
Lancer le Bot QQ :
python frontends/qqapp.py
Après avoir envoyé un premier message au robot, l’openid de l’utilisateur sera enregistré dans temp/qqapp.log.
Step 6 : Intégrer le Bot Feishu
Le Bot Feishu prend en charge de nombreux formats de message : texte, texte enrichi, images, fichiers, audio, cartes interactives, etc.
Installer les dépendances :
pip install lark-oapi
Configuration :
- Sur la plateforme ouverte Feishu, créez une application d’auto-développement d’entreprise et récupérez AppID et AppSecret
- Ajoutez dans
mykey.py:
fs_app_id = "cli_xxxxxxxxxxxxxxxx"
fs_app_secret = "xxxxxxxxxxxxxxxx"
fs_allowed_users = ["ou_xxxxxxxxxxxxxxxx"] # ou ['*'] pour autoriser tout le monde
Lancer le Bot Feishu :
python frontends/fsapp.py
TIP
Un des points forts du Bot Feishu est le support des modèles visuels : lors de la première interaction, l’image est envoyée au backend compatible OpenAI Vision sous un format multimodal réel. Si votre Agent doit « voir » les images, l’intégration Feishu est la meilleure expérience.
Step 7 : Vérifier et optimiser
Tous les Bots prennent en charge ces commandes universelles :
/new- démarrer une nouvelle conversation, vider le contexte actuel/continue- lister les instantanés de sessions récupérables/continue N- restaurer la N-ième session historique
Vérifier l’intégration multi-plateformes en même temps :
Si vous voulez exécuter plusieurs Bots simultanément, ouvrez simplement plusieurs fenêtres de terminal :
# Terminal 1 : WeChat
python frontends/wechatapp.py
# Terminal 2 : QQ
python frontends/qqapp.py
# Terminal 3 : Feishu
python frontends/fsapp.py
WARNING
Plusieurs Bots partagent le même répertoire memory/ et temp/. La mémoire est interopérable. C’est à la fois un avantage (contexte identique entre plateformes) et un risque potentiel : assurez-vous que votre scénario d’usage convient à cette conception.
Résolution des problèmes fréquents
1. Erreur d’authentification après configuration de l’API Key
Cause : nom de variable incorrect ou configuration erronée de fake_cc_system_prompt
Solution :
- Vérifiez que le nom de variable contient les bons mots-clés (comme
native_claude,oai_config, etc.) - Le service de relais doit être
fake_cc_system_prompt: True - Vérifiez que apibase est correct (par exemple, Defapi utilise
https://api.defapi.org)
2. Après scan WeChat, l’identification échoue
Cause : restrictions de WeChat en matière de risque pour la connexion de nouveaux appareils
Solution :
- Essayez de confirmer la connexion depuis le téléphone (parfois une double vérification côté mobile est nécessaire)
- Assurez-vous que le compte WeChat n’a pas d’activité anormale
- Réduisez la fréquence d’utilisation du Bot pour éviter de déclencher le contrôle anti-abus
3. Le Bot QQ ne reçoit pas les messages
Cause : le robot n’est pas activé ou la configuration des permissions est incorrecte
Solution :
- Sur la plateforme ouverte QQ, confirmez que le robot est activé
- Vérifiez que vous avez bien ajouté l’abonnement aux événements (il faut s’abonner à l’événement « messages en conversation privée »)
- Consultez
temp/qqapp.logpour confirmer que l’openid de l’utilisateur est correctement enregistré
4. Réponse lente du Bot Feishu
Cause : l’inférence LLM est en soi lente, ou un délai réseau
Solution :
- Utilisez un modèle plus rapide (comme GPT-4o-mini, MiniMax-M2)
- Vérifiez la latence du réseau vers l’API LLM
- Réduisez raisonnablement
max_tokenspour accélérer la réponse dès le premier token
5. Le Bot n’arrive pas à mémoriser le contexte de conversation
Cause : commande /new exécutée ou expiration du temps de session
Solution :
- Utilisez
/continuepour restaurer la conversation historique - Confirmez que le dossier
memory/dispose des droits d’écriture - Vérifiez si le dossier
temp/model_responses/contient des enregistrements de sessions
6. Erreur ModuleNotFoundError à l’exécution
Cause : dépendance manquante
Solution :
# Laisser l’Agent installer
> Aidez-moi à installer toutes les dépendances Python nécessaires
# Ou installer manuellement des dépendances courantes
pip install requests pycryptodome qrcode streamlit pywebview
Lectures complémentaires / Pistes d’avancement
Capacités d’automatisation du navigateur
Une fois les outils Web déverrouillés, GenericAgent peut agir dans un navigateur réel qui conserve votre état de connexion :
> Exécuter web setup sop, débloquer l’outil web
Ensuite, vous pouvez l’utiliser comme suit :
> Ouvrir Taobao, rechercher iPhone 16, trier par prix
> Aller sur Bilibili, consulter l’historique des vidéos que j’ai regardées récemment
Le plugin de navigateur se trouve dans assets/tmwd_cdp_bridge/ et prend en charge les navigateurs principaux comme Chrome/Edge.
Explication détaillée du mécanisme d’auto-évolution
La différence clé de GenericAgent réside dans le fait que pour chaque tâche terminée, le chemin d’exécution est automatiquement figé en Skill. La prochaine fois que vous rencontrerez une tâche similaire, elle sera appelée directement, sans repartir de zéro.
Cela signifie :
- Plus vous l’utilisez, plus l’Agent comprend votre workflow
- L’arbre de compétences vous appartient entièrement : il ne sera pas identique aux « compétences prédéfinies » des autres
- Avec 3K lignes de code de départ, il est possible d’atteindre un potentiel quasi infini
Écosystème de bibliothèque de Skills
La communauté a déjà accumulé une bibliothèque de Skills à l’échelle du million (article sur la page WeChat). Vous pouvez :
- Laisser l’Agent rechercher :
Cherche-moi une skill pour faire XXX - Import direct :
Accède à XXX et fais-le avec cette skill
Mode avancé
Toutes les fonctionnalités avancées de GenericAgent sont autodocumentées : demandez directement à l’Agent.
| Mode | Demander à l’Agent |
|---|---|
| Reflect (réflexion) | Regarde ton code, dis-moi comment activer ton mode reflect |
| Planification de tâche | Regarde ton code, dis-moi comment activer ton mode de planification de tâches |
| Plan (planification) | Regarde ton code, dis-moi comment activer ton mode plan |
| Sous-agent | Regarde ton code, dis-moi comment activer ton mode subagent |
| Exploration autonome | Regarde ton code, dis-moi comment activer ton mode d’exploration autonome |
TIP
C’est le cœur de la philosophie de GenericAgent : le code est la documentation. L’Agent peut lire sa propre base de code, et n’importe quelle fonctionnalité peut être directement demandée.
Compétences de programmation et comparaison avec Claude Code
Beaucoup de développeurs se posent une question : GenericAgent peut-il remplacer Claude Code ou Codex ?
Réponse : il peut programmer, mais ne peut pas remplacer entièrement.
Compétences de programmation de GenericAgent
GenericAgent exécute n’importe quel code via l’outil code_run. En combinant cela avec des opérations fichiers comme file_read/file_write/file_patch, ses capacités de programmation sont complètes. Tant que vous associez un modèle expert en programmation (comme Claude ou GPT-4o), il peut :
- Lire et écrire des fichiers
- Exécuter des commandes en ligne de commande
- Déboguer le code
- Expliquer la logique du code
# Configurer Claude comme backend
native_claude_config = {
'apikey': 'your-key',
'apibase': 'https://api.defapi.org',
'model': 'claude-sonnet-4-6',
'fake_cc_system_prompt': True,
}
Puis programmer directement en langage naturel :
> Écris-moi une fonction de tri rapide, puis exécute les tests
> Implémente un serveur HTTP en Python
> Explique comment ce composant React fonctionne
Différences avec Claude Code / Codex
| Fonctionnalité | GenericAgent | Claude Code / Codex |
|---|---|---|
| Capacités de programmation | Complètes (fichiers + exécution de code) | Complètes |
| Consommation de contexte | <30K tokens (très économe) | 200K-1M tokens (contexte plus large) |
| Capacité d’évolution | Chaque tâche laisse une Skill, accumulation entre les sessions | Sans état entre les sessions |
| Mode de déploiement | pip install + API Key | Outil CLI + abonnement |
La différence clé est la suivante : Claude Code fonctionne avec son propre protocole et sa chaîne d’outils (similaire à MCP) ; GenericAgent ne peut pas les appeler directement. Mais il existe des méthodes indirectes :
Méthode 1 : utiliser Codeg en parallèle
Codeg peut lancer simultanément GenericAgent + Claude Code + Codex, et faire collaborer plusieurs systèmes dans la même UI :
# Mettre GenericAgent et Codeg dans le même répertoire parent
/workspace/
├── GenericAgent/
└── codeg/
# Codeg détectera automatiquement GenericAgent, puis utilisera tout en parallèle
Méthode 2 : via un relais par API
La NativeClaudeSession de GenericAgent utilise un protocole compatible avec Claude Code. Si le service de relais (par ex. Defapi) prend en charge le « passthrough » de Claude Code, vous pouvez utiliser les capacités de programmation de Claude via GenericAgent :
# Programmer avec les capacités de Claude dans GenericAgent
native_claude_config = {
'name': 'claude-defapi',
'apikey': 'your-defapi-key',
'apibase': 'https://api.defapi.org',
'model': 'claude-sonnet-4-6',
'fake_cc_system_prompt': True, # Passe-through du protocole Claude Code
}
Conclusion
| Question | Réponse |
|---|---|
| GenericAgent peut-il programmer ? | Oui : les opérations fichier + l’exécution de code sont complètes |
| Peut-il appeler Claude Code directement ? | Non : Claude Code est un outil indépendant |
| Peut-il programmer comme Claude Code ? | Similaire, mais l’expérience dépend du modèle backend |
| Peut-on l’utiliser en parallèle ? | Oui : le projet Codeg prend en charge la collaboration multi-agents |
TIP
Si vous voulez à la fois l’expérience de programmation de Claude Code et les capacités d’automatisation de GenericAgent, vous pouvez essayer la combinaison Codeg + GenericAgent : une conversation, plusieurs agents qui coopèrent en même temps — Claude Code se concentre sur l’écriture de code, tandis que GenericAgent gère l’automatisation.
Référence
- GitHub : lsdefine/GenericAgent
- Rapport technique : arXiv:2604.17091
- Tutoriel débutant : Datawhale Hello GenericAgent
- Guide de configuration Feishu : assets/SETUP_FEISHU.md