Room-Mapping-AI adalah API Web Proof-of-Concept (POC) yang memungkinkan pengguna untuk menemukan kecocokan terbaik dari nama kamar hotel.
Bahan paling kritis dalam aplikasi ini adalah kombinasi dari OpenAi Embedding SDK dan database PostgreSQL dengan ekstensi vektor.
Ketika nama kamar hotel baru disediakan, API mengambil vektor embedding dari OpenAI API dan menyimpannya di database PostgreSQL.
Kemudian menggunakan fungsionalitas pencarian asli di PostgreSQL untuk menemukan kecocokan potensial berdasarkan kesamaan vektor jarak.
Baik Web API dan database Postgres berjalan dalam wadah, tidak perlu menginstal apa pun selain dari Docker.
Model yang digunakan untuk menghitung embedding di sisi openia adalah:
AdaTextEmbedding
Embeddings teks Openai mengukur keterkaitan string teks. Embeddings umumnya digunakan untuk:
Pencarian (di mana hasilnya diperingkat berdasarkan relevansi dengan string kueri)
Embedding adalah vektor (daftar) dari angka floating point. Jarak antara dua vektor mengukur keterkaitannya.
Jarak kecil menunjukkan keterkaitan tinggi dan jarak besar menunjukkan keterkaitan rendah.
Klon The Repository: https://github.com/brunonuzzi/room-mapping-ai
Buat kunci AI terbuka Anda: https://platform.openai.com/account/api-keys
Arahkan ke Direktori Proyek: cd room-mapping-ai
Ganti Mapping-Room-AI/AppSettings.json dengan kunci API terbuka Anda sendiri.
"OpenAI" : {
"ApiKey" : " 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 "
} Bangun wadah Docker menggunakan Docker: docker-compose build
Jalankan Docker Compose: docker-compose up
Arahkan ke http: // localhost: 5000/swagger/index.html
Untuk menghentikan dan menghapus wadah:
docker-compose down --remove-orphans
Untuk menggunakan kamar pemetaan AI API, kirim permintaan pos dengan nama kamar hotel sebagai badan permintaan
curl -X ' POST '
' http://localhost:5000/api/RoomMapping/GetMostSimilarRooms?roomName=Serenity%20Luxury '
-H ' accept: text/plain '
-d ' 'API akan merespons dengan daftar kecocokan potensial:
[
{
"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
}
]Buka klien PostgreSQL pilihan Anda (PSQL, PGADMIN, atau DBEAVER) dan buat koneksi baru:
localhost5432roommapping-userroommapping-passwordroom-mappingPemetaan kamar-AI dilengkapi dengan data pra-unggulan untuk membantu Anda memulai dengan cepat. Data ini mencakup kumpulan nama kamar hotel dengan vektor embedding masing -masing. Untuk menjelajahi data pra-unggulan dan lebih memahami kemampuan aplikasi, Anda dapat menjalankan kueri sampel secara langsung pada database PostgreSQL.
Misalnya, Anda dapat menggunakan kueri berikut untuk menemukan 5 kamar hotel paling mirip dengan ID kamar = 1 (Serenity Suite), berdasarkan vektor embedding mereka:
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 5Operator <=> dalam kueri sebelumnya berarti
cosine distance, Anda menemukan operator lain di sini
Basis data akan menghasilkan hasil berikut
| PENGENAL | Nama hotel | Nama kamar | CreatedDate | SearchedroomName | vector_distance |
|---|---|---|---|---|---|
| 1 | Batuan Mallorca | Suite Serenity | 2023-03-28 | Suite Serenity | 0 |
| 13 | Batuan Mallorca | Mewah ketenangan | 2023-03-28 | Suite Serenity | 0.06337405572419863 |
| 10 | Batuan Mallorca | Kamar ganda Serenity | 2023-03-28 | Suite Serenity | 0.06572621072063112 |
| 5 | Batuan Mallorca | Suite Eksekutif Kerajaan | 2023-03-28 | Suite Serenity | 0.12737531341984398 |
| 3 | Batuan Mallorca | Kamar Terrace Taman | 2023-03-28 | Suite Serenity | 0.1471648253749488 |
Untuk pemahaman yang lebih baik tentang bagaimana penyemaian dilakukan, Anda dapat memeriksa file seed.sql
Untuk debug API WEP di Visual Studio, pertama -tama pastikan untuk menghapus semua wadah yang ada terkait dengan API Web untuk menghindari konflik porting.
Setelah wadah dilepas, cukup buka room-mapping-ai.sln di Visual Studio dan luncurkan Docker Compose.
API Web harus diluncurkan dan debugger akan dilampirkan.
Kode Cuplikan untuk Direct Call The Openai API dan menghasilkan vektor embedding untuk nama kamar 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"
} 'Hasil yang diharapkan:
{
"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
}
}API pemetaan kamar-AI menggunakan API OpenAI untuk menghasilkan vektor embedding. Harganya sekarang adalah $ 0,0004/1k token
String rata -rata seperti "Serenity Double Room" memiliki 3 token. Anda dapat memeriksa harga di sini