房間映射-AI是概念驗證(POC)Web API,可讓用戶找到最佳的酒店房間名稱匹配。
此應用程序中最關鍵的成分是OpenAI嵌入SDK和PostgreSQL數據庫與向量擴展的組合。
提供新的酒店房間名稱後,API從OpenAI API中檢索嵌入矢量,並將其存儲在PostgreSQL數據庫中。
然後,它使用PostgreSQL中的本機搜索功能來根據距離向量相似性找到潛在的匹配。
Web 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
用您自己的打開API鍵替換房間映射-AI/AppSettings.json。
"OpenAI" : {
"ApiKey" : " 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 "
}使用Docker構建Docker容器: docker-compose build Build
運行Docker組成: docker-compose up
導航到http:// localhost:5000/swagger/index.html
停止和卸下容器:
docker-compose down --remove-orphans
要使用房間映射AI API,請發送帶有酒店房間名稱的郵政請求作為請求主體
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數據庫上執行示例查詢。
例如,您可以使用以下查詢找到與房間ID = 1(Serenity Suite)的前5個最相似的酒店房間(基於它們的嵌入矢量):
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中,您可以在這裡找到其他操作員
數據庫將生成以下結果
| ID | 酒店名稱 | 房間名稱 | 創建日期 | 搜索房間名稱 | vector_distance |
|---|---|---|---|---|---|
| 1 | 馬洛卡岩石 | 寧靜套房 | 2023-03-28 | 寧靜套房 | 0 |
| 13 | 馬洛卡岩石 | 寧靜的奢侈品 | 2023-03-28 | 寧靜套房 | 0.06337405572419863 |
| 10 | 馬洛卡岩石 | 寧靜雙人間 | 2023-03-28 | 寧靜套房 | 0.06572621072063112 |
| 5 | 馬洛卡岩石 | 皇家行政套房 | 2023-03-28 | 寧靜套房 | 0.12737531341984398 |
| 3 | 馬洛卡岩石 | 花園露台房間 | 2023-03-28 | 寧靜套房 | 0.1471648253749488 |
為了更好地了解播種方式,您可以檢查seed.sql文件
要調試Visual Studio上的WEP API,請首先確保刪除與Web API相關的所有現有容器,以避免移植衝突。
卸下容器後,只需在Visual Studio上打開room-mapping-ai.sln ,然後啟動Docker Compose。
Web API應啟動,並將附加調試器。
代碼片段直接致電OpenAI API並生成酒店房間名稱的嵌入向量
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利用OpenAI API生成嵌入向量。現在的價格為$ 0.0004/1K令牌
像“ Serenity Double Room”這樣的平均字符串具有3個令牌。您可以在這裡檢查價格