ルームマッピング-AIは、ユーザーがホテルの部屋名の最高の試合を見つけることができるようにする概念実証(POC)Web APIです。
このアプリケーションで最も重要な成分は、SDKとPostgreSQLデータベースをベクトル拡張機能と組み合わせたものです。
新しいホテルの部屋名が提供されると、APIはOpenai APIから埋め込みベクトルを取得し、PostgreSQLデータベースに保存します。
次に、PostgreSQLのネイティブ検索機能を使用して、距離ベクトルの類似性に基づいて潜在的な一致を見つけます。
Web APIとPostgresデータベースの両方がコンテナで実行されますが、Docker以外に何もインストールする必要はありません。
Openia側への埋め込みの計算に使用されるモデルは
AdaTextEmbeddingです。
Openaiのテキスト埋め込みは、テキスト文字列の関連性を測定します。埋め込みは一般的に使用されます。
検索(結果はクエリ文字列に関連することによってランク付けされます)
埋め込みは、浮動小数点数のベクトル(リスト)です。 2つのベクトル間の距離は、その関連性を測定します。
小さな距離は、高い関連性と広い距離が低い関連性を示唆しています。
リポジトリのクローン:https://github.com/brunonuzzi/room-mapping-ai
オープンAIキーを作成します:https://platform.openai.com/account/api-keys
Project Directory: cd room-mapping-aiに移動します
ルームマッピング-ai/appsettings.jsonを独自のオープンAPIキーに置き換えます。
"OpenAI" : {
"ApiKey" : " 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 "
} Docker: docker-compose buildを使用してDockerコンテナを構築します
Docker Compose: 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 | ホテル名 | 部屋の名前 | createddate | searchedroomname | 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
}
}ルームマッピング-AI APIは、埋め込みベクターを生成するためにOpenAI APIを使用します。現在の価格は0.0004/1kトークンです
「Serenity Double Room」のような平均的な文字列には3つのトークンがあります。ここで価格を確認できます