Automatisation sémantique multi-agents avec vote d'ensemble
Ce script automatisé collecte les données sémantiques : entrez un masque, récupérez les fréquences, exportez dans un tableau. Il remplace le processus fastidieux Wordstat → Excel. Il utilise deux sources de données : l'API gratuite Bukvarix pour une couverture large des synonymes (avec un décalage mensuel) et XMLRiver payant pour des données en temps réel via proxy vers Yandex XML (sans CAPTCHA requis).
XMLRiver propose trois types de fréquence :
- Basique :
réparation appartement→ 45 661 - Exacte :
"réparation appartement"→ 12 340 - Affinée :
[!appartement !réparation]→ 8 912
Les requêtes s'exécutent en parallèle sur 10 threads avec mécanisme de réessai. L'heuristique de compétitivité utilise la formule : score = (nombre_mots * 1000) / (fréquence + 1). Les résultats sont colorés :
- 🟢 FACILE (>50)
- 🟡 MOYEN (10–50)
- 🔴 DUR (<10)
Pipeline optimisé de traitement des mots-clés
Une approche directe échoue sur plus de 3 000 mots-clés en raison de requêtes SERP en double. Le pipeline filtre étape par étape :
- Collecte : Bukvarix ou XMLRiver → ~3 000 mots-clés.
- Bouclier Regex : suppression du bruit (offres d'emploi, fragments Avito, termes incomplets).
- Dé-duplication floue : lemmatisation pymorphy2 + rapidfuzz (token_sort_ratio ≥82 %), regroupés par premier mot → ~1 500 à 2 000 uniques.
- Collecte SERP : 10 threads par mot-clé unique.
- Regroupement : NLP + veto SERP.
- Intention & métriques.
Le seuil de 82 % a été ajusté empiriquement : il supprime 30 à 40 % des doublons (morphologie), sans fusionner des expressions distinctes comme "prix réparation appartement" et "coût réparation appartement".
Regroupement avec veto SERP
SentenceTransformers (paraphrase-multilingual-MiniLM-L12-v2) génère des embeddings. Défi NLP : des termes sémantiquement proches (ex. "réparation appartement Moscou" vs. "réparation appartement Voronej") ne se disputent pas.
Veto SERP : si les 10 premiers résultats Yandex ont moins de 2 URL communes, ils sont traités comme des clusters distincts :
overlap = len(urls_core.intersection(urls_cand))
if urls_core and urls_cand and overlap < 2:
continue # clusters différents
Modes :
- NLP uniquement : rapide, basé sur les embeddings.
- SERP uniquement : précis, lent, basé sur les URLs.
- Hybride : NLP + Veto — meilleur compromis.
Isolation géographique : les mots-clés provenant de villes différentes ne sont pas regroupés.
Filtrage IA multi-agents avec vote d'ensemble
LLM (DeepSeek) classe : pertinent / non pertinent / moins / vérifier. Problèmes : instabilité (38 % stable sur 3 exécutions), manque de contexte spécifique.
PlannerAgent
Génère des plans spécifiques au secteur grâce à une mise en œuvre par exemple, détection de pièges et filtrage géo.
Exemple :
- PERTINENT : "réparation appartement clé en main Moscou"
- NON PERTINENT : "offre emploi réparation appartement"
Optimisation des jetons
Numérotation des ID : le modèle retourne uniquement les IDs, pas le texte. Taille de lot de 20 clés → ~80 jetons contre ~400 auparavant.
Vote d'ensemble
Trois exécutions parallèles (température=0), vote majoritaire (seuil=2/3). Égalité → ArbiterAgent.
def single_vote(_):
response = ai_client.call(system_prompt, user_message, temperature=0)
return ai_client.parse_json(response)
with ThreadPoolExecutor(max_workers=votes) as vote_pool:
vote_results = list(vote_pool.map(single_vote, range(votes)))
counts = Counter(votes_for_keyword)
threshold = votes // 2 + 1
Résultat : stabilité ~85 %. Coût : 0,3 $ pour 3 000 mots-clés.
Mode paranoïaque : liste blanche (correspondance exacte de jetons, pas sous-chaînes) pour les marques — contourne complètement l'IA.
Modules supplémentaires
Module SERP : analyse les résultats organiques, requêtes associées, annonces et réponses neuronales.
Assistant IA : interface chat avec pandas.query() sur le dataframe.
Points clés
- Le pipeline réduit les requêtes SERP de 3 000 à 1 500 grâce à la dé-duplication floue (rapidfuzz + pymorphy2).
- Le regroupement hybride combine vitesse NLP et précision du veto SERP.
- Le vote d'ensemble (3x) améliore la stabilité du filtrage IA à 85 %.
- Économie de jetons : numérotation des ID + lotissement → 0,3 $ par exécution complète.
- Temps de traitement : 20 à 30 minutes contre 3 à 4 heures manuellement.
Stack technique : Python 3.11, API DeepSeek, XMLRiver, SentenceTransformers, rapidfuzz, pymorphy2, pandas, customtkinter.
— Editorial Team
Aucun commentaire pour le moment.