SPB Git

spb/ka2 Public

ka2 — explorateur structuré du web québécois (édition légère, Groupe KA). Bot scraper+IA → graphe de connaissances. Claude Haiku + Firecrawl/Scrapfly.

Python 98.1% Shell 1.9%
ZIP
NameLast commitUpdated
assets feat: initial commit 58 min ago
deploy feat: initial commit 58 min ago
src feat: initial commit 58 min ago
web feat: initial commit 58 min ago
.env.example feat: initial commit 58 min ago
.gitignore feat: initial commit 58 min ago
main.py feat: initial commit 58 min ago
README.md feat: initial commit 58 min ago
requirements.txt feat: initial commit 58 min ago
README.md

# ka2 — explorateur structuré du web québécois

# Édition légère · une plateforme du Groupe KA

Auteur Contact by Groupe KA Statut

Python FastAPI Anthropic Firecrawl Scrapfly SQLite ngrok Licence

ka2 est un bot scraper + recherche piloté par IA qui cartographie le web québécois sous forme de graphe de connaissances : entités (entreprises, organisations, personnes, créateurs/influenceurs, agences, marques…), leurs attributs et leurs relations typées.

🌐 Dashboard en direct : https://www.ka2.bot


# ✨ Aperçu

Tableau de bord Répertoire structuré
Tableau de bord temps réel (thème vert lime) Répertoire structuré — graphe global interactif

Les captures ci-dessus utilisent assets/ka2_dashboard.png et assets/ka2_explorer.png.


# 🎯 Positionnement — Édition légère

Le Groupe KA opère trois bots jumeaux partageant le même moteur, à trois paliers :

Bot Palier Contrôleur Concurrence Pages/jour Thème
ka2 léger / économique Haiku 4.5 6 800 🟢 vert lime
ka4 agressif Sonnet 5 10 3000 🔴 rouge
ka6 flagship Sonnet 5 16 9000 🟣 violet

Ce dépôt = ka2 (Édition légère, thème vert lime).


# 🧠 Comment ça marche

text
                       ┌──────────────────────────────────────────────┐
   Missions  ───────▶  │  Agent (Claude)  — planifie, cherche,        │
   (dashboard)         │  approfondit (deep_dive), pilote via outils  │
                       └───────────────┬──────────────────────────────┘
                                       │ outils
        search_web / map_site / scrape_page / deep_dive / crawl_queue

             ┌─────────────────────────▼─────────────────────────┐
             │  Firecrawl (principal) → Scrapfly (repli anti-bot) │
             │  robots.txt + rate-limit + fail-fast + coupe-circuit│
             └─────────────────────────┬─────────────────────────┘
                                       │  markdown
                          ┌────────────▼────────────┐
                          │  Extracteur (Haiku)      │
                          │  → GRAPHE {entités,      │
                          │     relations typées}    │
                          └────────────┬────────────┘
                                       │ résolution d'entités + provenance
                          ┌────────────▼────────────┐
                          │  SQLite (WAL)            │
                          │  entités · relations ·  │
                          │  liens sociaux · sources │
                          └────────────┬────────────┘
                                       │ SSE temps réel
                          ┌────────────▼────────────┐
                          │  Dashboard + Répertoire  │
                          │  (FastAPI, 3 vues)       │
                          └──────────────────────────┘

# 🚀 Fonctionnalités

  • 🕸️ Graphe de connaissances — entités normalisées + relations typées (WORKS_AT, FOUNDER_OF, REPRESENTED_BY, COLLABORATES_WITH, SPONSORED_BY, MEMBER_OF, PARTNER_OF…), avec rôle et provenance.
  • 🧩 Résolution d'entités / déduplication (nom normalisé + domaine + région) et régions QC canoniques.
  • 👤 Modèle créateur/influenceur — type creator/agency/brand, handle, plateforme, abonnés (par plateforme), niche, langues.
  • Crawling concurrent (6 pages en parallèle) + frontière agressive (auto-découverte de liens).
  • 🛟 Robustesse — timeouts fail-fast, retries par URL (dead-letter), coupe-circuit par domaine.
  • 🧭 Agent rigoureux (plan → découverte → collecte → vérification) + auto-compaction du contexte.
  • 🎛️ Contrôles de mission — arrêter la mission en cours, lancer maintenant (prioriser), supprimer.
  • 🗄️ Archives — snapshot des données puis remise à zéro ; historique restaurable / exportable.
  • 🖥️ Dashboard temps réel (SSE) — KPIs, flux d'activité, réglages en direct, thème vert lime, responsive.
  • 🔎 Répertoire structuré — 3 vues : Cartes, Tableau triable, Graphe global (force-directed, pan/zoom), facettes (type/secteur/région), recherche, export CSV/JSON.
  • 🇶🇨 Conforme — robots.txt respecté, rate-limiting, note Loi 25 (Québec) / LPRPDE, données publiques.

