Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
Una suscripción a Azure (cree una cuenta gratuita).
Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera. Actualmente, la aplicación concede acceso a este servicio. Para solicitar acceso a Azure OpenAI, rellene el formulario en https://aka.ms/oai/access.
Un recurso de Azure OpenAI con el modelo
text-embedding-ada-002
(versión 2) implementado. Este modelo solo está disponible actualmente en determinadas regiones. Si no cuenta con un recurso, el proceso de crear uno está documentado en la Guía de implementación de recursos de Azure OpenAI.Un servicio de Lenguaje de Azure AI. Si no tiene un recurso, puede crear un recurso de Lenguaje en Azure Portal siguiendo las instrucciones proporcionadas en el documento de inicio rápido para el resumen. Puede usar el plan de tarifa gratis (
Free F0
) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.Una instancia de servidor flexible de Azure Database for PostgreSQL en su suscripción de Azure. Si no tiene un recurso, consulte Creación de una instancia de Azure Database for PostgreSQL: servidor flexible.
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:
Vaya al recurso de servidor flexible de Azure Database for PostgreSQL en Azure Portal.
En el menú de navegación izquierdo, seleccione Conectar en Configuración y copie el bloque Detalles de conexión.
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:
Agregue la extensión a la lista de permitidos tal y como se describe en Permitir extensiones.
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
:
Configure la extensión con el punto de conexión y la clave del servicio Azure OpenAI.
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.
Copie el punto de conexión y la clave de acceso. Puede usar
KEY1
oKEY2
. 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
.
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.
Realizar una búsqueda de similitud vectorial
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.
Contenido relacionado
- Uso de extensiones de PostgreSQL en Azure Database for PostgreSQL: Servidor flexible.
- Aprenda a generar incrustaciones con Azure OpenAI.
- Modelos de inserción de Azure OpenAI Service.
- Descripción de las inserciones en Azure OpenAI Service.
- ¿Qué es Lenguaje de Azure AI?.
- ¿Qué es Azure OpenAI Service?.