Compartir vía


Generación de inserciones de vectores en Azure Database for PostgreSQL: servidor flexible con LLM implementado localmente (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. 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;