Freigeben über


Generieren von Vektoreinbettungen in Azure Database for PostgreSQL – Flexibler Server mit lokal bereitgestelltem LLM (Vorschau)

Voraussetzungen

  1. Eine Instanz von Azure Database for PostgreSQL – Flexibler Server auf einer arbeitsspeicheroptimierten VM-SKU. Hier erfahren Sie mehr über arbeitsspeicheroptimierte Azure-VMs: Azure-VM-Größen – Arbeitsspeicher – Azure Virtual Machines

  2. Möglicherweise möchten Sie die Vektorerweiterung aktivieren, da sie Funktionen zum Speichern und effizienten Indizieren von Texteinbettungen in Ihrer Datenbank ermöglicht.

Aktivieren der Erweiterung:

Bevor Sie azure_local_ai auf Ihrer flexiblen Serverinstanz in Azure Database for PostgreSQL aktivieren können, müssen Sie die Erweiterung azure_local_ai zulassen, wie unter Zulassen einer Erweiterung beschrieben.

Wichtig

Das Hosten von Sprachmodellen in der Datenbank erfordert einen großen Speicherbedarf. Um diese Anforderung zu erfüllen, wird azure_local_ai nur für speicheroptimierte Azure-VM-SKUs mit mindestens 4 vCores unterstützt. Wenn Sie einen virtuellen Computer verwenden, der die Mindestanforderungen nicht erfüllt, wird die Erweiterung azure_local_ai nicht in der Liste der erlaubten Werte für die azure.extensions-Serverparameter angezeigt.

Sobald die Erweiterung zugelassen wurde, können Sie die Anweisungen unter Erstellen von Erweiterungen befolgen, um die Erweiterung in jeder Datenbank zu installieren, von wo aus Sie sie verwenden möchten.

Hinweis

Durch Aktivieren der KI von Azure Local wird das Modell multilingual-e5-small in Ihrer Instanz von Azure Database for PostgreSQL – Flexibler Server bereitgestellt. Die verknüpfte Dokumentation enthält Lizenzbedingungen des e5-Teams. Möglicherweise werden kontinuierlich zusätzliche Open-Source-Modelle von Drittanbietern für die Installation zur Verfügung gestellt.

Durch die Installation der Erweiterung azure_local_ai wird das Schema azure_local_ai erstellt, in dem die Erweiterung Tabellen, Funktionen und alle anderen SQL-bezogenen Objekte speichert, die zum Implementieren und Verfügbarmachen ihrer Funktionalität erforderlich sind.

Wichtig

Sie sollten die Vektorerweiterung aktivieren, da sie zum Speichern von Texteinbettungen in Ihrer PostgreSQL-Datenbank erforderlich ist.

Von der Erweiterung bereitgestellte Funktionen

Die Erweiterung azure_local_ai stellt eine Reihe von Funktionen bereit. Mit diesen Funktionen können Sie Vektoreinbettungen aus Textdaten erstellen und dadurch die Entwicklung generativer KI-Anwendungen vereinfachen. Die Erweiterung bietet Funktionen zum Erstellen von Einbettungen, zum Abrufen von Einstellungen und vieles mehr. Mithilfe dieser Funktionen können Sie den Entwicklungsprozess vereinfachen und die Wartezeit reduzieren, da keine zusätzlichen Remote-API-Aufrufe von KI-Einbettungsmodellen mehr erforderlich sind, die außerhalb der PostgreSQL-Grenze gehostet werden.

Schema Name Ergebnisdatentyp Argumentdatentypen
azure_local_ai create_embeddings TABLE(embedding real[]) model_uri text, inputs text[], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000
azure_local_ai create_embeddings real[] model_uri text, input text, timeout_ms integer DEFAULT 3600000
azure_local_ai get_setting jsonb keys text[] DEFAULT ARRAY[]::text[], timeout_ms integer DEFAULT 3600000
azure_local_ai get_setting Text key text, timeout_ms integer DEFAULT 3600000
azure_local_ai model_metadata jsonb model_uri text

Diese Funktionen können mithilfe des folgenden psql meta-Befehls angezeigt werden:

\df azure_local_ai.*

azure_local_ai.create_embeddings

Mit der Erweiterung azure_local_ai können Sie Einbettungen sowohl im Skalar- als auch im Batchformat erstellen und aktualisieren und so das lokal bereitgestellte LLM aufrufen.

azure_local_ai.create_embeddings(model_uri text, input text, batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000);
azure_local_ai.create_embeddings(model_uri text, array[inputs [text]], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000);

Argumente

model_uri

text: Name des Texteinbettungsmodells, das zum Erstellen der Einbettung aufgerufen wird.

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.

batch_size

bigint DEFAULT 128 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.

azure_local_ai.get_setting

Wird verwendet, um aktuelle Werte von Konfigurationsoptionen abzurufen.

SELECT azure_local_ai.get_setting(key TEXT)

azure_local_ai unterstützt die Überprüfung der Konfigurationsparameter des ONNX-Laufzeitthreadpools innerhalb des ONNX-Laufzeitdiensts. Änderungen sind zu diesem Zeitpunkt nicht zulässig. Siehe Optimierung der ONNX-Laufzeitleistung.

