Compartir a través de


Integración de funcionalidades de Azure AI en Azure Database for PostgreSQL

La azure_ai extensión agrega la capacidad de usar modelos de lenguaje grandes (LLM) y crear aplicaciones de IA generativas dentro de una base de datos 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. Mediante la azure_ai extensión, puede usar las funcionalidades de ia generativa para procesar consultas de lenguaje natural directamente desde la base de datos.

En este artículo se muestra cómo agregar funcionalidades de inteligencia artificial enriquecidas a una instancia de servidor flexible de Azure Database for PostgreSQL mediante la azure_ai extensión . Muestra cómo puede integrar 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. Si se le solicita, seleccione la suscripción que usó para la base de datos de Azure Database for PostgreSQL y, a continuación, seleccione Crear almacenamiento.

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

  1. En Azure Portal, vaya a la instancia de servidor flexible de Azure Database for PostgreSQL.

  2. En el menú de la izquierda, en Configuración, seleccione Conectar. Copie el bloque Detalles de conexión.

  3. Pegue las líneas de declaración copiadas para las variables de entorno en el terminal de Azure Cloud Shell. Reemplace el {your-password} token 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}"
    
  4. Conéctese a la base de datos mediante la herramienta de línea de comandos psql. Escriba el siguiente comando en el símbolo del sistema:

    psql
    

Instalación de la extensión azure_ai

Puede usar la azure_ai extensión para integrar Azure OpenAI y Azure Cognitive Services en la base de datos. Para más información, consulte Generación de incrustaciones de vectores con Azure OpenAI en Azure Database for PostgreSQL.

Para habilitar la extensión en la base de datos:

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

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

Inspeccionar los objetos de la extensión azure_ai

Revisar los objetos que contiene la azure_ai extensión puede proporcionar una mejor comprensión de las funcionalidades que ofrece. Puede usar el metacomando \dx desde el símbolo del sistema psql para enumerar los objetos de 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 describen los esquemas que agrega la extensión:

Schema Descripción
azure_ai Proporciona el esquema principal donde reside la tabla de configuración y las UDF para interactuar con ella.
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 azure_ai esquema, use el \df metacomando. Especifique el esquema cuyas funciones deben mostrarse. Los \x auto comandos antes del \df comando activan y desactivan automáticamente la presentación expandida, para que la salida del comando se vea más fácilmente en Azure Cloud Shell.

\x auto
\df+ azure_ai.*

Use la azure_ai.set_setting() función para 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 azure_ai.get_setting() función proporciona una manera de recuperar los valores establecidos con la set_setting() función . 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 Azure OpenAI compatible (por ejemplo, https://example.openai.azure.com).
azure_openai.subscription_key Una clave de suscripción para un recurso de Azure 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 azure_ai extensión define un rol llamado azure_ai_settings_manager para ayudar a garantizar que esta información está protegida y accesible solo para los usuarios que tienen 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 Azure Database for PostgreSQL, todos los usuarios administradores tienen el rol 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. Mediante este esquema, puede generar incrustaciones con Azure OpenAI directamente desde la base de datos para crear representaciones vectoriales del texto de entrada. A continuación, estas representaciones se pueden usar en búsquedas de similitud vectorial y consumidas por modelos de aprendizaje automático.

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, de modo que los algoritmos puedan 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, configure la extensión con el punto de conexión de servicio de Azure OpenAI y la clave:

  1. En Azure Portal, vaya al recurso de Azure OpenAI. En el menú de la izquierda, en Administración de recursos, seleccione Claves y punto de conexión.

  2. 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.

  3. En el comando siguiente, reemplace los {endpoint} tokens y {api-key} por los valores que recuperó de Azure Portal. Después, 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}');
    
  4. 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.

Relleno de la base de datos con datos de ejemplo

En este artículo se usa un pequeño subconjunto del conjunto de datos BillSum para proporcionar datos de texto de ejemplo para generar vectores. Este conjunto de datos proporciona una lista de los proyectos de ley estatales de Estados Unidos y california. Puede descargar el bill_sum_data.csv archivo que contiene estos datos del repositorio de GitHub para 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 la psql línea de comandos, cargue los datos de ejemplo del archivo CSV en la tabla bill_summaries. 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

Puede usar la azure_ai extensión para generar incrustaciones para el 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 pgvector extensión. Siga las instrucciones de la documentación sobre cómo habilitar la compatibilidad con vectores en la base de datos.

Con la compatibilidad con vectores agregada a la base de datos, agregue una nueva columna a la bill_summaries tabla mediante el vector tipo de datos para almacenar incrustaciones dentro de la tabla. El text-embedding-ada-002 modelo 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 azure_openai.create_embeddings() función , se crean vectores para el bill_text campo y se insertan en la columna recién creada bill_vector de la bill_summaries tabla.

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

\df+ azure_openai.*

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