# ⚙️ Configuration (.env)

Variable Rôle Valeur (ka2)
ANTHROPIC_API_KEY Clé Anthropic
FIRECRAWL_API_KEY Clé Firecrawl
SCRAPFLY_API_KEY Clé Scrapfly (repli)
KA_BOT_MODEL Modèle contrôleur claude-haiku-4-5-20251001
KA_BOT_EXTRACT_MODEL Modèle extraction claude-haiku-4-5-20251001
KA_BOT_DB Base SQLite ka_bot.db
KA_BOT_CONCURRENCY Pages en parallèle 6
KA_BOT_DELAY Délai entre requêtes (s) 0.6
KA_BOT_MAX_PAGES Pages max / exécution 120
KA_BOT_FRONTIER Liens auto-enfilés / page 12–16
KA_BOT_MAX_ATTEMPTS Tentatives / URL 2
KA_BOT_DOMAIN_FAILS Seuil coupe-circuit 4
KA_BOT_AUTOSEED Pré-remplir des missions 0 (off)

⚠️ Le fichier .env (clés API) n'est pas versionné (.gitignore).


# 🏗️ Installation & exécution

bash
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env          # renseigner les clés

# Dashboard (web)
uvicorn web.app:app --host 127.0.0.1 --port 8799

# Bot long terme (crawler)
python main.py run

# Modes ponctuels
python main.py pipeline --query "influenceurs beauté Québec"
python main.py agent --goal "Cartographier les agences d'influence de Montréal"
python main.py stats
python main.py export --out exports/entites.json

# ☁️ Déploiement (cluster MacLustr — node M4M36)

bash
bash deploy/deploy.sh M4M36 8799 www.ka2.bot

Crée 3 services launchd résilients : com.ka2.web, com.ka2.bot, com.ka2.ngrok (tunnel --url=https://www.ka2.bot, inspection ngrok sur :4040 pour cohabiter avec les autres bots).


# 🔌 API principale

Méthode Route Rôle
GET /health état du service
GET /api/stats compteurs + état session
GET /api/stream flux SSE (stats + événements)
GET /api/entities entités (filtres type/région/secteur, tri, pagination)
GET /api/entity/{id} fiche entité + relations
GET /api/graph nœuds + arêtes du graphe global
GET /api/export.{json,csv} export filtré
POST /api/missions ajouter une mission
POST /api/missions/{id}/{prioritize,delete} lancer maintenant / supprimer
POST /api/control/{pause,resume,skip,extend} contrôles bot
POST /api/archive · GET /api/archives archiver & vider · historique
POST /api/archive/{id}/{restore,delete} restaurer / supprimer archive

# 🗃️ Modèle de données (SQLite)

entities (type, nom, canonical/norm, domaine, secteur, région, coordonnées, niche/handle/plateforme/abonnés, provenance) · relations (from, to, type, rôle, source, confiance) · social_links (plateforme, url, abonnés) · sources · entity_mentions · crawl_queue · missions · events · settings · archives.


# ⚖️ Conformité & usage responsable

Données publiques uniquement · robots.txt respecté · rate-limiting · finalités légitimes (annuaire, veille, recherche de marché). Encadré par la Loi 25 (Québec) et la LPRPDE. Ne pas constituer de profils de personnes privées à des fins de surveillance ou de démarchage non sollicité.


ka2 · une plateforme du Groupe KA Auteur Simon-Pierre Boucher · ✉️ contact@spboucher.ai Zéro boîte noire — tout est automatisé, rien n'est inventé.