Dans l’article Recherche sémantique : requête par similarité vectorielle, nous avons présenté comment interroger des entités à l’aide de la similarité vectorielle, un moyen puissant de trouver les enregistrements les plus pertinents en fonction de leur signification plutôt que de leurs valeurs exactes.
4D 21 R2 propose une nouvelle méthode pour trier les résultats de recherche à l’aide des champs 4D.Vector. Vous pouvez non seulement filtrer les entités par similarité, mais aussi trier les résultats de votre requête à l’aide de la fonction .query() afin que les entités les plus pertinentes et les plus proches sémantiquement apparaissent en premier. Que vous développiez une expérience de recherche intelligente, un moteur de recommandation ou un assistant basé sur l’IA, cette nouvelle fonctionnalité garantit que vos résultats sont classés par pertinence, offrant ainsi des résultats plus précis et plus conviviaux.
Trier les résultats par similarité
En tant que développeur 4D, vous pouvez désormais trier les résultats d’une requête en fonction de la similarité vectorielle directement dans votre expression de requête. Cette amélioration s’applique à la fois au code 4D et aux requêtes REST, ce qui facilite la récupération des entités par ordre de proximité sémantique.
Lorsque vous exécutez une requête sur un champ vectoriel et que ce même champ apparaît dans la clause order by, 4D classe automatiquement les résultats en fonction de leur similarité (ou distance).
var $result:=$clientAI.embeddings.create("A general manager living in France"; $model)
Var $inputEmbedding:=$result.vector
var $comparisonVector := {vector: $inputEmbedding; threshold: 0.4}
var $results := ds.MyTable.query("myVectorField >= :1 order by myVectorField"; $comparisonVector)
COMBINER LE TRI SÉMANTIQUE AVEC LE TRI CLASSIQUE
L’un des principaux avantages de l’approche de 4D est que le classement sémantique basé sur les vecteurs peut être combiné avec les filtres ORDA traditionnels dans la même requête.
var $comparisonVector := {vector: $myVector; metric: mk cosine; threshold: 0.4}
var $results := ds.MyTable.query("myVectorField <= :1 AND salary>100000 order by myVectorField, salary desc"; $comparisonVector)
Dans cet exemple, la requête récupère les employés dont la description de poste est sémantiquement proche du texte saisi et dont le salaire est supérieur à 100 000, puis les classe en fonction de la similarité vectorielle et du salaire.
Utilisation de l’API REST
Cette fonctionnalité est également disponible via l’API REST. Vous pouvez trier vos résultats par similarité vectorielle à l’aide d’un simple paramètre de requête :
GET /rest/MyTable/?$filter="myVectorField>=:1 order by myVectorField"&$params=[{"vector":[1,2,3,...],"threshold":0.4}]
// OR
GET /rest/MyTable/?$filter="myVectorField>=:1"&$params=[{"vector":[1,2,3,...],"threshold":0.4}]&$orderby="Vector"
Conclusion
Cette amélioration rend les requêtes basées sur l’IA encore plus pratiques et intuitives. Vous pouvez désormais :
-
Interroger vos données à l’aide de la similarité vectorielle.
-
Trier les résultats par similarité, en plaçant les entités les plus pertinentes en tête.
-
Utiliser la fonctionnalité de manière cohérente dans les contextes 4D et REST.
Cela signifie que vous pouvez facilement créer des fonctionnalités telles que la recherche sémantique, les listes de recommandations ou les recherches contextuelles où les résultats les plus similaires apparaissent en premier.
