Creación de incrustaciones con la extensión de Azure AI
Para ejecutar una búsqueda semántica, debe comparar la inserción de consultas con las incrustaciones de los elementos buscados. La azure_ai
extensión para Azure Database for PostgreSQL - servidor flexible se integra con Azure OpenAI para generar vectores de incrustación.
Introducción a azure_ai
y Azure OpenAI
La extensión flexible de Azure Database for PostgreSQL para Azure AI proporciona funciones definidas por el usuario para integrarse con los servicios de Azure AI, incluidos Azure OpenAI y Azure Cognitive Services.
La API de incrustaciones de Azure OpenAI genera un vector de inserción del texto de entrada. Use esta API para establecer las incrustaciones de todos los elementos que se buscan. El esquema azure_openai
de la extensión azure_ai
facilita la llamada a la API desde SQL para generar inserciones, ya sea para inicializar inserciones de elementos o crear una inserción de consultas sobre la marcha. Estas incrustaciones se pueden usar para realizar búsquedas de similitud de vectores o, en otras palabras, búsqueda semántica.
Uso de la azure_ai
extensión con Azure OpenAI
Para llamar a la API de incrustaciones de Azure OpenAI desde PostgreSQL, debe habilitar y configurar la azure_ai
extensión, conceder acceso a Azure OpenAI e implementar un modelo de Azure OpenAI. Para más información, consulte la documentación del servidor flexible de Azure OpenAI en Azure Database for PostgreSQL.
Una vez que el entorno esté listo y la extensión esté permitida, ejecute este código SQL:
/* Enable the extension. */
CREATE EXTENSION azure_ai;
También debe configurar la clave de punto de conexión y acceso del recurso del servicio OpenAI:
SELECT azure_ai.set_setting('azure_openai.endpoint', '{your-endpoint-url}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{your-api-key}}');
Una vez que azure_ai
y Azure OpenAI están configurados, obtener y almacenar incrustaciones es una cuestión sencilla de llamar a una función en la consulta SQL. Suponiendo que hay una tabla listings
con una columna description
y una columna listing_vector
, puede generar y almacenar la representación vectorial para todos los listados con la siguiente consulta. Reemplace por {your-deployment-name}
el nombre de implementación de Azure OpenAI Studio para el modelo que creó.
UPDATE listings
SET listing_vector = azure_openai.create_embeddings('{your-deployment-name}', description, max_attempts => 5, retry_delay_ms => 500)
WHERE listing_vector IS NULL;
La listing_vector
columna vectorial debe tener el mismo número de dimensiones que genera el modelo de lenguaje.
Para ver una inserción de documentos, ejecute la consulta siguiente:
SELECT listing_vector FROM listings LIMIT 1;
El resultado es un vector de números de punto flotante. Puede ejecutar \x
primero para que la salida sea más legible.
Generación de una inserción de consultas dinámicamente
Una vez que haya insertado los documentos que desea buscar, puede ejecutar una consulta de búsqueda semántica. Para ello, también debe generar una inserción para el texto de la consulta.
El azure_openai
esquema de la azure_ai
extensión permite generar incrustaciones dentro de SQL. Por ejemplo, para buscar las tres listas principales cuyo texto es más semánticamente similar a la consulta "Buscarme lugares en un vecindario caminable", ejecute el siguiente código SQL:
SELECT id, description FROM listings
ORDER BY listing_vector <=> azure_openai.create_embeddings('{your-deployment-name}', 'Find me places in a walkable neighborhood.')::vector
LIMIT 3;
El <=>
operador calcula la distancia coseno entre los dos vectores, la métrica de similitud semántica. Cuanto más cerca se acerquen los vectores, más semánticamente similares; cuanto más los vectores, más semánticamente diferentes.
El ::vector
operador convierte las incrustaciones generadas en matrices de vectores de PostgreSQL.
La consulta devuelve los tres identificadores y descripciones principales de la lista, clasificados de menos a más diferentes (de más a menos similares).