Dela via


Generera vektorinbäddningar i Azure Database for PostgreSQL – flexibel server med lokalt distribuerad LLM (förhandsversion)

Förutsättningar

  1. En Azure Database for PostgreSQL – flexibel serverinstans som körs på en minnesoptimerad VM-SKU. Läs mer om azure-minnesoptimerade virtuella datorer här: Storlekar på virtuella Azure-datorer – Minne – Virtuella Azure-datorer

  2. Du kanske vill aktivera vektortillägget eftersom det ger funktioner för att lagra och effektivt indexera textbäddningar i databasen.

Aktivera tillägget

Innan du kan aktivera azure_local_ai på din flexibla Azure Database for PostgreSQL-serverinstans måste du tillåtalistning av tillägget enligt beskrivningen azure_local_ai i Tillåt ett tillägg.

Viktigt!

Värd för språkmodeller i databasen kräver ett stort minnesfotavtryck. För att stödja detta krav azure_local_ai stöds endast på minnesoptimerade SKU:er för virtuella Azure-datorer med minst 4 virtuella kärnor. Om du använder en virtuell dator som inte uppfyller minimikraven azure_local_ai visas inte tillägget i listan över tillåtna värden för azure.extensions serverparametern.

När tillägget är tillåtet kan du följa anvisningarna i skapa tillägg för att installera tillägget i varje databas där du vill använda det.

Kommentar

Om du aktiverar Azure Local AI distribueras modellen multilingual-e5-small till din Azure Database for PostgreSQL – flexibel serverinstans. Den länkade dokumentationen innehåller licensvillkor från e5-teamet. Ytterligare modeller med öppen källkod från tredje part kan bli tillgängliga för installation kontinuerligt.

När tillägget azure_local_ai installeras skapas ett schema med namnet azure_local_ai där tillägget lagrar tabeller, funktioner och andra SQL-relaterade objekt som krävs för att implementera och exponera dess funktioner.

Viktigt!

Du kanske vill aktivera vektortillägget eftersom det krävs för att lagra textinbäddningar i PostgreSQL-databasen.

Funktioner som tillhandahålls av tillägget

Tillägget azure_local_ai innehåller en uppsättning funktioner. Med de här funktionerna kan du skapa vektorbäddningar från textdata, vilket gör det enklare att utveckla generativa AI-program. Tillägget erbjuder funktioner för att skapa inbäddningar, hämta inställningar med mera. Med hjälp av dessa funktioner kan du förenkla utvecklingsprocessen och minska svarstiden genom att eliminera behovet av ytterligare fjärranslutna API-anrop till AI-inbäddningsmodeller som finns utanför PostgreSQL-gränsen.

Schema Name Resultatdatatyp Argumentdatatyper
azure_local_ai create_embeddings TABLE(bäddar in verkligt[]) model_uri text, matar in text[], batch_size bigint DEFAULT 128, timeout_ms heltal DEFAULT 3600000
azure_local_ai create_embeddings real[] model_uri text, indatatext, timeout_ms heltal STANDARD 3600000
azure_local_ai get_setting jsonb keys text[] DEFAULT ARRAY[]::text[], timeout_ms heltal DEFAULT 3600000
azure_local_ai get_setting text nyckeltext, timeout_ms heltal STANDARD 3600000
azure_local_ai model_metadata jsonb model_uri text

Dessa funktioner kan visas med följande psql-metakommando:

\df azure_local_ai.*

azure_local_ai.create_embeddings

Med azure_local_ai tillägget kan du skapa och uppdatera inbäddningar både i skalärt och batchformat och anropa den lokalt distribuerade 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);

Argument

model_uri

text namnet på den textinbäddningsmodell som anropas för att skapa inbäddningen.

indata

text eller text[] enskild text eller matris med texter, beroende på överbelastningen av den funktion som används, för vilken inbäddningar skapas.

batch_size

bigint DEFAULT 128 antal poster som ska bearbetas åt gången (endast tillgängligt för överlagring av funktionen för vilken parametern input är av typen text[]).

timeout_ms

integer DEFAULT 3600000 timeout i millisekunder varefter åtgärden stoppas.

azure_local_ai.get_setting

Används för att hämta aktuella värden för konfigurationsalternativ.

SELECT azure_local_ai.get_setting(key TEXT)

azure_local_ai stöder granskning av konfigurationsparametrarna för ONNX Runtime-trådpoolen i ONNX Runtime-tjänsten. Ändringar tillåts inte just nu. Se PRESTANDAjustering för ONNX Runtime.

Argument

Nyckel

Giltiga värden är:

  • intra_op_parallelism: Anger totalt antal trådar som används för parallellisering av en enskild operator med ONNX Runtime-trådpool. Som standard maximerar vi antalet intra ops-trådar så mycket som möjligt eftersom det förbättrar det totala dataflödet mycket (alla tillgängliga processorer som standard).
  • inter_op_parallelism: Anger totalt antal trådar som används för att beräkna flera operatorer parallellt med ONNX Runtime-trådpoolen. Som standard anger vi den till minsta möjliga tråd, vilket är 1. Att öka det skadar ofta prestanda på grund av frekventa kontextväxlar mellan trådar.
  • spin_control: Växlar ONNX Runtime-trådpoolens spinning för begäranden. När den är inaktiverad använder den mindre cpu och orsakar därmed mer svarstid. Som standard är den inställd på true (aktiverad).

Returtyp

TEXT representerar det aktuella värdet för den valda inställningen.

Exempel

Skapa inbäddningar från befintliga texter

Följande är ett exempel som kan användas i din egen miljö för att testa inbäddningsgenereringen med den lokalt distribuerade flerspråkiga e5-modellen.

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

Generera inbäddningar vid infogning av ny text

Följande är ett exempel som kan användas i din egen miljö för att testa inbäddningsgenereringen med den lokalt distribuerade flerspråkiga e5-modellen.

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