← Réalisations

Limier: trier les missions freelance par pertinence, pas par mots-clés

Résumé

Limier agrège les missions freelance de cinq plateformes (API et flux officiels, sans scraping), les filtre par du code avant tout appel de modèle, puis les classe par pertinence en confrontant le contenu complet de chaque offre au CV et aux critères exprimés en langage naturel. Chaque verdict est expliqué, et chaque évolution du système est validée par un jeu d'évaluation dédié. En production sur limier.io, conçu, développé et opéré par Myelink.

01Le problème

La recherche de missions freelance se fait aujourd'hui plateforme par plateforme, avec des filtres par intitulé de poste. Or l'intitulé dit peu de choses: deux offres "Data Scientist" peuvent recouvrir des réalités opposées, et la mission idéale se cache parfois sous un titre inattendu. Résultat: des heures de veille, et des opportunités pertinentes qui passent sous le radar.

02L'approche

Rien n'est pré-indexé: chaque recherche interroge les plateformes en direct. Cinq connecteurs officiels (Free-Work, France Travail, Jean-Michel.io, Codeur.com, Jobicy) consomment des API et des flux structurés, sans aucun scraping HTML. Les filtres objectifs, fraîcheur des offres et contrats freelance, sont appliqués par du code avant tout appel de modèle: on ne paie pas un LLM pour écarter une offre périmée.

Le reste est confié au modèle: le contenu complet de chaque offre est confronté au CV et à une note de critères en langage naturel (TJM, localisation, télétravail, y compris des règles conditionnelles), et le classement rendu est expliqué offre par offre.

03L'architecture

Une recherche traverse un pipeline en flux: extraction du texte du CV, plan de recherche (mots-clés générés par LLM), interrogation parallèle des cinq connecteurs, filtres code, jugement de pertinence par lots parallèles, re-classement global, et livraison des cartes au navigateur en Server-Sent Events, au fur et à mesure que les lots sont jugés.

CV + note texte extrait, en memoire seule plan_search LLM - mots-cles de recherche Free-Work France Travail Jean-Michel.io Codeur.com Jobicy 5 connecteurs officiels (API / flux), interroges en parallele filtres code fraicheur + contrats freelance, avant tout appel LLM jugement par lots de 12 LLM parallele - JSON structure, temperature 0 re-classement global LLM - top 60, un ordre, pas des notes cartes en flux (Server-Sent Events) chaque lot juge est pousse au navigateur, re-trie en direct verdicts: retenue / presque / hors profil - chaque carte porte sa justification encadre bleu = appel LLM
Fig. 1 - Le pipeline d'une recherche: du CV aux cartes classées, livrées en flux continu.

04Le classement

Le jugement se fait en deux passes, à température 0 et en sorties structurées (JSON Schema). Les offres sont d'abord jugées par lots de 12 en parallèle: verdict à trois états (retenue, presque, hors profil) et justification, rédigée avant le verdict - l'ordre des champs du schéma force le modèle à argumenter avant de trancher. Les scores de lots indépendants n'étant pas comparables, une seconde passe re-classe globalement les 60 meilleures offres et ne rend qu'un ordre, pas des notes: les LLM ordonnent bien mieux qu'ils ne calibrent des scores absolus.

Les critères conditionnels ("TJM 600 si 2 jours sur site, 700 si 3") sont traités par énumération des interprétations compatibles avec ce que l'offre affirme réellement. Une information absente vaut bénéfice du doute, jamais invention. Et les champs factuels des cartes (titre, TJM, lieu, lien) viennent des sources, jamais du modèle; le texte des offres est traité comme des données, les instructions qui s'y trouveraient sont ignorées.

05L'évaluation

Le classement est évalué contre un jeu de référence de 56 cas annotés, incluant des cas adversariaux: injections de prompt dans le texte des offres, informations manquantes, titres pièges. Aucune modification de prompt ou de modèle ne part en production sans être validée par ces scores. Ce travail a fait passer la précision de classement de 0,83 à 0,95.

06Données et confidentialité

La politique de zéro rétention du CV est vérifiable dans le code: le document est lu en mémoire, jamais écrit sur disque, consommé à l'ouverture du flux de résultats puis détruit; une recherche jamais consultée est purgée après 15 minutes. Les traces d'observabilité masquent le texte du CV. Il transite uniquement, le temps de l'analyse, par le fournisseur d'inférence, ce que la politique de confidentialité indique explicitement. Côté navigation: pas d'analytics, pas de bannière cookies, un seul cookie de session.

07La stack

CoucheChoix
WebFastAPI, HTMX, Server-Sent Events, rendu serveur
AgentLangChain / LangGraph, sorties structurées JSON Schema
Inférencemodèles open-weights via OpenRouter, température 0
DonnéesPostgreSQL, migrations Alembic
PaiementsStripe, packs de crédits
ObservabilitéLangfuse, traces avec masquage du CV
Qualité201 tests, tests navigateur Playwright, CI lint + tests, jeu d'évaluation de 56 cas
DéploiementDocker sur VPS auto-hébergé (Coolify / Traefik), déploiement continu

08État

Limier est en production et évolue en continu. Un principe de facturation résume l'état d'esprit du produit: un crédit n'est débité que si la recherche aboutit à au moins une mission pertinente.

@software{limier,
  author = {Vinceslas, Medhy},
  title  = {Limier: missions freelance triees par pertinence},
  url    = {https://limier.io},
  note   = {En production, Myelink EURL}
}
Visiter limier.io Me contacter