La salle de cartographie de la salle est une API Web de preuve de concept (POC) qui permet aux utilisateurs de trouver les meilleures correspondances possibles de noms de chambres d'hôtel.
L'ingrédient le plus critique de cette application est la combinaison du SDK d'intégration OpenAI et de la base de données PostgreSQL avec l'extension des vecteurs.
Lorsqu'un nouveau nom de chambre d'hôtel est fourni, l'API récupère le vecteur d'intégration de l'API OpenAI et le stocke dans la base de données PostgreSQL.
Il utilise ensuite la fonctionnalité de recherche native dans PostgreSQL pour trouver des correspondances potentielles en fonction de la similitude des vecteurs à distance.
L'API Web et la base de données Postgres s'exécutent dans des conteneurs, il n'est pas nécessaire d'installer quoi que ce soit à part Docker.
Le modèle utilisé pour calculer l'incorporation du côté OpenIA est:
AdaTextEmbedding
Les intérêts du texte d'Openai mesurent la parenté des chaînes de texte. Les intérêts sont couramment utilisés pour:
Recherche (où les résultats sont classés par pertinence pour une chaîne de requête)
Une intégration est un vecteur (liste) de numéros de points flottants. La distance entre deux vecteurs mesure leur relation.
De petites distances suggèrent une forte parenté et de grandes distances suggèrent une faible parenté.
Clone The Repository: https://github.com/brunonuzzi/room-mapping-ai
Créez votre clé AI ouverte: https://platform.openai.com/account/api-Keys
Accédez au répertoire du projet: cd room-mapping-ai
Remplacez la cartographie de la salle-ai / appsettings.json par votre propre touche API ouverte.
"OpenAI" : {
"ApiKey" : " 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 "
} Construire les conteneurs Docker à l'aide de docker: docker-compose build
Exécutez le docker compose: docker-compose up
Accédez à http: // localhost: 5000 / swagger / index.html
Pour arrêter et supprimer les conteneurs:
docker-compose down --remove-orphans
Pour utiliser l'API AI de mappage de chambre, envoyez une demande de poste avec le nom de la chambre d'hôtel comme corps de demande
curl -X ' POST '
' http://localhost:5000/api/RoomMapping/GetMostSimilarRooms?roomName=Serenity%20Luxury '
-H ' accept: text/plain '
-d ' 'L'API répondra par une liste de matchs potentiels:
[
{
"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
}
]Ouvrez votre client PostgreSQL préféré (PSQL, PGADMIN ou DBEAVER) et créez une nouvelle connexion:
localhost5432roommapping-userroommapping-passwordroom-mappingLa salle de cartographie-AI est livrée avec des données pré-série pour vous aider à démarrer rapidement. Ces données comprennent une collection de noms de chambres d'hôtel avec leurs vecteurs d'intégration respectifs. Pour explorer les données pré-série et mieux comprendre les capacités de l'application, vous pouvez exécuter des exemples de requêtes directement sur la base de données PostgreSQL.
Par exemple, vous pouvez utiliser la requête suivante pour trouver les 5 chambres d'hôtel les plus similaires à la salle ID = 1 (Sérénité), sur la base de leurs vecteurs d'incorporation:
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 5L'opérateur <=> dans la requête précédente signifie
cosine distance, vous trouvez d'autres opérateurs ici
La base de données générera les résultats suivants
| IDENTIFIANT | Nom de l'hôtel | Nom de chambre | Créé | Nom de recherche | vector_distance |
|---|---|---|---|---|---|
| 1 | Rocks Majorque | Suite de sérénité | 2023-03-28 | Suite de sérénité | 0 |
| 13 | Rocks Majorque | Luxe de sérénité | 2023-03-28 | Suite de sérénité | 0,06337405572419863 |
| 10 | Rocks Majorque | Souppe à double sérénité | 2023-03-28 | Suite de sérénité | 0,06572621072063112 |
| 5 | Rocks Majorque | Suite exécutive royale | 2023-03-28 | Suite de sérénité | 0.12737531341984398 |
| 3 | Rocks Majorque | Salle de terrasse du jardin | 2023-03-28 | Suite de sérénité | 0.1471648253749488 |
Pour mieux comprendre comment l'ensemencement est fait, vous pouvez vérifier le fichier Seed.sql
Pour déboguer l'API WEP sur Visual Studio, assurez-vous d'abord de supprimer tous les conteneurs existants liés à l'API Web afin d'éviter de porter des conflits.
Une fois les conteneurs supprimés, ouvrez simplement la room-mapping-ai.sln sur Visual Studio et lancez la composition Docker.
L'API Web doit être lancée et le débogueur sera attaché.
Code Snippet pour directement appeler l'API OpenAI et générer un vecteur d'intégration pour un nom de chambre d'hôtel
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"
} 'Le résultat attendu:
{
"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
}
}L'API Room-Mapping-AI utilise l'API OpenAI pour générer des vecteurs d'intégration. Le prix est actuellement de 0,0004 $ / 1k
Une chaîne moyenne comme "Serenity Double Room" a 3 jetons. Vous pouvez vérifier les prix ici