Dinoer

Mener une campagne de recherche sur un corpus verrouillé

Un manifeste, une instance de SearXNG et un rapport qui remonte chaque affirmation à une page réellement collectée. Deux campagnes réelles : ce qu'ils ont découvert et les erreurs qu'ils ont commises avant que celles-ci ne soient corrigées.

Le cas qui porte le nom même de Dinoer : explorez un sujet à partir de sources publiques et produisez un rapport où chaque affirmation est étayée par une page existante sur le disque — et non pas par ce qu’un modèle délégué se souvient vaguement de son propre entraînement, ou pire, d’une recherche en direct qu’il n’était pas censé effectuer.

Une liste territoriale, construite à partir de rien

Un véritable manifeste (et non une fonctionnalité fixe) : trouvez des concerts et événements dans un rayon de 30 km d’une ville spécifiée, sur une période de dix jours. Seize requêtes de découverte auprès de SearXNG ont qualifié treize domaines de référence ; campagne.py a collecté 43 pages à partir de ceux-ci, et l’extraction ciblée par source a permis de trouver 15 correspondances positives, qui ont été dédupliquées pour ne donner 11 événements distincts répartis sur 9 communes.

{"id_campagne": "spectacles-sud-finistere-2026-08-11-20",
 "cibles": [
   {"type": "query", "valeur": "concerts finistere sud ete"},
   {"type": "table_reference", "valeur": "mairies du Finistere sud",
    "cle_thematique": "mairies_finistere_sud"}
 ],
 "delai_min_secondes": 4.5, "delai_max_secondes": 8.5}

Un véritable bug est apparu lors de l’utilisation réelle du système, et non pendant la phase de revue. Le délai anti-blocage était appliqué entre les récupérations des pages mises en cache, mais jamais entre les requêtes SearXNG elles-mêmes. Une série de seize requêtes de découverte envoyées dans un court laps de temps a entraîné la suspension de l’instance SearXNG par ses propres moteurs upstream. Le problème a été corrigé le même jour, à chaque point d’appel de requête, et confirmé empiriquement avant que la correction ne soit considérée comme terminée.

Une vérification de la réputation, et la discipline qui l’a rendue vérifiable

Une deuxième campagne, une question formulée différemment : trois questions ouvertes concernant un sujet spécifique, avec 28 pages conservées au niveau le plus bas. Le rapport synthétisé a correctement identifié un désaccord entre les sources sur un point factuel, et a correctement exclu un homonyme portant le même nom plutôt que de fusionner les deux informations en une seule réponse.

Vérifié, pas simplement pris au mot dans son propre rapport : un appel direct au flux d’événements JSON complet du modèle délégué — pas l’aide de synthèse qui ne renvoie que le texte final — a confirmé exactement trois événements pour toute l’exécution (step_start, text, step_finish) et zéro événement tool_use. Rien n’est sorti du corpus pendant la synthèse. C’est cette vérification qui avait permis de détecter une véritable fuite la première fois que cette discipline avait été appliquée ailleurs — voir Le corpus est ce que le modèle délégué est autorisé à laisser →.

Ce qu’une question ouverte a réussi à faire et ce qu’une question étroite n’a pas pu

--extraire-cible "<demande>" prend en charge n’importe quelle requête en langage naturel, et pas seulement une recherche de faits stricte. Dans la campagne de référence, une question ouverte et descriptive a permis au modèle délégué de juger lui-même s’il lisait un fait isolé ou un événement sur plusieurs jours. 17 des 47 requêtes ont donné des résultats positifs, avec un contenu plus riche qu’une formulation plus restrictive /valeur/url produite sur le même corpus. La recette d’extraction, en entier →

Où cette affaire s’arrête

Le rapport automatique de fin d’exécution est un projet préliminaire — concaténation dans l’ordre des fichiers, tronqué à 60 000 caractères, sans classement sauf si le manifeste fournit sujet_synthese. Ce que cela coûte, mesuré →

Et la découverte elle-même a une limite réelle : SearXNG, sans authentification, n’atteint pas ce qu’un moteur de recherche commercial utilisant des cookies peut atteindre. Ce sur quoi Dinoer ne concurrence pas →