Compartir a través de


Integración de funcionalidades de Azure AI en el Servidor flexible de Azure Database for PostgreSQL

SE APLICA A: Azure Database for PostgreSQL con servidor flexible

La extensión azure_ai agrega la capacidad de usar modelos de lenguaje grandes (LLM) y crear aplicaciones de inteligencia artificial generativa dentro de una base de datos del Servidor flexible de Azure Database for PostgreSQL mediante la integración de la eficacia de los servicios de Azure AI. La inteligencia artificial generativa es una forma de inteligencia artificial en la que se entrenan los LLM para generar contenido original basado en la entrada del lenguaje natural. El uso de la extensión azure_ai permite usar las funcionalidades de procesamiento de consultas de lenguaje natural de la inteligencia artificial generativa directamente desde la base de datos.

En este tutorial se muestran cómo agregar funcionalidades de inteligencia artificial enriquecidas a una instancia de servidor flexible de Azure Database for PostgreSQL mediante la extensión azure_ai. Abarca la integración de Azure OpenAI y el servicio de lenguaje de Azure AI en la base de datos mediante la extensión.

Requisitos previos

Conexión a la base de datos mediante psql en Azure Cloud Shell

Abra Azure Cloud Shell en un explorador web. Seleccione Bash como entorno y, si se le solicita, seleccione la suscripción que usó para la base de datos del Servidor flexible de Azure Database for PostgreSQL y, a continuación, seleccione Crear almacenamiento.

Para recuperar los detalles de conexión de base de datos:

  1. Vaya al recurso de servidor flexible de Azure Database for PostgreSQL en Azure Portal.

  2. En el menú de navegación izquierdo, seleccione Conectar en Configuración y copie el bloque Detalles de conexión.

  3. Pegue las líneas de declaración de variables de entorno copiadas en el terminal de Azure Cloud Shell que abrió anteriormente, reemplazando el token {your-password} por la contraseña que estableció al crear la base de datos.

    export PGHOST={your-server-name}.postgresql.database.azure.com
    export PGUSER={your-user-name}
    export PGPORT=5432
    export PGDATABASE={your-database-name}
    export PGPASSWORD="{your-password}"
    

    Conéctese a la base de datos mediante la utilidad de línea de comandos psql escribiendo lo siguiente en el símbolo del sistema.

    psql
    

Instale la extensión azure_ai

Extensión de Azure AI y OpenAI

La extensión azure_ai permite integrar Azure OpenAI y Azure Cognitive Services en la base de datos. Para habilitar la extensión en la base de datos, siga estos pasos:

  1. Agregue la extensión a la lista de permitidos tal y como se describe en Permitir extensiones.

  2. En la base de datos en la que planea usar la extensión azure_ai, instálela como se describe en Crear extensiones

Inspección de los objetos contenidos en la extensión azure_ai

Revisar los objetos contenidos en la extensión azure_ai puede proporcionar una mejor comprensión de las funcionalidades que ofrece. Puede usar el \dx metacomando desde el símbolo del sistema psql para enumerar los objetos contenidos en la extensión.

\dx+ azure_ai

La salida del metacomando muestra que la extensión azure_ai crea tres esquemas, varias funciones definidas por el usuario (UDF) y varios tipos compuestos en la base de datos. En la tabla siguiente se enumeran los esquemas agregados por la extensión y se describe cada uno.

Esquema Descripción
azure_ai Esquema principal donde residen la tabla de configuración y las UDF para interactuar con ellas.
azure_openai Contiene las UDF que habilitan la llamada a un punto de conexión de Azure OpenAI.
azure_cognitive Proporciona UDF y tipos compuestos relacionados con la integración de la base de datos con Azure Cognitive Services.

Todas las funciones y tipos están asociadas a uno de los esquemas. Para revisar las funciones definidas en el esquema azure_ai, use el metacomando \df, especificando el esquema cuyas funciones deben mostrarse. Los comandos \x auto antes del comando \df alternan la pantalla expandida activada y desactivada automáticamente para que la salida del comando sea más fácil de ver en Azure Cloud Shell.

\x auto
\df+ azure_ai.*

La función azure_ai.set_setting() le permite establecer el punto de conexión y los valores críticos para los servicios de Azure AI. Acepta una clave y el valor para asignarla. La función azure_ai.get_setting() proporciona una manera de recuperar los valores establecidos con la función set_setting(). Acepta la clave de la configuración que desea ver. Para ambos métodos, la clave debe ser una de las siguientes:

