ka2 🇶🇨
Bot de scraping + recherche piloté par IA, long terme, qui cartographie le web québécois : entreprises, organisations, sites web et personnes à rôle public/professionnel, avec leurs coordonnées publiques et liens de médias sociaux.
🌐 Dashboard en production : https://www.ka2.bot (node cluster M4M36).
- Cerveau : Claude Haiku 4.5 (
claude-haiku-4-5-20251001) qui planifie, cherche, cartographie et scrape via des outils, avec flow agentique rigoureux (plan → découverte → collecte → vérification, garde anti-boucle) et auto-compaction du contexte (les longues missions ne débordent jamais la fenêtre de contexte). - Bras : Firecrawl (
search,map,scrape) + Scrapfly en repli (rendu JS / anti-bot). Backend sélectionnable :auto | firecrawl | scrapfly. - Mémoire : base SQLite (WAL) — entités, liens sociaux, sources, relations, file de crawl, missions, événements, réglages.
- Long terme : boucle perpétuelle, reprise après crash, budget quotidien, revisite périodique des missions, pause/reprise depuis le dashboard.
Installation
cd ka-bot
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # les clés sont déjà pré-remplies dans .env fourniUtilisation
# Mode agentique — Claude Haiku pilote la mission
python main.py agent --goal "Cartographier les PME technos de la ville de Québec" \
--seed "https://www.quebecinternational.ca" --max-steps 20
# Pipeline déterministe (search -> scrape -> extract -> save)
python main.py pipeline --query "agences marketing Montréal" --limit 10
# BOT LONG TERME : boucle perpétuelle (missions QC seedées automatiquement)
python main.py run --daily-budget 800 --cycle-delay 20 --revisit-hours 72
# Gérer les missions
python main.py missions --add "Cartographier les OBNL de Laval"
python main.py missions # lister
# Traiter la file d'URLs découvertes, stats, export
python main.py drain --max-pages 30
python main.py stats
python main.py export --out exports/entites.jsonDashboard web (suivi en direct)
uvicorn web.app:app --host 127.0.0.1 --port 8799KPIs, flux d'événements en direct, entités filtrables, gestion des missions et bouton pause/reprise. Le serveur web et le bot partagent la base SQLite (WAL), donc ils tournent en processus séparés.
Déploiement (cluster MacLustr)
bash deploy/deploy.sh M4M36 8799 www.ka2.botInstalle le venv + dépendances et crée 3 services launchd résilients (KeepAlive) :
com.ka2.web (dashboard), com.ka2.bot (bot long terme), com.ka2.ngrok
(tunnel --url=https://www.ka2.bot). Logs : ~/cluster-projects/ka2/logs/.
Architecture
main.py → CLI (agent | pipeline | drain | stats | export)
src/config.py → configuration (.env)
src/firecrawl_client.py→ client REST Firecrawl (rate-limit + robots.txt)
src/extractor.py → extraction d'entités structurées (Haiku, tool forcé)
src/llm_controller.py → boucle agentique (Haiku + outils)
src/orchestrator.py → câblage des composants + 3 modes d'exécution
src/storage.py → persistance SQLiteConfiguration (.env)
| Variable | Rôle | Défaut |
|---|---|---|
ANTHROPIC_API_KEY |
Clé Anthropic | — |
FIRECRAWL_API_KEY |
Clé Firecrawl (search/map) | — |
SCRAPFLY_API_KEY |
Clé Scrapfly (repli scrape) | — |
KA_BOT_SCRAPER |
Backend scrape : auto/firecrawl/scrapfly |
auto |
KA_BOT_SCRAPFLY_RENDER_JS |
Rendu JS Scrapfly | false |
KA_BOT_MODEL |
Modèle de contrôle | claude-haiku-4-5-20251001 |
KA_BOT_DB |
Fichier SQLite | ka_bot.db |
KA_BOT_DELAY |
Délai entre requêtes (s) | 1.5 |
KA_BOT_RESPECT_ROBOTS |
Respecter robots.txt | true |
KA_BOT_MAX_PAGES |
Pages max par exécution | 50 |
KA_BOT_MAX_CONTEXT_TOKENS |
Seuil d'auto-compaction | 120000 |
⚖️ Conformité et usage responsable
Cet outil collecte des données publiques d'entités au Québec. Au Québec, la collecte et le traitement de renseignements personnels sont encadrés par la Loi 25 (Loi modernisant des dispositions législatives en matière de protection des renseignements personnels) et, au fédéral, par la LPRPDE. En l'utilisant, vous vous engagez à :
- respecter
robots.txt(activé par défaut) et les conditions d'utilisation des sites ; - limiter le débit (rate-limiting intégré) pour ne pas surcharger les serveurs ;
- vous cantonner à des données publiques et à des finalités légitimes (annuaire d'affaires, recherche de marché, veille) ;
- ne pas constituer de profils de personnes privées à des fins de surveillance, de harcèlement ou de démarchage non sollicité ;
- répondre aux demandes d'accès / de retrait et respecter les durées de conservation.
L'auteur fournit ce logiciel « tel quel » ; la conformité légale de chaque usage relève de l'utilisateur.
Auteur : Simon-Pierre Boucher · contact@spboucher.ai