Argumente

Schlüssel

Gültige Werte sind:

  • intra_op_parallelism: Legt die Gesamtanzahl der Threads fest, die für die Parallelisierung des einzelnen Operators durch den ONNX-Laufzeitthreadpool verwendet werden. Standardmäßig maximieren wir die Anzahl der internen Vorgangsthreads so weit wie möglich, da dies den Gesamtdurchsatz erheblich verbessert (standardmäßig alle verfügbaren CPUs).
  • inter_op_parallelism: Legt die Gesamtanzahl der Threads fest, die für das Berechnen mehrerer Operatoren parallel von ONNX-Runtime-Threadpool verwendet werden. Standardmäßig legen wir ihn auf den minimal möglichen Thread fest, d. h. 1. Die Erhöhung dieses Werts beeinträchtigt aufgrund häufiger Kontextwechsel zwischen Threads häufig die Leistung.
  • spin_control: Schaltet Spinvorgänge des ONNX-Laufzeitthreadpools für Anforderungen um. Wenn diese Option deaktiviert ist, verwendet sie weniger CPU und verursacht daher eine höhere Wartezeit. Sie ist standardmäßig auf „true“ (aktiviert) festgelegt.

Rückgabetyp

TEXT stellt den aktuellen Wert der ausgewählten Einstellung dar.

Beispiele

Erstellen von Einbettungen aus vorhandenen Texten

Im Folgenden finden Sie ein Beispiel, das in Ihrer eigenen Umgebung verwendet werden kann, um die Einbettungsgenerierung mit dem lokal bereitgestellten multilingual-e5-Modell zu testen.

-- Create documents table
CREATE TABLE documents(doc_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, doc_contents TEXT NOT NULL, last_update TIMESTAMPTZ DEFAULT now());

--Insert data into the docs table
INSERT INTO documents(doc_contents) VALUES
  ('Create in-database embeddings with azure_local_ai extension.'),
  ('Enable RAG patterns with in-database embeddings and vectors on Azure Database for PostgreSQL - Flexible server.'),
  ('Generate vector embeddings in PostgreSQL with azure_local_ai extension.'),
  ('Generate text embeddings in PostgreSQL for retrieval augmented generation (RAG) patterns with azure_local_ai extension and locally deployed LLM.'),
  ('Use vector indexes and Azure OpenAI embeddings in PostgreSQL for retrieval augmented generation.');


-- Add a vector column and generate vector embeddings from locally deployed model
ALTER TABLE documents
  ADD COLUMN doc_vector vector(384) -- multilingual-e5 embeddings are 384 dimensions
  GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc_contents)::vector) STORED; -- TEXT string sent to local model

--View floating point entries in the doc_vector column
SELECT doc_vector FROM documents;

-- Add a single record to the documents table and the vector embedding using azure_local_ai and locally deployed model will be automatically generated
INSERT INTO documents(doc_contents) VALUES
  ('Semantic Search with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI');

--View all document entries, their contents, embeddings and last time the row was updated
SELECT doc_contents, doc_vector, last_update FROM documents;

-- The following command leverages the overload of azure_local_ai.create_embeddings function which accepts and array of TEXT
-- and produces a table for which each row contains the embedding of one element in the input array
SELECT azure_local_ai.create_embeddings('multilingual-e5-small:v1', array['Recommendation System with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI.', 'Generative AI with Azure Database for PostgreSQL - Flexible Server.']);

Erstellen von Einbettungen beim Einfügen von neuem Text

Im Folgenden finden Sie ein Beispiel, das in Ihrer eigenen Umgebung verwendet werden kann, um die Einbettungsgenerierung mit dem lokal bereitgestellten multilingual-e5-Modell zu testen.

-- Create documents table
CREATE TABLE documents(doc_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, doc_contents TEXT NOT NULL, last_update TIMESTAMPTZ DEFAULT now(), doc_vector vector(384)	GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc_contents)::vector) STORED);

-- Insert data into the documents table
INSERT INTO documents(doc_contents) VALUES
  ('Create in-database embeddings with azure_local_ai extension.'),
  ('Enable RAG patterns with in-database embeddings and vectors on Azure Database for PostgreSQL - Flexible server.'),
  ('Generate vector embeddings in PostgreSQL with azure_local_ai extension.'),
  ('Generate text embeddings in PostgreSQL for retrieval augmented generation (RAG) patterns with azure_local_ai extension and locally deployed LLM.'),
  ('Use vector indexes and Azure OpenAI embeddings in PostgreSQL for retrieval augmented generation.');

-- Query embedding text, list results by descending similarity score
WITH all_documents AS (
 SELECT doc_id, doc_contents, doc_vector FROM documents
),
target_documents AS (
 SELECT azure_local_ai.create_embeddings('multilingual-e5-small:v1', 'Generate text embeddings in PostgreSQL.') doc_vector
)
SELECT all_documents.doc_id, all_docs.doc_contents , 1 - (all_documents.doc_vector::vector <=> target_documents.doc_vector::vector) AS similarity
 FROM target_documents, all_documents
 ORDER BY similarity DESC
 LIMIT 2;