Erstellen von Einbettungen mit der Azure KI-Erweiterung
Zum Ausführen einer semantischen Suche müssen Sie die Abfrageeinbettung mit den Einbettungen der durchsuchten Elemente vergleichen. Die azure_ai
-Erweiterung für Azure Database for PostgreSQL – Flexible Server ist in Azure OpenAI integriert, um Einbettungsvektoren zu generieren.
Einführung in azure_ai
und Azure OpenAI
Die Azure Database for PostgreSQL – Flexible Server für Azure KI bietet benutzerdefinierte Funktionen zur Integration in Azure KI Services, einschließlich Azure OpenAI und Azure Cognitive Services.
Die Azure OpenAI Embeddings-API generiert einen Einbettungsvektor des Eingabetexts. Verwenden Sie diese API, um die Einbettungen für alle durchsuchten Elemente festzulegen. Das azure_ai
-Schema der azure_openai
-Erweiterung erleichtert das Aufrufen der API aus SQL, um Einbettungen zu generieren, unabhängig davon, ob Elementeinbettungen initialisiert oder Abfragen direkt eingebettet werden. Diese Einbettungen können dann verwendet werden, um die Vektorgleichheitssuche oder anders gesagt, die semantische Suche durchzuführen.
Verwenden der azure_ai
-Erweiterung mit Azure OpenAI
Um die Azure OpenAI Embeddings-API von PostgreSQL aufzurufen, müssen Sie die azure_ai
-Erweiterung aktivieren und konfigurieren, Zugriff auf Azure OpenAI gewähren und ein Azure OpenAI-Modell bereitstellen. Weitere Informationen finden Sie in der Azure OpenAI in Azure Database for PostgreSQL – Flexible Server-Dokumentation.
Sobald die Umgebung bereit ist und die Erweiterung zugelassen ist, führen Sie diese SQL-Datei aus:
/* Enable the extension. */
CREATE EXTENSION azure_ai;
Außerdem müssen Sie den Endpunkt- und Zugriffsschlüssel Ihrer OpenAI-Dienstressource konfigurieren:
SELECT azure_ai.set_setting('azure_openai.endpoint', '{your-endpoint-url}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{your-api-key}}');
Sobald azure_ai
und Azure OpenAI konfiguriert sind, ist das Abrufen und Speichern von Einbettungen einfach eine Frage des Aufrufens einer Funktion in der SQL-Abfrage. Wenn eine Tabelle listings
eine description
-Spalte und eine listing_vector
-Spalte hat, können Sie die Einbettung für alle Einträge mit der folgenden Abfrage generieren und speichern. Ersetzen Sie {your-deployment-name}
durch den Bereitstellungsnamen aus dem Azure OpenAI Studio für das Modell, das Sie erstellt haben.
UPDATE listings
SET listing_vector = azure_openai.create_embeddings('{your-deployment-name}', description, max_attempts => 5, retry_delay_ms => 500)
WHERE listing_vector IS NULL;
Die listing_vector
-Vektorspalte muss dieselbe Anzahl von Dimensionen aufweisen, wie das Sprachmodell erzeugt.
Führen Sie die folgende Abfrage aus, um eine Dokumenteinbettung anzuzeigen:
SELECT listing_vector FROM listings LIMIT 1;
Das Ergebnis ist ein Vektor von Gleitkommazahlen. Sie können zuerst \x
ausführen, um die Ausgabe besser lesbar zu machen.
Dynamisches Generieren einer Abfrageeinbettung
Sobald Sie Einbettungen für die Dokumente haben, die Sie durchsuchen möchten, können Sie eine semantische Suchabfrage ausführen. Dazu müssen Sie auch eine Einbettung für den Abfragetext generieren.
Mit dem azure_openai
-Schema der azure_ai
-Erweiterung können Sie Einbettungen in SQL generieren. Um beispielsweise die drei obersten Listings zu finden, deren Text der Abfrage „Finde Orte in einer fußläufig erreichbaren Nachbarschaft" am semantisch ähnlichsten ist, führen Sie die folgende SQL-Datei aus:
SELECT id, description FROM listings
ORDER BY listing_vector <=> azure_openai.create_embeddings('{your-deployment-name}', 'Find me places in a walkable neighborhood.')::vector
LIMIT 3;
Der <=>
-Operator berechnet den Kosinusabstand zwischen den beiden Vektoren, der semantischen Ähnlichkeitsmetrik. Je näher die Vektoren, desto semantisch ähnlicher, und je weiter die Vektoren auseinander sind, desto semantisch unterschiedlicher sind die Vektoren.
Der ::vector
-Operator konvertiert die generierten Einbettungen in PostgreSQL-Vektorarrays.
Die Abfrage gibt die drei obersten Listing-IDs und -Beschreibungen zurück, die von ähnlicher bis unterschiedlicher (mehr bis weniger ähnlich) bewertet wurden.