El mapeo de habitaciones-AI es una API web de prueba de concepto (POC) que permite a los usuarios encontrar las mejores coincidencias posibles de los nombres de las habitaciones de hotel.
El ingrediente más crítico en esta aplicación es la combinación del SDK de incrustación de OpenAI y la base de datos PostgreSQL con la extensión de los vectores.
Cuando se proporciona un nuevo nombre de habitación de hotel, la API recupera el vector de incrustación de la API de OpenAI y lo almacena en la base de datos PostgreSQL.
Luego utiliza la funcionalidad de búsqueda nativa en PostgreSQL para encontrar posibles coincidencias basadas en la similitud del vector de distancia.
Tanto la API web como la base de datos Postgres se ejecutan en contenedores, no hay necesidad de instalar nada aparte de Docker.
El modelo utilizado para calcular la incrustación en el lado de Openia es:
AdaTextEmbedding
Los incrustaciones de texto de OpenAI miden la relación de las cadenas de texto. Los incrustaciones se usan comúnmente para:
Búsqueda (donde los resultados se clasifican por relevancia para una cadena de consulta)
Una incrustación es un vector (lista) de números de puntos flotantes. La distancia entre dos vectores mide su relación.
Las pequeñas distancias sugieren alta relación y grandes distancias sugieren baja relación.
Clon the Repository: https://github.com/brunonuzzi/room-mapping-ai
Crea tu tecla AI Open: https://platform.openai.com/account/api-keys
Navegue al directorio del proyecto: cd room-mapping-ai
Reemplace la habitación mapeante-ai/appSettings.json con su propia tecla API abierta.
"OpenAI" : {
"ApiKey" : " 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 "
} Construya los contenedores Docker usando Docker: docker-compose build
Ejecute la composición de Docker: docker-compose up
Navegue a http: // localhost: 5000/swagger/index.html
Para detener y eliminar los contenedores:
docker-compose down --remove-orphans
Para usar la API AI de mapeo de la habitación, envíe una solicitud de publicación con el nombre de la habitación del hotel como cuerpo de solicitud
curl -X ' POST '
' http://localhost:5000/api/RoomMapping/GetMostSimilarRooms?roomName=Serenity%20Luxury '
-H ' accept: text/plain '
-d ' 'La API responderá con una lista de posibles coincidencias:
[
{
"id" : 1 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Serenity Suite " ,
"vectorDistance" : 0.06337405572419863
},
{
"id" : 10 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Serenity Double Room " ,
"vectorDistance" : 0.08145154924929454
},
{
"id" : 5 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Royal Executive Suite " ,
"vectorDistance" : 0.15970261195384094
},
{
"id" : 4 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Urban Escape Penthouse " ,
"vectorDistance" : 0.16005893649310143
},
{
"id" : 2 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Ocean View Deluxe " ,
"vectorDistance" : 0.16867594238009598
}
]Abra su cliente PostgreSQL preferido (PSQL, PGADmin o DBeaver) y cree una nueva conexión:
localhost5432roommapping-userroommapping-passwordroom-mappingEl mapeo de habitaciones-AI viene con datos pre-sembrados para ayudarlo a comenzar rápidamente. Estos datos incluyen una colección de nombres de habitaciones de hotel con sus respectivos vectores de incrustación. Para explorar los datos previamente sembrados y comprender mejor las capacidades de la aplicación, puede ejecutar consultas de muestra directamente en la base de datos PostgreSQL.
Por ejemplo, puede usar la siguiente consulta para encontrar las 5 habitaciones de hotel más similares a la ID de habitación = 1 (Serenity Suite), en función de sus vectores de incrustación:
SELECT Id
,HotelName
,RoomName
,CreatedDate
, ' Serenity Suite ' SearchedRoomName
,embedding <=> ( select embedding from rooms where id = 1 )
as vector_distance
FROM public . Rooms
ORDER BY vector_distance limit 5El operador <=> En la consulta anterior significa
cosine distance, usted consiste en encontrar otros operadores aquí
La base de datos generará los siguientes resultados
| IDENTIFICACIÓN | Nombre del hotel | Nombre de la habitación | Creado date | Nombre de la sala de búsqueda | vector_distance |
|---|---|---|---|---|---|
| 1 | Mallorca Rocks | Suite serenity | 2023-03-28 | Suite serenity | 0 |
| 13 | Mallorca Rocks | Serenity Luxury | 2023-03-28 | Suite serenity | 0.06337405572419863 |
| 10 | Mallorca Rocks | Servicio de doble habitación | 2023-03-28 | Suite serenity | 0.06572621072063112 |
| 5 | Mallorca Rocks | Real Suite Ejecutiva | 2023-03-28 | Suite serenity | 0.12737531341984398 |
| 3 | Mallorca Rocks | Habitación de la terraza del jardín | 2023-03-28 | Suite serenity | 0.1471648253749488 |
Para una mejor comprensión de cómo se realiza la siembra, puede verificar el archivo SEED.SQL
Para depurar la API de WEP en Visual Studio, primero asegúrese de eliminar todos los contenedores existentes relacionados con la API web para evitar conflictos de porte.
Una vez que se retiran los contenedores, simplemente abra el room-mapping-ai.sln en Visual Studio y inicie la composición de Docker.
La API web debe lanzarse y se adjuntará el depurador.
El fragmento de código para llamar directamente a la API de Operai y generar un vector de incrustación para el nombre de una habitación de hotel
curl https://api.openai.com/v1/embeddings
-H " Content-Type: application/json "
-H " Authorization: Bearer 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 "
-d ' {
"input": "Ocean View Deluxe",
"model": "text-embedding-ada-002"
} 'El resultado esperado:
{
"object" : " list " ,
"data" : [
{
"object" : " embedding " ,
"index" : 0 ,
"embedding" : [
0.0041769226 ,
0.0067320974 ,
...
]
}
],
"model" : " text-embedding-ada-002-v2 " ,
"usage" : {
"prompt_tokens" : 3 ,
"total_tokens" : 3
}
}La API de mapeo de habitaciones-AI utiliza la API de OpenAI para generar vectores de incrustación. El precio en este momento es de $ 0.0004/1K tokens
Una cadena promedio como "Serenity Double Room" tiene 3 fichas. Puedes consultar los precios aquí