Udostępnij za pośrednictwem


Generowanie osadzania wektorów przy użyciu azure_local_ai na serwerze elastycznym usługi Azure Database for PostgreSQL (wersja zapoznawcza)

Wymagania wstępne

  1. Wystąpienie serwera elastycznego usługi Azure Database for PostgreSQL uruchomione na jednostce SKU maszyny wirtualnej zoptymalizowanej pod kątem pamięci. Dowiedz się więcej o maszynach wirtualnych zoptymalizowanych pod kątem pamięci platformy Azure tutaj: Rozmiary maszyn wirtualnych platformy Azure — Pamięć — Azure Virtual Machines

  2. Włącz następujące rozszerzenia,

    1. wektor

    2. azure_local_ai

Aby uzyskać więcej informacji na temat włączania rozszerzeń w usłudze Azure Database for PostgreSQL — serwer elastyczny, zobacz How to enable extensions in Azure Database for PostgreSQL (Jak włączyć rozszerzenia w usłudze Azure Database for PostgreSQL).

Uwaga

Włączenie lokalnej sztucznej inteligencji platformy Azure w wersji zapoznawczej spowoduje wdrożenie wielojęzycznego modelu e5-small w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL. Połączona dokumentacja zawiera postanowienia licencyjne od zespołu e5. Dodatkowe modele typu open source innych firm mogą być dostępne do ciągłej instalacji.

Funkcje udostępniane przez rozszerzenie azure_local_ai

Rozszerzenie azure_local_ai udostępnia zestaw funkcji. Te funkcje umożliwiają tworzenie wektorowych osadzeń na podstawie danych tekstowych, co ułatwia opracowywanie aplikacji generujących sztuczną inteligencję. Rozszerzenie oferuje funkcje służące do tworzenia osadzania, pobierania ustawień i nie tylko. Korzystając z tych funkcji, można uprościć proces programowania i zmniejszyć opóźnienie, eliminując konieczność dodatkowych zdalnych wywołań interfejsu API do modeli osadzania sztucznej inteligencji hostowanych poza granicą bazy danych PostgreSQL.

Schemat Nazwisko Typ danych wyników Typy danych argumentów
azure_local_ai create_embeddings TABLE(osadzanie rzeczywiste[]) model_uri tekst, tekst wejściowy[], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000
azure_local_ai create_embeddings real[] model_uri tekst, tekst wejściowy, timeout_ms liczba całkowita DEFAULT 3600000
azure_local_ai get_setting jsonb keys text[] DEFAULT ARRAY[]:text[], timeout_ms integer DEFAULT 3600000
azure_local_ai get_setting text tekst klucza, timeout_ms liczba całkowita DEFAULT 3600000
azure_local_ai model_metadata jsonb tekst model_uri

Można je wyświetlić za pomocą polecenia PSQL,

\df azure_local_ai.*

azure_local_ai.create_embeddings

Rozszerzenie azure_local_ai umożliwia tworzenie i aktualizowanie osadzania zarówno w formacie skalarnym, jak i wsadowym, wywołując lokalnie wdrożony moduł LLM.

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);

Argumenty

model_uri

text nazwa wywoływanego modelu osadzania tekstu w celu utworzenia osadzania.

input

text lub text[] pojedynczy tekst lub tablica tekstów, w zależności od przeciążenia używanej funkcji, dla której są tworzone osadzanie.

batch_size

bigint DEFAULT 128 liczba rekordów do przetworzenia w danym momencie (dostępna tylko dla przeciążenia funkcji, dla której parametr input jest typu text[]).

timeout_ms

integer DEFAULT 3600000 limit czasu w milisekundach, po którym operacja jest zatrzymana.

Użyj azure_local_ai i lokalnie wdrożonego wielojęzycznego modelu e5-small, aby utworzyć osadzanie i zapisać je jako wektory

Poniżej przedstawiono przykłady, których można używać we własnym środowisku do testowania generowania osadzania przy użyciu lokalnie wdrożonego wielojęzycznego modelu e5.

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

Aktualizowanie osadzania podczas wstawiania

Poniżej przedstawiono przykłady, których można używać we własnym środowisku do testowania generowania osadzania przy użyciu lokalnie wdrożonego wielojęzycznego modelu e5.

-- 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;

Konfiguracja środowiska uruchomieniowego ONNX

azure_local_ai.get_setting

Służy do uzyskiwania bieżących wartości opcji konfiguracji.

SELECT azure_local_ai.get_setting(key TEXT)

Rozszerzenie azure_local_ai obsługuje przeglądanie parametrów konfiguracji puli wątków środowiska uruchomieniowego ONNX w usłudze środowiska uruchomieniowego ONNX. Zmiany nie są obecnie dozwolone. Zobacz Dostrajanie wydajności środowiska uruchomieniowego ONNX.

Argumenty

Klucz

Prawidłowe wartości dla elementu key to:

  • intra_op_parallelism: Ustawia łączną liczbę wątków używanych do równoległości pojedynczego operatora przez pulę wątków środowiska uruchomieniowego ONNX. Domyślnie maksymalizujemy liczbę wątków wewnątrzoperacyjnie, jak to możliwe, ponieważ poprawia ogólną przepływność (domyślnie wszystkie dostępne procesory).
  • inter_op_parallelism: Ustawia łączną liczbę wątków używanych do przetwarzania wielu operatorów równolegle przez pulę wątków środowiska uruchomieniowego ONNX. Domyślnie ustawiliśmy minimalny możliwy wątek, czyli 1. Zwiększenie często boli wydajność ze względu na częste przełączanie kontekstu między wątkami.
  • spin_control: przełącza pulę wątków środowiska uruchomieniowego ONNX na potrzeby żądań. Gdy jest wyłączona, zużywa mniej procesora CPU, co powoduje większe opóźnienie. Domyślnie jest ustawiona wartość true (włączona).

Typ zwracany

TEXT reprezentująca bieżącą wartość wybranego ustawienia.