4D-KI: Sortieren von Suchergebnissen nach Vektorsimilarität

Automatisch übersetzt von Deepl

Im Beitrag „Semantische Suche: Abfragen anhand von Vektorsimilarität“ haben wir vorgestellt, wie Entitäten anhand von Vektorsimilarität abgefragt werden können – eine leistungsstarke Methode, um die relevantesten Datensätze anhand ihrer Bedeutung statt anhand exakter Werte zu finden.

4D 21 R2 bietet eine neue Möglichkeit, Suchergebnisse mithilfe von 4D.Vector-Feldern zu sortieren. Sie können Entitäten nicht nur nach Ähnlichkeit filtern, sondern auch Ihre Abfrageergebnisse mit der Funktion query()“ sortieren , sodass die relevantesten und semantisch am nächsten liegenden Entitäten zuerst angezeigt werden. Ganz gleich, ob Sie eine intelligente Suchfunktion, eine Empfehlungsmaschine oder einen KI-gesteuerten Assistenten entwickeln – diese neue Funktion sorgt dafür, dass Ihre Ergebnisse nach Relevanz sortiert werden und somit genauer und benutzerfreundlicher sind.

Sortieren von Ergebnissen nach Ähnlichkeit

Als 4D-Entwickler können Sie nun die Ergebnisse einer Abfrage direkt in Ihrem Abfrageausdruck anhand der Vektorsimilarität sortieren. Diese Verbesserung gilt sowohl für 4D-Code als auch für REST-Anfragen und erleichtert das Abrufen von Entitäten in der Reihenfolge ihrer semantischen Nähe.

Wenn Sie eine Abfrage auf einem Vektorfeld ausführen und dasselbe Feld in der ORDER BY-Klausel erscheint, sortiert 4D die Ergebnisse automatisch nach ihrer Ähnlichkeit (oder Distanz).


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)

KOMBINATION VON SEMANTISCHER UND KLASSISCHER SORTIERUNG

Ein wesentlicher Vorteil des Ansatzes von 4D besteht darin, dass die vektorbasierte semantische Sortierung mit herkömmlichen ORDA-Filtern in derselben Abfrage kombiniert werden kann.

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)

In diesem Beispiel ruft die Abfrage Mitarbeiter ab, deren Stellenbeschreibungen semantisch nah am Eingabetext liegen und deren Gehalt 100.000 übersteigt, und ordnet sie nach der Vektorsimilarität und dem Gehalt.

Verwendung der REST-API

Diese Funktion ist auch über die REST-API verfügbar. Sie können Ihre Ergebnisse mit einem einfachen Abfrageparameter nach Vektorsimilarität sortieren:

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"

Fazit

Diese Verbesserung macht KI-gestützte Abfragen noch praktischer und intuitiver. Sie können nun:

  • Ihre Daten anhand der Vektorähnlichkeitabfragen.

  • die Ergebnisse nach Ähnlichkeit sortieren, sodass die relevantesten Entitäten ganz oben angezeigt werden.

  • die Funktion sowohl im 4D- als auch im REST-Kontext konsistent nutzen.

Das bedeutet, dass Sie ganz einfach Funktionen wie semantische Suche, Empfehlungslisten oder kontextbezogene Suchen erstellen können, bei denen die ähnlichsten Ergebnisse zuerst angezeigt werden.

Fabrice Mainguené
- Product Owner -Fabrice Mainguené gehört seit November 2016 zum 4D Program Team. Als Product Owner ist er verantwortlich für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen. Seine Aufgabe ist es auch, sicherzustellen, dass die gelieferte Funktionsimplementierung den Kundenanforderungen entspricht.Nach seinem Bachelor-Abschluss in Informatik am CNAM arbeitete Fabrice als Windev-Entwickler bei einem kleinen Software-Verlag. Danach arbeitete er für verschiedene Unternehmen in Industrie und Handel als Windev- und Webentwickler sowie als technischer Berater für neue Funktionen.