룸 맵핑 -AI는 사용자가 호텔 객실 이름의 최상의 경기를 찾을 수있는 POC (Concept) 웹 API입니다.
이 애플리케이션에서 가장 중요한 성분은 OpenAI 임베딩 SDK와 PostgreSQL 데이터베이스와 벡터 확장과의 조합입니다.
새로운 호텔 객실 이름이 제공되면 API는 OpenAI API에서 포함 벡터를 검색하여 PostgreSQL 데이터베이스에 저장합니다.
그런 다음 PostgreSQL에서 기본 검색 기능을 사용하여 거리 벡터 유사성을 기반으로 잠재적 일치를 찾습니다.
Web API와 Postgres 데이터베이스는 컨테이너에서 실행되므로 Docker와는 별도로 설치할 필요가 없습니다.
Openia 측에 임베딩을 계산하는 데 사용되는 모델은 다음과 같습니다.
AdaTextEmbedding
OpenAi의 텍스트 임베드는 텍스트 문자열의 관련성을 측정합니다. 임베딩은 일반적으로 다음에 사용됩니다.
검색 (결과는 쿼리 문자열과 관련하여 순위가 매겨집니다)
임베딩은 부동 소수점 번호의 벡터 (목록)입니다. 두 벡터 사이의 거리는 관련성을 측정합니다.
작은 거리는 높은 관련성을 암시하고 먼 거리는 낮은 관련성을 암시합니다.
저장소를 복제하십시오 : https://github.com/brunonuzzi/room-mapping-ai
Open AI 키를 만듭니다 : https://platform.openai.com/account/api-keys
프로젝트 디렉토리로 이동 : cd room-mapping-ai
룸 매핑 -AI/AppSettings.json을 Open 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 | 호텔 이름 | 방 이름 | 만들어졌습니다 | 검색실 이름 | 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 디버그를 위해 먼저 갈등을 포팅하지 않기 위해 웹 API와 관련된 모든 기존 컨테이너를 제거하십시오.
컨테이너가 제거되면 Visual Studio에서 room-mapping-ai.sln 열고 Docker Compose를 발사하십시오.
웹 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 개의 토큰이 있습니다. 여기에서 가격을 확인할 수 있습니다