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