La recherche sémantique comprend le sens mais manque les termes exacts. Si un utilisateur cherche « error 504 » dans une base de connaissances, la recherche sémantique pourrait retourner des articles sur les timeouts de passerelle et les erreurs réseau mais les classer en dessous d'articles sur les erreurs HTTP en général. Le terme exact « 504 » n'est pas capturé dans l'embedding.
La recherche par mots-clés BM25 fait correspondre les termes exacts mais manque le sens. Chercher « how to fix slow database » avec BM25 trouve des articles contenant ces mots exacts mais manque un article intitulé « Optimizing Query Performance in PostgreSQL » -- qui est exactement ce dont l'utilisateur a besoin.
La recherche hybride combine les deux approches : BM25 pour la précision sur les termes exacts, recherche sémantique pour le rappel sur les concepts connexes. FLIN implémente cela comme une fonction hybrid_search() intégrée qui fusionne les résultats des deux méthodes en utilisant la fusion de rangs réciproques (Reciprocal Rank Fusion).
La fonction de recherche hybride
flinresults = hybrid_search("error 504 gateway timeout", {
entity: DocumentChunk,
text_field: "content",
semantic_field: "content",
limit: 10,
bm25_weight: 0.4,
semantic_weight: 0.6
})La fonction effectue deux recherches en parallèle : une recherche BM25 pour la correspondance de mots-clés et une recherche sémantique pour la correspondance de sens. Les résultats sont fusionnés en utilisant la fusion de rangs réciproques pondérée (RRF).
Pourquoi la fusion de rangs réciproques
La RRF est préférée au calcul de moyenne simple des scores pour une raison critique : les scores BM25 et les scores de similarité cosinus sont sur des échelles complètement différentes. Un score BM25 de 15,7 et une similarité cosinus de 0,89 ne peuvent pas être moyennés de manière significative. La RRF normalise les deux classements sur une échelle commune en utilisant les positions de rang plutôt que les scores bruts.
Quand la recherche hybride gagne
La recherche hybride surpasse systématiquement chaque méthode seule dans trois scénarios :
Requêtes de termes exacts : BM25 identifie la correspondance exacte ; la sémantique ajoute des articles de dépannage connexes.
Requêtes conceptuelles : La sémantique fournit les résultats principaux ; BM25 booste ceux qui contiennent aussi des termes exacts.
Requêtes mixtes : Les deux méthodes contribuent. Les documents mentionnant les termes spécifiques ET discutant les concepts scorent le plus haut.
Réglage des poids
| Application | Poids BM25 | Poids sémantique | Justification |
|---|---|---|---|
| Recherche de code | 0,6 | 0,4 | Les identifiants exacts comptent |
| Documentation | 0,3 | 0,7 | Les concepts comptent plus que les mots exacts |
| E-commerce | 0,5 | 0,5 | Noms de produits et descriptions |
| Recherche juridique | 0,4 | 0,6 | Concepts avec termes spécifiques |
| Tickets de support | 0,3 | 0,7 | Les utilisateurs décrivent des problèmes |
Performance
| Composant | Latence | Notes |
|---|---|---|
| Recherche BM25 (100K docs) | 1-3 ms | Recherche dans l'index inversé |
| Recherche sémantique (100K docs) | 3-5 ms | Plus proches voisins approximatifs HNSW |
| Fusion RRF | < 1 ms | Calcul de scores |
| Total recherche hybride | 5-10 ms | Les deux recherches s'exécutent en parallèle |
La recherche hybride donne aux applications FLIN le meilleur des deux mondes : la précision de la correspondance par mots-clés pour les termes spécifiques et l'intelligence de la compréhension sémantique pour les requêtes conceptuelles.
Dans le prochain article, nous prenons du recul par rapport aux fonctionnalités spécifiques pour examiner la conception IA-first de FLIN -- les décisions philosophiques et pratiques qui rendent FLIN particulièrement adapté au développement assisté par IA.
Ceci est la partie 123 de la série « Comment nous avons construit FLIN », documentant comment un CEO à Abidjan et un CTO IA ont conçu et construit un langage de programmation à partir de zéro.
Navigation de la série : - [122] Découpage conscient du code pour le RAG - [123] Recherche hybride de documents : BM25 + sémantique (vous êtes ici) - [124] Conception d'un langage IA-first - [125] Analytique de recherche et mise en cache des résultats