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.
