Комната-картирование-AI является веб-API-API-интерфейсом проверки концепции (POC), который позволяет пользователям находить наилучшие матчи имен гостиничных номеров.
Наиболее важным ингредиентом в этом приложении является комбинация OpenAI, встраиваемого SDK и базы данных PostgreSQL с расширением векторов.
Когда появляется новое название гостиничного номера, API извлекает вектор встраивания из API OpenAI и хранит его в базе данных PostgreSQL.
Затем он использует нативную функциональность поиска в PostgreSQL, чтобы найти потенциальные совпадения на основе сходства вектора расстояния.
Как веб -API, так и база данных Postgres работают в контейнерах, нет необходимости устанавливать что -либо, кроме Docker.
Модель, используемая для расчета встраивания на стороне Openia:
AdaTextEmbedding
Встроенные тексты Openai измеряют связанность текстовых строк. Встроения обычно используются для:
Поиск (где результаты ранжируются по отношению к строке запроса)
Встроение - это вектор (список) номеров с плавающей запятой. Расстояние между двумя векторами измеряет их родство.
Небольшие расстояния предполагают высокое родство, а большие расстояния предполагают низкую родственность.
Клон репозиторий: https://github.com/brunonuzzi/room-mapping-ai
Создайте свой открытый ключ AI: https://platform.openai.com/account/api-keys
Перейдите к каталогу проекта: cd room-mapping-ai
Замените MAPPAPION-AI/APPSETTINGS.JSON на свой собственный открытый ключ API.
"OpenAI" : {
"ApiKey" : " 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 "
} Создайте контейнеры Docker с помощью Docker: docker-compose build
Запустите Docker Compose: docker-compose up
Перейдите к http: // localhost: 5000/swagger/index.html
Чтобы остановить и удалить контейнеры:
docker-compose down --remove-orphans
Для использования API AI AI ROMAT
curl -X ' POST '
' http://localhost:5000/api/RoomMapping/GetMostSimilarRooms?roomName=Serenity%20Luxury '
-H ' accept: text/plain '
-d ' 'API ответит списком потенциальных совпадений:
[
{
"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
}
]Откройте предпочитаемый клиент PostgreSQL (PSQL, PGADMIN или DBEAVER) и создайте новое соединение:
localhost5432roommapping-userroommapping-passwordroom-mappingКомната-картирование-AI поставляется с предварительно поселенными данными, чтобы помочь вам быстро начать. Эти данные включают в себя коллекцию имен гостиничных номеров с их соответствующими векторами. Чтобы изучить предварительно смягченные данные и лучше понять возможности приложения, вы можете выполнить образцы запросов непосредственно в базе данных PostgreSQL.
Например, вы можете использовать следующий запрос, чтобы найти 5 самых похожих гостиничных номеров для идентификатора комнаты = 1 (Serenity Suite), на основе их векторов встраивания:
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 5Оператор <=> в предыдущем запросе означает
cosine distance, вы найдете здесь других операторов здесь
База данных будет генерировать следующие результаты
| ИДЕНТИФИКАТОР | Название отеля | Название комнаты | Создано | Поиск имени | Vector_Distance |
|---|---|---|---|---|---|
| 1 | Майорка Скалы | Serenity Suite | 2023-03-28 | Serenity Suite | 0 |
| 13 | Майорка Скалы | Серенити роскошь | 2023-03-28 | Serenity Suite | 0,06337405572419863 |
| 10 | Майорка Скалы | Серенити Двойной номер | 2023-03-28 | Serenity Suite | 0,06572621072063112 |
| 5 | Майорка Скалы | Королевский исполнительный люкс | 2023-03-28 | Serenity Suite | 0,12737531341984398 |
| 3 | Майорка Скалы | Садовая терраса | 2023-03-28 | Serenity Suite | 0,1471648253749488 |
Для лучшего понимания того, как сделано посева, вы можете проверить файл Seed.sql
Для отладки API WEP на Visual Studio, сначала не забудьте удалить все существующие контейнеры, связанные с веб -API, чтобы избежать переноса конфликтов.
Как только контейнеры будут удалены, просто откройте room-mapping-ai.sln на Visual Studio и запустите Docker Compose.
Веб -API должен запустить, и отладчик будет прикреплен.
Спрыги кода для прямого вызова API OpenAI и генерировать вектор встраивания для названия гостиничного номера
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"
} 'Ожидаемый результат:
{
"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-API-карты в номере использует API OpenAI для генерации векторов встраивания. Цена прямо сейчас составляет $ 0,0004/1K токены
Средняя струна, такая как «Serenity Double Room», имеет 3 жетона. Вы можете проверить цены здесь