Generieren von Vektoreinbettungen mit Azure OpenAI in Azure Database for PostgreSQL – Flexible Server
GILT FÜR: Azure Database for PostgreSQL – Flexibler Server
Rufen Sie Azure OpenAI Einbettungen auf, um eine Vektordarstellung der Eingabe zu erhalten, die dann bei der Suche nach Vektorähnlichkeit verwendet und von Machine Learning-Modellen genutzt werden kann.
Voraussetzungen
- Aktivieren und Konfigurieren der
azure_ai
Erweiterung. - Erstellen Sie ein Open AI-Konto, und fordern Sie den Zugriff auf den Azure OpenAI Servicean.
- Zuweisung des Zugriffs auf Azure OpenAI im gewünschten Abonnement.
- Zuweisung der Zugriffsberechtigungen zum Erstellen von Azure OpenAI-Ressourcen und zum Bereitstellen von Modellen.
- Erstellen und Bereitstellen einer Azure OpenAI Service-Ressource und ein Modell, z. B. unter Verwendung des Einbettungsmodells text-embedding-ada-002. Den Bereitstellungsnamen kopieren, da er zum Erstellen von Einbettungen benötigt wird.
Konfigurieren des OpenAI-Endpunkts und des Schlüssels
In der Azure OpenAI-Ressource finden Sie unter Ressourcenverwaltung>Schlüssel und Endpunkte den Endpunkt und die Schlüssel für Ihre Azure OpenAI-Ressource. Um die Modellbereitstellung aufzurufen, aktivieren Sie die azure_ai
-Erweiterung mithilfe des Endpunkts und eines der Schlüssel.
select azure_ai.set_setting('azure_openai.endpoint', 'https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');
azure_openai.create_embeddings
Ruft die Azure OpenAI-API auf, um Einbettungen mithilfe der Bereitstellung über die angegebene Eingabe zu erstellen.
azure_openai.create_embeddings(deployment_name text, input text, timeout_ms integer DEFAULT 3600000, throw_on_error boolean DEFAULT true, max_attempts integer DEFAULT 1, retry_delay_ms integer DEFAULT 1000)
azure_openai.create_embeddings(deployment_name text, input text[], batch_size integer DEFAULT 100, timeout_ms integer DEFAULT 3600000, throw_on_error boolean DEFAULT true, max_attempts integer DEFAULT 1, retry_delay_ms integer DEFAULT 1000)
Argumente
deployment_name
text
Name der Bereitstellung in Azure OpenAI Studio, das das Modell enthält.
input
text
oder text[]
einzelner Text oder ein Array von Texten, abhängig von der Überladung der verwendeten Funktion, für die Einbettungen erstellt werden.
dimensions
integer DEFAULT NULL
Die Anzahl der Dimensionen, die die resultierenden Ausgabeeinbettungen aufweisen sollen. Wird nur in Modellen von text-embedding-3 und höher unterstützt Verfügbar in den Versionen 1.1.0 und höher der Erweiterung „azure_ai“
batch_size
integer DEFAULT 100
Anzahl der Datensätze, die gleichzeitig verarbeitet werden sollen (nur für die Überladung der Funktion verfügbar, für die der Parameter input
vom Typ text[]
ist).
timeout_ms
integer DEFAULT 3600000
Timeout in Millisekunden, nach dem der Vorgang beendet wird.
throw_on_error
boolean DEFAULT true
Bei Fehler sollte die Funktion eine Ausnahme auslösen, die zu einem Rollback des Umbruchs von Transaktionen führt.
max_attempts
integer DEFAULT 1
Häufigkeit, mit der die Erweiterung die Erstellung des Azure OpenAI-Einbettungsversuchs wiederholt, wenn ein Fehler auftritt, der wiederholt werden kann
retry_delay_ms
integer DEFAULT 1000
Zeitdauer (Millisekunden), die die Erweiterung wartet, bevor der Azure OpenAI-Endpunkt zum Einbetten der Erstellung erneut aufgerufen wird, wenn ein Fehler auftritt, der wiederholt werden kann
Rückgabetyp
real[]
oder TABLE(embedding real[])
ein einzelnes Element oder eine einspaltige Tabelle, abhängig von der Überladung der verwendeten Funktion, mit Vektordarstellungen des Eingabetexts, wenn sie von der ausgewählten Bereitstellung verarbeitet wird.
Verwenden von OpenAI zum Erstellen von Einbettungen und Speichern in einem Vektordatentyp
-- Create tables and populate data
DROP TABLE IF EXISTS conference_session_embeddings;
DROP TABLE IF EXISTS conference_sessions;
CREATE TABLE conference_sessions(
session_id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
title text,
session_abstract text,
duration_minutes integer,
publish_date timestamp
);
-- Create a table to store embeddings with a vector column.
CREATE TABLE conference_session_embeddings(
session_id integer NOT NULL REFERENCES conference_sessions(session_id),
session_embedding vector(1536)
);
-- Insert a row into the sessions table
INSERT INTO conference_sessions
(title,session_abstract,duration_minutes,publish_date)
VALUES
('Gen AI with Azure Database for PostgreSQL flexible server'
,'Learn about building intelligent applications with azure_ai extension and pg_vector'
, 60, current_timestamp)
,('Deep Dive: PostgreSQL database storage engine internals'
,' We will dig deep into storage internals'
, 30, current_timestamp)
;
-- Get an embedding for the Session Abstract
SELECT
pg_typeof(azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract)) as embedding_data_type
,azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract)
FROM
conference_sessions c LIMIT 10;
-- Insert embeddings
INSERT INTO conference_session_embeddings
(session_id, session_embedding)
SELECT
c.session_id, (azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract))
FROM
conference_sessions as c
LEFT OUTER JOIN
conference_session_embeddings e ON e.session_id = c.session_id
WHERE
e.session_id IS NULL;
-- Create a HNSW index
CREATE INDEX ON conference_session_embeddings USING hnsw (session_embedding vector_ip_ops);
-- Retrieve top similarity match
SELECT
c.*
FROM
conference_session_embeddings e
INNER JOIN
conference_sessions c ON c.session_id = e.session_id
ORDER BY
e.session_embedding <#> azure_openai.create_embeddings('text-embedding-ada-002', 'Session to learn about building chatbots')::vector
LIMIT 1;