Clave Descripción
azure_openai.endpoint Un punto de conexión de OpenAI compatible (por ejemplo, https://example.openai.azure.com).
azure_openai.subscription_key Una clave de suscripción para un recurso de OpenAI.
azure_cognitive.endpoint Un punto de conexión de Cognitive Services compatible (por ejemplo, https://example.cognitiveservices.azure.com).
azure_cognitive.subscription_key Una clave de suscripción para un recurso de Cognitive Services.

Importante

Dado que la información de conexión de los servicios de Azure AI, incluidas las claves de API, se almacena en una tabla de configuración de la base de datos, la extensión azure_ai define un rol denominado azure_ai_settings_manager para asegurarse de que esta información está protegida y accesible solo para los usuarios asignados a ese rol. Este rol permite leer y escribir la configuración relacionada con la extensión. Solo los superusuarios y los miembros del rol azure_ai_settings_manager pueden invocar las funciones azure_ai.get_setting() y azure_ai.set_setting(). En el servidor flexible de Azure Database for PostgreSQL, a todos los usuarios administradores se les asigna el rol de azure_ai_settings_manager.

Generación de inserciones de vectores con Azure OpenAI

El esquema azure_ai de la extensión azure_openai permite el uso de Azure OpenAI para crear inserciones de vectores para valores de texto. Con este esquema, puede generar inserciones con Azure OpenAI directamente desde la base de datos para crear representaciones vectoriales del texto de entrada, que luego se pueden usar en búsquedas de similitud de vectores y consumidas por modelos de Machine Learning.

Las inserciones son una técnica de uso de modelos de Machine Learning para evaluar la estrecha relación con la información. Esta técnica permite una identificación eficaz de las relaciones y similitudes entre los datos, lo que permite a los algoritmos identificar patrones y realizar predicciones precisas.

Establecimiento del punto de conexión y la clave de Azure OpenAI

Antes de usar las funciones azure_openai:

  1. Configure la extensión con el punto de conexión y la clave del servicio Azure OpenAI.

  2. Vaya al recurso de Azure OpenAI en Azure Portal y seleccione el elemento Claves y punto de conexión en Administración de recursos en el menú izquierdo.

  3. Copie el punto de conexión y la clave de acceso. Puede usar KEY1 o KEY2. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio.

En el comando siguiente, reemplace los tokens {endpoint} y {api-key} por los valores que recuperó del Azure Portal y, a continuación, ejecute los comandos desde el símbolo del sistema psql para agregar los valores a la tabla de configuración.

SELECT azure_ai.set_setting('azure_openai.endpoint','{endpoint}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{api-key}');

Compruebe la configuración escrita en la tabla de configuración:

SELECT azure_ai.get_setting('azure_openai.endpoint');
SELECT azure_ai.get_setting('azure_openai.subscription_key');

La extensión azure_ai ahora está conectada a la cuenta de Azure OpenAI y está lista para generar inserciones de vectores.

Rellenar la base de datos con datos de ejemplo

En este tutorial se usa un pequeño subconjunto del conjunto de datos BillSum, que proporciona una lista de facturas estatales del Congreso de Estados Unidos y California, para proporcionar datos de texto de ejemplo para generar vectores. El archivo bill_sum_data.csv que contiene estos datos se puede descargar desde el repositorio de GitHub de ejemplos de Azure.

Para hospedar los datos de ejemplo en la base de datos, cree una tabla denominada bill_summaries.

CREATE TABLE bill_summaries
(
    id bigint PRIMARY KEY,
    bill_id text,
    bill_text text,
    summary text,
    title text,
    text_len bigint,
    sum_len bigint
);

Con el comando COPY de PostgreSQL desde el símbolo del sistema psql, cargue los datos de ejemplo del archivo CSV en la tabla bill_summaries y especifique que la primera fila del archivo CSV es una fila de encabezado.

\COPY bill_summaries (id, bill_id, bill_text, summary, title, text_len, sum_len) FROM PROGRAM 'curl "https://raw.githubusercontent.com/Azure-Samples/Azure-OpenAI-Docs-Samples/main/Samples/Tutorials/Embeddings/data/bill_sum_data.csv"' WITH CSV HEADER ENCODING 'UTF8'

Habilitación de la compatibilidad con vectores

La extensión azure_ai permite generar inserciones para texto de entrada. Para permitir que los vectores generados se almacenen junto con el resto de los datos de la base de datos, debe instalar la extensión pgvector siguiendo las instrucciones de la documentación habilitación de la compatibilidad con vectores en la base de datos.

Con el vector admitido agregado a la base de datos, agregue una nueva columna a la tabla bill_summaries mediante el tipo de datos vector para almacenar inserciones dentro de la tabla. El modelo text-embedding-ada-002 genera vectores con 1536 dimensiones, por lo que debe especificar 1536 como el tamaño del vector.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

Generar y almacenar vectores

La tabla bill_summaries ya está lista para almacenar inserciones. Con la función azure_openai.create_embeddings(), se crean vectores para el campo bill_text y se insertan en la columna recién creada bill_vector de la tabla bill_summaries.

Antes de usar la función create_embeddings(), ejecute el siguiente comando para inspeccionarlo y revisar los argumentos necesarios:

\df+ azure_openai.*

La propiedad Argument data types de la salida del comando \df+ azure_openai.* revela la lista de argumentos que espera la función.

Argument Tipo Valor predeterminado Descripción
deployment_name text Nombre de la implementación en Azure OpenAI Studio que contiene el modelo text-embeddings-ada-002.
input text Entrada de texto usada para crear inserciones.
timeout_ms integer 3600000 Tiempo de espera en milisegundos después del cual se detiene la operación.
throw_on_error boolean true Marca que indica si la función debe producir un error, lo que da lugar a una reversión de las transacciones de ajuste.

El primer argumento es deployment_name, asignado al implementar el modelo de inserción en la cuenta de Azure OpenAI. Para recuperar este valor, vaya al recurso de Azure OpenAI en Azure Portal. Desde allí, en el menú de navegación izquierdo, en Administración de recursos seleccione el elemento Implementaciones del modelo para abrir Azure OpenAI Studio. En Azure OpenAI Studio, en la pestaña Implementaciones, copie el nombre de implementación valor asociado a la implementación de modelotext-embedding-ada-002.

Captura de pantalla de las implementaciones de inserción para integrar la inteligencia artificial.

Con esta información, ejecute una consulta para actualizar cada registro de la tabla bill_summaries, insertando las inserciones vectoriales generadas para el campo bill_text en la columna bill_vector mediante la función azure_openai.create_embeddings(). Reemplace {your-deployment-name} por el Nombre de implementación valor que copió de la pestaña Implementaciones de Azure OpenAI Studio y, a continuación, ejecute el siguiente comando:

UPDATE bill_summaries b
SET bill_vector = azure_openai.create_embeddings('{your-deployment-name}', b.bill_text);

Ejecute la consulta siguiente para ver la inserción generada para el primer registro de la tabla. Puede ejecutar \x primero si la salida es difícil de leer.

SELECT bill_vector FROM bill_summaries LIMIT 1;

Cada incrustración es un vector de números de punto flotante, de modo que la distancia entre dos incrustraciones en el espacio vectorial está correlacionada con la similitud semántica entre dos entradas en el formato original.

La similitud de vectores es un método que se usa para medir la similitud de dos elementos mediante su representación como vectores, que son series de números. A menudo, los vectores se usan para realizar búsquedas mediante LLM. La similitud de vectores se calcula normalmente mediante métricas de distancia, como la distancia euclidiana o la similitud de coseno. La distancia euclidiana mide la distancia en línea recta entre dos vectores en el espacio unidimensional, mientras que la similitud coseno mide el coseno del ángulo entre dos vectores.

Permitir habilitar una búsqueda más eficaz sobre el campo vector creando un índice en bill_summaries mediante la distancia coseno y HNSW, que es la abreviatura de Hierarchical Navigable Small World (Mundo pequeño jerárquico). HNSW permite que pgvector use los algoritmos basados en grafos más recientes para aproximar las consultas de vecino más próximo.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Ahora ya está listo para ejecutar una consulta de búsqueda de similitud coseno en la base de datos.

En la consulta siguiente, las inserciones se generan para una pregunta de entrada y, a continuación, se convierten en una matriz de vectores (::vector), lo que permite compararlos con los vectores almacenados en la bill_summaries tabla.

SELECT bill_id, title FROM bill_summaries
ORDER BY bill_vector <=> azure_openai.create_embeddings('embeddings', 'Show me bills relating to veterans entrepreneurship.')::vector
LIMIT 3;

La consulta usa el <=>operador de vector, que representa el operador "distancia coseno" utilizado para calcular la distancia entre dos vectores en un espacio multidimensional.

Integración de Azure Cognitive Services

Las integraciones de servicios de Azure AI incluidas en el esquema azure_cognitive de la extensión azure_ai proporcionan un amplio conjunto de características de Lenguaje de IA accesibles directamente desde la base de datos. Las funcionalidades incluyen análisis de sentimiento, detección de idioma, extracción de frases clave, reconocimiento de entidades y resumen de texto. El acceso a estas funcionalidades está habilitado a través del servicio de Lenguaje de Azure AI.

Para revisar las funcionalidades completas de Azure AI accesibles a través de la extensión, vea la Integración de Azure Database for PostgreSQL: Servidor flexible con Azure Cognitive Services.

Establecimiento del punto de conexión y la clave del servicio de Lenguaje de Azure AI

Al igual que con las funciones azure_openai, para realizar llamadas correctamente en los servicios de Azure AI mediante la extensión azure_ai, debe proporcionar el punto de conexión y una clave para el servicio de Lenguaje de Azure AI. Recupere esos valores; para ello, vaya al recurso del servicio de lenguaje en Azure Portal, en el menú izquierdo o de la mano, en Resource Management, seleccione elemento Claves y punto de conexión. Copie el punto de conexión y la clave de acceso. Puede usar KEY1 o KEY2.

En el comando siguiente, reemplace los tokens {endpoint} y {api-key} por los valores que recuperó del Azure Portal y, a continuación, ejecute los comandos desde el símbolo del sistema psql para agregar los valores a la tabla de configuración.

SELECT azure_ai.set_setting('azure_cognitive.endpoint','{endpoint}');
SELECT azure_ai.set_setting('azure_cognitive.subscription_key', '{api-key}');

Resumen de facturas

Para demostrar algunas de las funcionalidades de las funciones azure_cognitive de la extensión azure_ai, se genera un resumen de cada factura. El esquema azure_cognitive proporciona dos funciones para resumir texto, summarize_abstractive y summarize_extractive. El resumen abstracto genera un resumen que captura los conceptos principales del texto de entrada, pero podría no usar palabras idénticas. El resumen mediante extracción ensambla un resumen mediante la extracción de oraciones críticas del texto de entrada.

Para usar la capacidad del servicio de Lenguaje de Azure AI para generar contenido nuevo y original, use la función summarize_abstractive para crear un resumen de la entrada de texto. Use el metacomando \df de psql de nuevo, esta vez para examinar específicamente la función azure_cognitive.summarize_abstractive.

\df azure_cognitive.summarize_abstractive

La propiedad Argument data types de la salida del comando \df azure_cognitive.summarize_abstractive revela la lista de argumentos que espera la función.

Argument Tipo Valor predeterminado Descripción
text text Texto de entrada que se va a resumir.
language text Representación ISO 639-1 de dos letras del lenguaje en el que se escribe el texto de entrada. Compruebe la compatibilidad con lenguajes para ver los valores permitidos.
timeout_ms integer 3600000 Tiempo de espera en milisegundos después del cual se detiene la operación.
throw_on_error boolean true Marca que indica si la función debe producir un error, lo que da lugar a una reversión de las transacciones de ajuste.
sentence_count integer 3 Número máximo de oraciones que se van a incluir en el resumen generado.
disable_service_logs boolean false El servicio de lenguaje registra el texto de entrada durante 48 horas únicamente para permitir la solución de problemas. Establecer esta propiedad en true deshabilita el registro de entrada y podría limitar nuestra capacidad de investigar los problemas que se producen. Para más información, consulte las notas sobre el Cumplimiento y la Privacidad de Cognitive Services en https://aka.ms/cs-compliance, y los principios de la IA responsable de Microsoft en https://www.microsoft.com/ai/responsible-ai.

La summarize_abstractive función function requiere los argumentos siguientes: azure_cognitive.summarize_abstractive(text TEXT, language TEXT).

La consulta siguiente en la tabla bill_summaries usa la función summarize_abstractive para generar un nuevo resumen de una oración para el texto de una factura, lo que le permite incorporar la eficacia de la inteligencia artificial generativa directamente en las consultas.

SELECT
    bill_id,
    azure_cognitive.summarize_abstractive(bill_text, 'en', sentence_count => 1) one_sentence_summary
FROM bill_summaries
WHERE bill_id = '112_hr2873';

La función también se puede usar para escribir datos en las tablas de base de datos. Modifique la tabla bill_summaries para agregar una nueva columna para almacenar los resúmenes de una oración en la base de datos.

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

A continuación, actualice la tabla con los resúmenes. La función summarize_abstractive devuelve una matriz de texto (text[]). La función array_to_string convierte el valor devuelto en su representación de cadena. En la consulta siguiente, el argumento throw_on_error se ha establecido en false. Esta configuración permite que el proceso de resumen continúe si se produce un error.

UPDATE bill_summaries b
SET one_sentence_summary = array_to_string(azure_cognitive.summarize_abstractive(b.bill_text, 'en', throw_on_error => false, sentence_count => 1), ' ', '')
where one_sentence_summary is NULL;

En la salida, es posible que observe una advertencia sobre un documento no válido para el que no se pudo generar un resumen adecuado. Esta advertencia resulta de establecer throw_on_error en false en la consulta anterior. Si esa marca se dejase al valor predeterminado de true, se produce un error en la consulta y no se habría escrito ningún resumen en la base de datos. Para ver el registro que produjo la advertencia, ejecute lo siguiente:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

A continuación, puede consultar la tabla bill_summaries para ver los resúmenes de una oración nuevos generados por la extensión azure_ai para los demás registros de la tabla.

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Conclusión

Enhorabuena, acaba de aprender a usar la extensión azure_ai para integrar modelos de lenguaje grandes y funcionalidades de IA generativa en la base de datos.