Sdílet prostřednictvím


Generování vektorových vkládání do flexibilního serveru Azure Database for PostgreSQL s místně nasazeným LLM (Preview)

Požadavky

  1. Instance flexibilního serveru Azure Database for PostgreSQL spuštěná na skladové poště optimalizované pro paměť virtuálního počítače. Další informace o virtuálních počítačích optimalizovaných pro paměť Azure najdete tady: Velikosti virtuálních počítačů Azure – Paměť – Azure Virtual Machines

  2. Rozšíření vektoru můžete chtít povolit, protože poskytuje funkce pro ukládání a efektivní indexování vkládání textu do databáze.

Povolení rozšíření

Než budete moct povolit azure_local_ai na instanci flexibilního serveru Azure Database for PostgreSQL, musíte povolit seznam azure_local_ai povolených rozšíření, jak je popsáno v tématu povolení rozšíření.

Důležité

Hostování jazykových modelů v databázi vyžaduje velké nároky na paměť. Pro podporu tohoto požadavku azure_local_ai se podporuje pouze u skladových položek virtuálních počítačů Azure optimalizovaných pro paměť s minimálně 4 virtuálními jádry. Pokud používáte virtuální počítač, který nesplňuje minimální požadavky, azure_local_ai rozšíření se nezobrazí v seznamu povolených hodnot pro azure.extensions parametr serveru.

Jakmile je rozšíření na seznamu povolených, můžete postupovat podle pokynů uvedených v tématu vytvoření rozšíření a nainstalovat rozšíření do každé databáze, ze které ho chcete použít.

Poznámka:

Povolením místní umělé inteligence Azure nasadíte do instance flexibilního serveru Azure Database for PostgreSQL vícejazyčný model e5-small . Propojená dokumentace poskytuje licenční podmínky od týmu e5. Další opensourcové modely třetích stran se můžou průběžně zpřístupnit pro instalaci.

Instalace rozšíření azure_local_ai vytvoří schéma, azure_local_ai ve kterém rozšíření ukládá tabulky, funkce a všechny ostatní objekty související s SQL, které vyžaduje k implementaci a zveřejnění jeho funkcí.

Důležité

Možná budete chtít povolit vektorové rozšíření, protože je potřeba ukládat vkládání textu do databáze PostgreSQL.

Funkce poskytované rozšířením

Rozšíření azure_local_ai poskytuje sadu funkcí. Tyto funkce umožňují vytvářet vektorové vkládání z textových dat, což usnadňuje vývoj generovaných aplikací umělé inteligence. Rozšíření nabízí funkce pro vytváření vkládání, získávání nastavení a další funkce. Pomocí těchto funkcí můžete zjednodušit proces vývoje a snížit latenci tím, že eliminujete potřebu dalších vzdálených volání rozhraní API pro modely vkládání AI hostované mimo hranice PostgreSQL.

Schéma Název Datový typ výsledku Datové typy argumentů
azure_local_ai create_embeddings TABLE(embedding real[]) model_uri text, vstupy[], batch_size bigint DEFAULT 128, timeout_ms celé číslo DEFAULT 3600000
azure_local_ai create_embeddings real[] model_uri text, vstupní text, timeout_ms celé číslo VÝCHOZÍ 36000000
azure_local_ai get_setting jsonb key text[] DEFAULT ARRAY[]::text[], timeout_ms celé číslo DEFAULT 36000000
azure_local_ai get_setting text text klíče, timeout_ms celé číslo DEFAULT 36000000
azure_local_ai model_metadata jsonb model_uri text

Tyto funkce se dají zobrazit pomocí následujícího příkazu meta-command psql:

\df azure_local_ai.*

azure_local_ai.create_embeddings

Rozšíření azure_local_ai umožňuje vytvářet a aktualizovat vkládání jak ve skalárním, tak dávkovém formátu a vyvolat místně nasazený 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 název modelu vkládání textu vyvolaného k vytvoření vkládání

input

text nebo text[] jeden text nebo pole textu v závislosti na přetížení použité funkce, pro kterou se vytvářejí vkládání.

batch_size

bigint DEFAULT 128 počet záznamů, které se mají zpracovat najednou (k dispozici pouze pro přetížení funkce, pro kterou je parametr input typu text[]).

timeout_ms

integer DEFAULT 3600000 časový limit v milisekundách, po kterém je operace zastavena.

azure_local_ai.get_setting

Slouží k získání aktuálních hodnot možností konfigurace.

SELECT azure_local_ai.get_setting(key TEXT)

azure_local_ai podporuje kontrolu parametrů konfigurace fondu vláken modulu runtime ONNX ve službě ONNX Runtime. Změny nejsou v tuto chvíli povoleny. Viz ladění výkonu modulu runtime ONNX.

Argumenty

Klíč

Platné hodnoty jsou:

  • intra_op_parallelism: Nastaví celkový počet vláken používaných pro paralelizaci jednoho operátoru podle fondu vláken modulu runtime ONNX. Ve výchozím nastavení maximalizujeme co nejvíce počtu vláken uvnitř operací, protože zvyšuje celkovou propustnost (ve výchozím nastavení všechny dostupné procesory).
  • inter_op_parallelism: Nastaví celkový počet vláken používaných pro paralelní výpočty více operátorů pomocí fondu vláken modulu runtime ONNX. Ve výchozím nastavení jsme ho nastavili na minimální možné vlákno, což je 1. Zvýšení často snižuje výkon kvůli častým přepínání kontextu mezi vlákny.
  • spin_control: Pro požadavky se přepíná do fondu vláken modulu runtime ONNX. Pokud je tato možnost zakázaná, využívá méně procesoru a tím způsobí větší latenci. Ve výchozím nastavení je nastavená na true (povoleno).

Návratový typ

TEXT představuje aktuální hodnotu vybraného nastavení.

Příklady

Vytváření vkládání z existujících textů

Následuje příklad, který můžete použít ve vlastním prostředí k otestování generování vkládání pomocí místně nasazeného modelu vícejazyčného 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.']);

Generování vkládání při vložení nového textu

Následuje příklad, který můžete použít ve vlastním prostředí k otestování generování vkládání pomocí místně nasazeného modelu vícejazyčného 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;