SPB Git

spb/ka4 Public

ka4 — explorateur structuré du web québécois (édition agressive, Groupe KA). Crawling concurrent, Claude Sonnet+Haiku, Firecrawl/Scrapfly, graphe de connaissances.

Python 97.8% Shell 2.2%
ZIP
NameLast commitUpdated
assets feat: initial commit 1 h ago
deploy feat: initial commit 1 h ago
src feat: initial commit 1 h ago
web feat: initial commit 1 h ago
.env.example feat: initial commit 1 h ago
.gitignore feat: initial commit 1 h ago
main.py feat: initial commit 1 h ago
README.md feat: initial commit 1 h ago
requirements.txt feat: initial commit 1 h ago
README.md

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

# Édition agressive · une plateforme du Groupe KA

Auteur Contact by Groupe KA Statut

Python FastAPI Anthropic Firecrawl Scrapfly SQLite ngrok Licence

ka4 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.ka4.bot


# ✨ Aperçu

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

Les captures ci-dessus utilisent assets/ka4_dashboard.png et assets/ka4_explorer.png.


# 🎯 Positionnement — Édition agressive

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 = ka4 (Édition agressive, thème rouge).


# 🧠 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 (10 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 rouge, 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 (ka4)
ANTHROPIC_API_KEY Clé Anthropic
FIRECRAWL_API_KEY Clé Firecrawl
SCRAPFLY_API_KEY Clé Scrapfly (repli)
KA_BOT_MODEL Modèle contrôleur claude-sonnet-5
KA_BOT_EXTRACT_MODEL Modèle extraction claude-haiku-4-5-20251001
KA_BOT_DB Base SQLite ka4.db
KA_BOT_CONCURRENCY Pages en parallèle 10
KA_BOT_DELAY Délai entre requêtes (s) 0.4
KA_BOT_MAX_PAGES Pages max / exécution 220
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 8899

# 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 8899 www.ka4.bot

Crée 3 services launchd résilients : com.ka4.web, com.ka4.bot, com.ka4.ngrok (tunnel --url=https://www.ka4.bot, inspection ngrok sur :4041 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é.


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