Freigeben über


Generieren von Vektoreinbettungen mit azure_local_ai auf Azure Database for PostgreSQL – Flexibler Server (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. Aktivieren Sie die folgenden Erweiterungen:

    1. vector

    2. azure_local_ai

Weitere Informationen zum Aktivieren von Erweiterungen in Azure Database for PostgreSQL – Flexibler Server finden Sie unter Aktivieren von Erweiterungen in Azure Database for PostgreSQL.

Hinweis

Durch Aktivieren der Vorschauversion von „azure_local_ai“ 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.

Von der Erweiterung „azure_local_ai“ 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 können über den PSQL-Befehl 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.

Verwenden Sie azure_local_ai und das lokal bereitgestellte multilingual-e5-small-Modell, um Einbettungen zu erstellen und als Vektoren zu speichern.

Nachfolgend finden Sie Beispiele, die in Ihrer eigenen Umgebung verwendet werden können, um die Einbettungsgenerierung mit dem lokal bereitgestellten multilingual-e5-Modell zu testen.

--Create docs table
CREATE TABLE docs(doc_id int generated always as identity primary key, doc text not null, embedding float4[], last_update timestamptz default now());

--Insert data into the docs table
INSERT INTO docs(doc) 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 docs
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)::vector) STORED; -- TEXT string sent to local model

--View floating point entries in the doc_vector column
select doc_vector from docs;

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

--View all doc entries and their doc_vector column
select doc, doc_vector, last_update from docs;

-- Simple array embedding
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.']);

Aktualisieren von Einbettungen beim Einfügen

Nachfolgend finden Sie Beispiele, die in Ihrer eigenen Umgebung verwendet werden können, um die Einbettungsgenerierung mit dem lokal bereitgestellten multilingual-e5-Modell zu testen.

-- Update embeddings upon insertion

-- create table
create table docs(doc_id int generated always as identity primary key, doc text not null, last_update timestamptz default now(), embedding float4[] 
	GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc)) STORED);

--Insert data into the docs table
INSERT INTO docs(doc) 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_docs as (
 select doc_id, doc, embedding
  from docs
), target_doc as (
 select azure_local_ai.create_embeddings('multilingual-e5-small:v1', 'Generate text embeddings in PostgreSQL.') embedding
)
select all_docs.doc_id, all_docs.doc , 1 - (all_docs.embedding::vector <=> target_doc.embedding::vector) as similarity
 from target_doc, all_docs
 order by similarity desc
 limit 2;

ONNX-Laufzeitkonfiguration

azure_local_ai.get_setting

Wird verwendet, um aktuelle Werte von Konfigurationsoptionen abzurufen.

SELECT azure_local_ai.get_setting(key TEXT)

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

Argumente

Schlüssel

Gültige Werte für key sind die folgenden Werte:

  • 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 standardmäßig auf „true“ (aktiviert) festgelegt.

Rückgabetyp

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