Compartir a través de


Generación de inserciones de vectores con azure_local_ai en el servidor flexible de Azure Database for PostgreSQL (versión preliminar)

Requisitos previos

  1. Una instancia de servidor flexible de Azure Database for PostgreSQL que se ejecuta en una SKU de máquina virtual optimizada para memoria. Obtenga más información sobre las máquinas virtuales optimizadas para memoria de Azure aquí: Tamaños de máquina virtual de Azure: Memoria: Azure Virtual Machines

  2. Habilite las siguientes extensiones:

    1. vector

    2. azure_local_ai

Para más información sobre cómo habilitar extensiones en el servidor flexible de Azure Database for PostgreSQL, consulte Habilitación de extensiones en Azure Database for PostgreSQL –.

Nota:

Al habilitar la versión preliminar de Azure Local AI, se implementará el modelo multilingual-e5-small en la instancia del servidor flexible de Azure Database for PostgreSQL. La documentación vinculada proporciona los términos de licencia del equipo de e5. Es posible que otros modelos de código abierto de terceros estén disponibles para su instalación de forma continua.

Funciones proporcionadas por la extensión azure_local_ai

La extensión azure_local_ai proporciona un conjunto de funciones. Estas funciones permiten crear inserciones de vectores a partir de datos de texto, lo que facilita el desarrollo de aplicaciones de IA generativas. La extensión ofrece funciones para crear inserciones, obtener configuraciones, etc. Con estas funciones, puede simplificar el proceso de desarrollo y reducir la latencia mediante la eliminación de la necesidad de llamadas API remotas adicionales a modelos de inserción de IA hospedados fuera del límite de PostgreSQL.

Esquema Nombre Tipos de datos de resultado Tipos de datos de argumento
azure_local_ai create_embeddings TABLE(embedding real[]) model_uri text, inputs text[], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000
azure_local_ai create_embeddings real[] model_uri text, input text, timeout_ms integer DEFAULT 3600000
azure_local_ai get_setting jsonb keys text[] DEFAULT ARRAY[]::text[], timeout_ms integer DEFAULT 3600000
azure_local_ai get_setting text key text, timeout_ms integer DEFAULT 3600000
azure_local_ai model_metadata jsonb model_uri text

Se pueden mostrar mediante el comando PSQL,

\df azure_local_ai.*

azure_local_ai.create_embeddings

La extensión azure_local_ai permite crear y actualizar inserciones tanto en formato escalar como por lotes, invocando el LLM implementado localmente.

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

Argumentos

model_uri

text nombre del modelo de inserción de texto invocado para crear la inserción.

input

Texto único de text o text[] o matriz de textos, en función de la sobrecarga de la función utilizada, para la que se crean incrustaciones.

batch_size

bigint DEFAULT 128 número de registros que se van a procesar a la vez (solo está disponible para la sobrecarga de la función para la que el parámetro input es de tipo text[]).

timeout_ms

integer DEFAULT 3600000 tiempo de espera en milisegundos después del cual se detiene la operación.

Use azure_local_ai y el modelo multilingual-e5-small implementado localmente para crear inserciones y almacenarlas como vectores

A continuación se muestran ejemplos que se pueden usar en su propio entorno para probar la generación de inserción con el modelo multilingual-e5 implementado localmente.

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

Actualización de las inserciones tras la inserción

A continuación se muestran ejemplos que se pueden usar en su propio entorno para probar la generación de inserción con el modelo multilingual-e5 implementado localmente.

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

Configuración del entorno de ejecución de ONNX

azure_local_ai.get_setting

Se usa para obtener los valores actuales de las opciones de configuración.

SELECT azure_local_ai.get_setting(key TEXT)

La extensiónazure_local_ai admite la revisión de los parámetros de configuración del grupo de subprocesos en tiempo de ejecución de ONNX dentro del servicio en tiempo de ejecución de ONNX. Los cambios no se permiten en este momento. Consulte ajuste del rendimiento de ONNX Runtime.

Argumentos

Clave

Los valores válidos para key son:

  • intra_op_parallelism: establece el número total de subprocesos usados para paralelizar el operador único por el grupo de subprocesos en tiempo de ejecución de ONNX. De forma predeterminada, maximizamos el número de subprocesos dentro de las operaciones tanto como sea posible, lo que mejora el rendimiento general (todas las CPU disponibles de forma predeterminada).
  • inter_op_parallelism: establece el número total de subprocesos usados para calcular varios operadores en paralelo por el grupo de subprocesos en tiempo de ejecución de ONNX. De forma predeterminada, se establece en el subproceso mínimo posible, que es 1. Aumentar a menudo afecta al rendimiento debido a cambios de contexto frecuentes entre subprocesos.
  • spin_control: cambia la rotación del grupo de subprocesos en tiempo de ejecución de ONNX para las solicitudes. Cuando está deshabilitado, usa menos CPU y, por lo tanto, provoca más latencia. De forma predeterminada, se establece en true (habilitado).

Tipo de valor devuelto

TEXT que representa el valor actual de la configuración seleccionada.