Die Room-Mapping-AI ist eine POC-Web-API (Proof-of Concept), mit der Benutzer die bestmöglichen Übereinstimmungen von Hotelzimmernamen finden können.
Der kritischste Bestandteil dieser Anwendung ist die Kombination des OpenAI -Einbettungs -SDK und der PostgreSQL -Datenbank mit der Vektorenerweiterung.
Wenn ein neuer Hotelzimmername angegeben wird, ruft die API den Einbettungsvektor von der OpenAI -API ab und speichert ihn in der PostgreSQL -Datenbank.
Anschließend werden native Suchfunktionen in PostgreSQL verwendet, um potenzielle Übereinstimmungen basierend auf der Ähnlichkeit der Distanzvektor zu finden.
Sowohl die Web -API als auch die Postgres -Datenbank, die in Containern ausgeführt werden, müssen außer Docker nichts installieren.
Das Modell zur Berechnung der Einbettung auf Openia -Seite ist:
AdaTextEmbedding
OpenAIs Texteinbettungen messen die Verwandtschaft von Textzeichenfolgen. Einbettungen werden üblicherweise verwendet für:
Suche (wobei die Ergebnisse für eine Abfragezeichenfolge relevant sind)
Eine Einbettung ist ein Vektor (Liste) der schwimmenden Punktzahlen. Der Abstand zwischen zwei Vektoren misst ihre Verwandtschaft.
Kleine Entfernungen deuten auf eine hohe Verwandtschaft und große Entfernungen hin, auf eine geringe Verwandtschaft.
Klon das Repository: https://github.com/brunonuzzi/room-mapping-ai
Erstellen Sie Ihren offenen AI-Schlüssel: https://platform.openai.com/account/api-keys
Navigieren Sie zum Projektverzeichnis: cd room-mapping-ai
Ersetzen Sie die Room-Mapping-AI/Appsettings.json durch Ihre eigene Open-API-Schlüssel.
"OpenAI" : {
"ApiKey" : " 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 "
} Erstellen Sie die Docker-Container mit Docker: docker-compose build
Führen Sie den Docker Compose aus: docker-compose up
Navigieren Sie zu http: // localhost: 5000/swagger/index.html
Behälter anhalten und entfernen:
docker-compose down --remove-orphans
Senden Sie eine Postanforderung mit dem Namen des Hotelzimmers als Anforderungsbehörde, um die KI -API für das Zimmerzuordnung zu verwenden.
curl -X ' POST '
' http://localhost:5000/api/RoomMapping/GetMostSimilarRooms?roomName=Serenity%20Luxury '
-H ' accept: text/plain '
-d ' 'Die API wird mit einer Liste potenzieller Übereinstimmungen antworten:
[
{
"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
}
]Öffnen Sie Ihren bevorzugten Postgresql -Client (PSQL, PGADMIN oder DBEAVER) und erstellen Sie eine neue Verbindung:
localhost5432roommapping-userroommapping-passwordroom-mappingDas Room-Mapping-AI wird mit vorbereiteten Daten geliefert, damit Sie schnell loslegen können. Diese Daten umfassen eine Sammlung von Hotelzimmernamen mit ihren jeweiligen Einbettungsvektoren. Um die vorbereiteten Daten zu untersuchen und die Funktionen der Anwendung besser zu verstehen, können Sie Beispielabfragen direkt in der PostgreSQL-Datenbank ausführen.
Beispielsweise können Sie die folgende Abfrage verwenden, um die 5 ähnlichen Hotelzimmer wie die Zimmer -ID = 1 (Serenity Suite) zu finden, basierend auf ihren Einbettungsvektoren:
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 5Der Operator <=> in der vorherigen Abfrage bedeutet
cosine distance, Sie Cand finden hier andere Betreiber
Die Datenbank generiert die folgenden Ergebnisse
| AUSWEIS | Hotelname | Raumname | ErstelltDate | Suchroomname | vector_distance |
|---|---|---|---|---|---|
| 1 | Mallorca Rocks | Serenity Suite | 2023-03-28 | Serenity Suite | 0 |
| 13 | Mallorca Rocks | Gelassenheit Luxus | 2023-03-28 | Serenity Suite | 0,06337405572419863 |
| 10 | Mallorca Rocks | Gelassenheit Doppelzimmer | 2023-03-28 | Serenity Suite | 0,06572621072063112 |
| 5 | Mallorca Rocks | Royal Executive Suite | 2023-03-28 | Serenity Suite | 0,12737531341984398 |
| 3 | Mallorca Rocks | Gartenterrassezimmer | 2023-03-28 | Serenity Suite | 0,1471648253749488 |
Um ein besseres Verständnis dafür zu erhalten, wie Saatgut abgeschlossen ist
Um die WEP -API in Visual Studio zu debuggen, entfernen Sie zunächst alle vorhandenen Container, die sich auf die Web -API beziehen, um die Portierung von Konflikten zu vermeiden.
Sobald die Container entfernt sind, öffnen Sie einfach die room-mapping-ai.sln in Visual Studio und starten Sie den Docker Compose.
Die Web -API sollte starten und der Debugger wird beigefügt.
Code -Snippet, um die OpenAI -API zu leiten und einen Einbettungsvektor für einen Hotelzimmernamen zu generieren
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"
} 'Das erwartete Ergebnis:
{
"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
}
}Die Room-Mapping-AI-API nutzt die OpenAI-API zum Erzeugen von Einbettungsvektoren. Der Preis beträgt derzeit $ 0,0004/1k Tokens
Eine durchschnittliche Saite wie "Serenity Double Room" hat 3 Token. Sie können hier die Preise überprüfen