A API da Web de Mapp-Mapping-AI é uma API da Web Prova de Concept (POC) que permite que os usuários encontrem as melhores correspondências possíveis de nomes de quartos de hotel.
O ingrediente mais crítico neste aplicativo é a combinação do SDK de incorporação do OpenAI e do banco de dados PostGresql com a extensão dos vetores.
Quando um novo nome de quarto de hotel é fornecido, a API recupera o vetor de incorporação da API OpenAI e o armazena no banco de dados PostgreSQL.
Em seguida, ele usa a funcionalidade de pesquisa nativa no PostgreSQL para encontrar possíveis correspondências com base na similaridade do vetor de distância.
Tanto a API da Web quanto o banco de dados do PostGres são executados em contêineres, não há necessidade de instalar nada além do Docker.
O modelo usado para calcular a incorporação no lado do Openia é:
AdaTextEmbedding
As incorporações de texto do OpenAI medem a relação das seqüências de texto. Incorporações são comumente usadas para:
Pesquisa (onde os resultados são classificados por relevância para uma string de consulta)
Uma incorporação é um vetor (lista) dos números de ponto flutuante. A distância entre dois vetores mede sua relação.
Pequenas distâncias sugerem alta relação e grandes distâncias sugerem baixa relação.
Clone o repositório: https://github.com/brunonuzuzzi/room-mapp-ai
Crie sua chave de IA aberta: https://platform.openai.com/account/api-keys
Navegue até o diretório do projeto: cd room-mapping-ai
Substitua o mapeamento de quarto-ai/appSsettings.json pela sua própria chave de API aberta.
"OpenAI" : {
"ApiKey" : " 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 "
} Construa os recipientes do docker usando o Docker: docker-compose build
Run the Docker Compose: docker-compose up
Navegue para http: // localhost: 5000/swagger/index.html
Para parar e remover os recipientes:
docker-compose down --remove-orphans
Para usar a API da AI de mapeamento da sala, envie uma solicitação de postagem com o nome do quarto de hotel como o corpo de solicitação
curl -X ' POST '
' http://localhost:5000/api/RoomMapping/GetMostSimilarRooms?roomName=Serenity%20Luxury '
-H ' accept: text/plain '
-d ' 'A API responderá com uma lista de possíveis correspondências:
[
{
"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
}
]Abra seu cliente preferido PostgreSQL (PSQL, PGADMIN ou DBEAVER) e crie uma nova conexão:
localhost5432roommapping-userroommapping-passwordroom-mappingO mapeamento de salas-AI vem com dados pré-semeados para ajudá-lo a começar rapidamente. Esses dados incluem uma coleção de nomes de quartos de hotel com seus respectivos vetores de incorporação. Para explorar os dados pré-semeados e entender melhor os recursos do aplicativo, você pode executar consultas de amostra diretamente no banco de dados PostGresql.
Por exemplo, você pode usar a consulta a seguir para encontrar os 5 melhores quartos de hotel mais semelhantes ao ID da sala = 1 (Suite de Serenity), com base em seus vetores de incorporação:
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 5O <=> Operador na consulta anterior
cosine distancemédio, você encontra outros operadores aqui
O banco de dados gerará os seguintes resultados
| EU IA | Nome do hotel | Nome do quarto | Crioudate | SearchedroomName | Vector_distance |
|---|---|---|---|---|---|
| 1 | Mallorca Rocks | Suíte de Serenidade | 2023-03-28 | Suíte de Serenidade | 0 |
| 13 | Mallorca Rocks | Luxo Serenity | 2023-03-28 | Suíte de Serenidade | 0,06337405572419863 |
| 10 | Mallorca Rocks | Serenity Double Room | 2023-03-28 | Suíte de Serenidade | 0,06572621072063112 |
| 5 | Mallorca Rocks | Royal Executive Suite | 2023-03-28 | Suíte de Serenidade | 0,12737531341984398 |
| 3 | Mallorca Rocks | Sala de terraço do jardim | 2023-03-28 | Suíte de Serenidade | 0,1471648253749488 |
Para uma melhor compreensão de como a semeadura é feita, você pode verificar o arquivo semente.sql
Para a depuração da API WEP no Visual Studio, primeiro certifique -se de remover todos os contêineres existentes relacionados à API da Web, a fim de evitar a transferência de conflitos.
Depois que os contêineres forem removidos, basta abrir o room-mapping-ai.sln no Visual Studio e iniciar o Docker Compose.
A API da Web deve ser lançada e o depurador será anexado.
Snippet de código para chamar a API do OpenAI e gerar um vetor de incorporação para um nome de quarto de 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"
} 'O resultado esperado:
{
"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
}
}A API de mapeamento de salas utiliza a API do OpenAI para gerar vetores de incorporação. O preço agora é de US $ 0,0004/1k tokens
Uma corda média como "Serenity Double Room" tem 3 tokens. Você pode verificar os preços aqui