Generación de inserciones de vectores con azure_local_ai en el servidor flexible de Azure Database for PostgreSQL (versión preliminar)
Requisitos previos
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
Habilite las siguientes extensiones:
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.