Generación de inserciones de vectores en Azure Database for PostgreSQL: servidor flexible con LLM implementado localmente (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
Puede que desee habilitar la extensión vector, ya que proporciona funcionalidad para almacenar e indexar de forma eficaz las inserciones de texto en la base de datos.
Habilitación de la extensión
Para poder habilitar azure_local_ai en la instancia de Azure Database for PostgreSQL: servidor flexible, debe incluir en la lista de permitidos la extensión azure_local_ai
tal y como se describe en permitir una extensión.
Importante
El hospedaje de modelos de lenguaje en la base de datos requiere una superficie de memoria grande. Para admitir este requisito, azure_local_ai
solo se admite en las SKU de máquina virtual de Azure optimizadas para memoria con un mínimo de 4 núcleos virtuales.
Si usa una máquina virtual que no cumple los requisitos mínimos, la extensión azure_local_ai
no aparecerá en la lista de valores permitidos del parámetro de servidor azure.extensions
.
Una vez incluida la extensión en la lista de permitidos, puede seguir las instrucciones proporcionadas en crear extensiones para instalar la extensión en cada base de datos desde donde quiera usarla.
Nota:
Al habilitar la IA de Azure Local, se implementará el modelo multilingual-e5-small en la instancia de Azure Database for PostgreSQL: servidor flexible. 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.
Al instalar la extensión azure_local_ai
se crea un esquema denominado azure_local_ai
en el que la extensión almacena tablas, funciones y cualquier otro objeto relacionado con SQL que necesite para implementar y exponer su funcionalidad.
Importante
Le conviene habilitar la extensión vector ya que es necesaria para almacenar inserciones de texto en la base de datos PostgreSQL.
Funciones proporcionadas por la extensión
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 |
Estas funciones se pueden mostrar mediante el siguiente metacomando 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.
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)
azure_local_ai
admite la revisión de los parámetros de configuración del grupo de subprocesos en tiempo de ejecución de ONNX en el 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 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.
Ejemplos
Creación de inserciones a partir de textos existentes
A continuación se muestra un ejemplo que se puede usar en su propio entorno para probar la generación de inserciones con el modelo multilingual-e5 implementado localmente.
-- 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.']);
Generación de inserciones tras la inserción de texto nuevo
A continuación se muestra un ejemplo que se puede usar en su propio entorno para probar la generación de inserciones con el modelo multilingual-e5 implementado localmente.
-- 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;
Contenido relacionado
- Integración del Servidor flexible de Azure Database for PostgreSQL con Azure Cognitive Services.
- Integrar Azure Database for PostgreSQL con Azure Machine Learning Services.
- Generación de incrustaciones de vectores con Azure OpenAI en el Servidor flexible de Azure Database for PostgreSQL.
- Extensión de Azure AI en el Servidor flexible de Azure Database for PostgreSQL.
- IA generativa con el Servidor flexible de Azure Database for PostgreSQL.
- Sistema de recomendaciones con el Servidor flexible de Azure Database for PostgreSQL y Azure OpenAI.
- Búsqueda semántica con el Servidor flexible de Azure Database for PostgreSQL y Azure OpenAI.
- Habilitación y uso de pgvector en el Servidor flexible de Azure Database for PostgreSQL.