Erstellen von Einbettungen mit der Azure KI-Erweiterung

Abgeschlossen

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.

Ein Diagramm mit dem Eingabetext

Einführung in azure_ai und Azure OpenAI

Die flexible Erweiterung Azure Database for PostgreSQL für Azure AI bietet benutzerdefinierte Funktionen zur Integration in Microsoft Foundry, einschließlich Azure OpenAI und Azure AI Search.

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, sei es zur Initialisierung von Elementeinbettungen oder zur dynamischen Erstellung einer Abfrageeinbettung. Diese Einbettungen können dann verwendet werden, um die Vektorgleichheitssuche oder mit anderen Worten 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 on 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 eine einfache Frage des Aufrufens einer Funktion in der SQL-Abfrage. Angenommen, es gibt eine Tabelle listings mit einer description Spalte und einer listing_vector Spalte, kann man die Einbettung für alle Einträge mit der folgenden Abfrage generieren und speichern. Ersetzen Sie {your-deployment-name} mit dem Namen der Bereitstellung 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 ausführen \x , 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.

Das azure_openai Schema der azure_ai Erweiterung erlaubt es Ihnen, Einbettungen innerhalb von SQL zu generieren. Um beispielsweise die drei obersten Auflistungen zu finden, deren Text am semantischsten der Abfrage "Find me places in a walkable neighborhood" ähnelt, 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; je weiter die Vektoren, desto semantisch unterschiedlicher.

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.