Udostępnij za pośrednictwem


Generowanie osadzania wektorów w usłudze Azure Database for PostgreSQL — serwer elastyczny z lokalnie wdrożonym rozwiązaniem LLM (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. Możesz włączyć rozszerzenie wektora, ponieważ zapewnia funkcje przechowywania i efektywnego indeksowania osadzania tekstu w bazie danych.

Włączanie rozszerzenia

Aby włączyć azure_local_ai w wystąpieniu serwera elastycznego usługi Azure Database for PostgreSQL, musisz zezwolić na listę azure_local_ai rozszerzeń zgodnie z opisem w artykule Zezwalaj na rozszerzenie.

Ważne

Hostowanie modeli językowych w bazie danych wymaga dużego zużycia pamięci. Aby zapewnić obsługę tego wymagania, azure_local_ai jest obsługiwana tylko w jednostkach SKU maszyn wirtualnych platformy Azure zoptymalizowanych pod kątem pamięci z co najmniej 4 rdzeniami wirtualnymi. Jeśli używasz maszyny wirtualnej, która nie spełnia minimalnych wymagań, azure_local_ai rozszerzenie nie będzie wyświetlane na liście dozwolonych wartości parametru azure.extensions serwera.

Po udostępnieniu rozszerzenia możesz postępować zgodnie z instrukcjami podanymi w artykule tworzenie rozszerzeń , aby zainstalować rozszerzenie w każdej bazie danych, z której ma być używany.

Uwaga

Włączenie lokalnej sztucznej inteligencji platformy Azure 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.

Zainstalowanie rozszerzenia azure_local_ai tworzy schemat o nazwie azure_local_ai , w którym rozszerzenie przechowuje tabele, funkcje i wszelkie inne obiekty związane z programem SQL, których wymaga zaimplementowania i uwidocznienia jego funkcjonalności.

Ważne

Możesz włączyć rozszerzenie wektora, ponieważ jest wymagane do przechowywania osadzania tekstu w bazie danych PostgreSQL.

Funkcje udostępniane przez rozszerzenie

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

Te funkcje można wyświetlić przy użyciu następującego polecenia psql meta-command:

\df azure_local_ai.*

azure_local_ai.create_embeddings

azure_local_ai Rozszerzenie umożliwia tworzenie i aktualizowanie osadzania zarówno w formacie skalarnym, jak i wsadowym, wywołując lokalnie wdrożone rozwiązanie 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.

azure_local_ai.get_setting

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

SELECT azure_local_ai.get_setting(key TEXT)

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

Przykłady

Tworzenie osadzania na podstawie istniejących tekstów

Poniżej przedstawiono przykład, który może być używany we własnym środowisku do testowania generowania osadzania przy użyciu lokalnie wdrożonego wielojęzycznego modelu e5.

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

Generowanie osadzania podczas wstawiania nowego tekstu

Poniżej przedstawiono przykład, który może być używany we własnym środowisku do testowania generowania osadzania przy użyciu lokalnie wdrożonego wielojęzycznego modelu e5.

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