Delen via


Vector embeddings genereren in Azure Database for PostgreSQL - Flexible Server met lokaal geïmplementeerde LLM (preview)

Vereisten

  1. Een Azure Database for PostgreSQL Flexible Server-exemplaar dat wordt uitgevoerd op een vm-SKU die is geoptimaliseerd voor geheugen. Meer informatie over vm's die zijn geoptimaliseerd voor Azure-geheugen vindt u hier: Azure VM-grootten - Geheugen - Virtuele Azure-machines

  2. U kunt de vectorextensie inschakelen, omdat deze functionaliteit biedt voor het opslaan en efficiënt indexeren van tekst in uw database.

De extensie inschakelen

Voordat u azure_local_ai kunt inschakelen op uw exemplaar van flexibele Azure Database for PostgreSQL-server, moet u de azure_local_ai extensie toestaan zoals beschreven in een extensie toestaan.

Belangrijk

Voor het hosten van taalmodellen in de database is een grote geheugenvoetafdruk vereist. Ter ondersteuning van deze vereiste wordt azure_local_ai alleen ondersteund op voor geheugen geoptimaliseerde Azure VM-SKU's met minimaal 4 vCores. Als u een virtuele machine gebruikt die niet voldoet aan de minimale vereisten, wordt de azure_local_ai extensie niet weergegeven in de lijst met toegestane waarden voor de azure.extensions serverparameter.

Zodra de extensie is toegestaan, kunt u de instructies in het maken van extensies volgen om de extensie in elke database te installeren van waaruit u deze wilt gebruiken.

Notitie

Als u Azure Local AI inschakelt, wordt het meertalige e5-kleine model geïmplementeerd in uw Azure Database for PostgreSQL Flexible Server-exemplaar. De gekoppelde documentatie bevat licentievoorwaarden van het e5-team. Er kunnen doorlopend extra opensource-modellen van derden beschikbaar komen voor installatie.

Als u de extensie azure_local_ai installeert, wordt een schema gemaakt waarin tabellen, functies en andere SQL-gerelateerde objecten worden opgeslagen azure_local_ai die nodig zijn om de functionaliteit ervan te implementeren en beschikbaar te maken.

Belangrijk

Mogelijk wilt u de vectorextensie inschakelen, omdat het vereist is om tekst insluitingen op te slaan in uw PostgreSQL-database.

Functies die worden geleverd door de extensie

De azure_local_ai extensie biedt een set functies. Met deze functies kunt u vector-insluitingen maken op basis van tekstgegevens, zodat u eenvoudiger generatieve AI-toepassingen kunt ontwikkelen. De extensie biedt functies voor het maken van insluitingen, het ophalen van instellingen en meer. Door deze functies te gebruiken, kunt u het ontwikkelingsproces vereenvoudigen en latentie verminderen door extra externe API-aanroepen naar AI-insluitingsmodellen die buiten de grens van PostgreSQL worden gehost, te elimineren.

Schema Naam Resultaatgegevenstype Argumentgegevenstypen
azure_local_ai create_embeddings TABLE(insluiten van real[]) model_uri tekst, invoertekst[], batch_size bigint DEFAULT 128, timeout_ms geheel getal DEFAULT 3600000
azure_local_ai create_embeddings real[] model_uri tekst, invoertekst, timeout_ms geheel getal DEFAULT 3600000
azure_local_ai get_setting jsonb toetsentekst[] STANDAARDMATRIX[]::text[], timeout_ms geheel getal STANDAARD 36000000
azure_local_ai get_setting sms verzenden sleuteltekst, timeout_ms geheel getal DEFAULT 3600000
azure_local_ai model_metadata jsonb tekst model_uri

Deze functies kunnen worden weergegeven met behulp van de volgende psql-meta-opdracht:

\df azure_local_ai.*

azure_local_ai.create_embeddings

Met de azure_local_ai extensie kunt u insluitingen maken en bijwerken, zowel in scalaire als batch-indeling, waarbij u de lokaal geïmplementeerde LLM aanroept.

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

Argumenten

model_uri

text naam van het insluitmodel voor tekst dat is aangeroepen om het insluiten te maken.

input

text of text[] één tekst of matrix van teksten, afhankelijk van de overbelasting van de gebruikte functie, waarvoor insluitingen worden gemaakt.

batch_size

bigint DEFAULT 128 aantal records dat tegelijk moet worden verwerkt (alleen beschikbaar voor de overbelasting van de functie waarvoor de parameter input van het type text[]is).

timeout_ms

integer DEFAULT 3600000 time-out in milliseconden waarna de bewerking is gestopt.

azure_local_ai.get_setting

Wordt gebruikt om de huidige waarden van configuratieopties te verkrijgen.

SELECT azure_local_ai.get_setting(key TEXT)

azure_local_ai ondersteunt het controleren van de configuratieparameters van ONNX Runtime-threadpool binnen de ONNX Runtime-service. Wijzigingen zijn op dit moment niet toegestaan. Zie PRESTATIES van ONNX Runtime afstemmen.

Argumenten

Sleutel

Geldige waarden zijn:

  • intra_op_parallelism: Hiermee stelt u het totale aantal threads in dat wordt gebruikt voor het parallelliseren van één operator door ONNX Runtime-thread-pool. Standaard maximaliseren we het aantal intra-ops-threads zoveel mogelijk, omdat de totale doorvoer veel wordt verbeterd (standaard alle beschikbare CPU's).
  • inter_op_parallelism: Hiermee stelt u het totale aantal threads in dat wordt gebruikt voor het parallel berekenen van meerdere operators door ONNX Runtime-thread-pool. Standaard stellen we deze in op minimaal mogelijke threads, namelijk 1. Het verhogen doet vaak pijn aan de prestaties als gevolg van frequente contextswitches tussen threads.
  • spin_control: schakelt ONNX Runtime thread-pool draaien voor aanvragen. Wanneer deze optie is uitgeschakeld, wordt minder cpu gebruikt en wordt er dus meer latentie veroorzaakt. Deze is standaard ingesteld op true (ingeschakeld).

Retourtype

TEXT de huidige waarde van de geselecteerde instelling weergeven.

Voorbeelden

Insluitingen maken van bestaande teksten

Hieronder volgt een voorbeeld dat in uw eigen omgeving kan worden gebruikt om het genereren van insluiten te testen met het lokaal geïmplementeerde meertalige-e5-model.

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

Insluitingen genereren bij het invoegen van nieuwe tekst

Hieronder volgt een voorbeeld dat in uw eigen omgeving kan worden gebruikt om het genereren van insluiten te testen met het lokaal geïmplementeerde meertalige-e5-model.

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