Argumento Tipo Valor predeterminado Descripción
deployment_name text Nombre de la implementación en el portal de Azure AI Foundry que contiene el text-embeddings-ada-002 modelo.
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, en caso de error, iniciar una excepción que da como resultado una reversión de las transacciones de ajuste.

El primer argumento es el valor deployment_name, que se asignó cuando se desplegó el modelo de embedding en la cuenta de Azure OpenAI. Para recuperar este valor:

  1. Vaya al recurso de Azure OpenAI en Azure Portal.

  2. En el menú izquierdo, en Administración de recursos, seleccione Implementaciones de modelos para abrir el portal de Azure AI Foundry.

  3. En el portal de Azure AI Foundry, seleccione Implementaciones. En el panel Implementaciones , copie el valor nombre de implementación asociado a la implementación del text-embedding-ada-002 modelo.

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 bill_summaries tabla. Inserte las inserciones vectoriales generadas para el bill_text campo en la bill_vector columna mediante la azure_openai.create_embeddings() función . Reemplace {your-deployment-name} por el valor del nombre de la implementación que copió del panel Implementaciones del portal de Azure AI Foundry. Luego, 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 que se genera 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 inserción es un vector de números de punto flotante. La distancia entre dos incrustaciones en el espacio vectorial se correlaciona con la similitud semántica entre dos entradas en el formato original.

La similitud de vectores es un método para medir la similitud de dos elementos mediante su representación como vectores. Los vectores son una serie de números. A menudo se usan para realizar búsquedas mediante LLM.

La similitud de vectores se calcula normalmente a través de métricas de distancia, como:

  • Distancia euclidiana: mide la distancia de línea recta entre dos vectores en el espacio n dimensional.
  • Similitud del coseno: mide el coseno del ángulo entre dos vectores.

Habilite la búsqueda más eficaz sobre el campo vector mediante la creación de un índice en bill_summaries con la distancia coseno y Hierarchical Navigable Small World (HNSW). 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);

Con todos los elementos presentes, ya puede ejecutar una consulta de búsqueda de similitud de coseno en la base de datos.

En la consulta siguiente, las incrustaciones se generan para una pregunta de entrada y, a continuación, se convierten en una matriz de vectores (::vector). La matriz de vectores permite comparar la pregunta 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. Este operador representa el operador de distancia coseno que se usa 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 azure_cognitive esquema de la azure_ai extensión proporcionan un amplio conjunto de características de lenguaje de IA a las que puede acceder 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 a las que puede acceder a través de la extensión, consulte Integración de Azure Database for PostgreSQL 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 correctamente llamadas en los servicios de Azure AI mediante la extensión azure_ai, debe proporcionar el punto de conexión y una clave para el recurso del servicio de lenguaje de Azure AI:

  1. En Azure Portal, vaya al recurso de Servicio de lenguaje.

  2. En el menú de la izquierda, en Administración de recursos, seleccione Claves y punto de conexión.

  3. Copie el punto de conexión y la clave de acceso. Puede usar KEY1 o KEY2.

  4. En el psql indicador de comandos, ejecute los siguientes comandos para agregar sus valores a la tabla de configuración. Reemplace los tokens {endpoint} y {api-key} por los valores que recuperó del portal de Azure.

    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 azure_cognitive funciones de la azure_ai extensión, puede generar un resumen de cada factura. El azure_cognitive esquema proporciona dos funciones para resumir texto:

  • summarize_abstractive: el resumen abstracto genera un resumen que captura los conceptos principales del texto de entrada, pero podría no usar palabras idénticas.
  • summarize_extractive: el resumen extractivo 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. Utilice el \df metacomando de psql otra vez, esta vez para examinar específicamente la función azure_cognitive.summarize_abstractive:

\df azure_cognitive.summarize_abstractive

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

Argumento 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 idioma en el que se escribe el texto de entrada. Para los valores permitidos, consulte Compatibilidad de idioma con las características de idioma.
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, en caso de error, iniciar una excepción que da como resultado 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 Configuración que deshabilita los registros del servicio de idioma. 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 obtener más información, consulte las notas de privacidad y cumplimiento de Cognitive Services y los principios de inteligencia artificial responsable de Microsoft.

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

La consulta siguiente en la bill_summaries tabla usa la summarize_abstractive función para generar un nuevo resumen de una oración para el texto de una factura. 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';

También puede usar la función para escribir datos en las tablas de base de datos. Modifique la bill_summaries tabla 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 establece 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 deja esa marca en el valor predeterminado de true, se producirá un error en la consulta y no se escribiría ningún resumen en la base de datos. Para ver el registro que produjo la advertencia, ejecute este comando:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

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

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Conclusión

¡Felicidades! Acaba de aprender a usar la extensión azure_ai para integrar grandes modelos de lenguaje y funcionalidades generativas de IA en su base de datos.