Apresentando o planejador de passeios com a Vector Search do MongoDB
Pavel Duchovny5 min read • Published Sep 24, 2024 • Updated Sep 24, 2024
APLICATIVO COMPLETO
No mundo acelerado de hoje, planejar uma viagem pode parecer uma tarefa difícil. Desde selecionar os destinos perfeitas até encontrar as atividades mais interessantes, pode ser opressor. Mas e se existisse uma forma mais esperta de planear as suas viagens? Uma maneira que combina tecnologia de ponta, como OpenAI e MongoDB , para aplicativos mais inteligentes? Bem-vindo ao Planejador de passeios com a Vector Search do MongoDB !
Um vídeo com a visão geral do aplicação e da solução!
O projeto Tour Planner é um aplicação Inovador de planejamento de viagens, projetado para simplificar e melhorar sua experiência de viagem. Ao aproveitar o poder do MongoDB Vector Search e integrar-se ao OpenAI, o Tour Planner oferece recursos inteligentes de pesquisa e recomendações com algumas linhas de código.
Nossa avançada pesquisa de similaridade baseada em vetores permite que você descobrir cidades que correspondem aos seus interesses. Esteja você procurando por uma cidade rica em história, uma vida nocturna pulsante ou cenários serenos, nossa funcionalidade de pesquisa inteligentes encontrará o destino ideal para você.
Foi-se o tempo das recomendações genéricas de viagens. Com o planejador de passeios, você recebe pontos de interesse personalizados com base em suas preferências exclusivas. O document model permite que os desenvolvedores armazenem e recuperem informações específicas criadas de diferentes estruturas, enquanto ainda são facilmente consumidas pelos LLMs.
A integração da OpenAI em nossa plataforma leva o planejamento de viagens a um nível totalmente novo. Ao analisar seus destinos e pontos de interesse selecionados, nosso sistema inteligente gera um roteiro detalhado que otimiza seu tempo e melhora sua experiência de viagem. Tudo que você precisa fazer é recosta e aproveitar a viagem. Isso, por sua vez, combina dados gerados por AI com nosso banco de banco de dados em tempo real para pesquisar passagens aéreas ou outras informações específicas para nosso roteiro personalizado.
Escolhemos o Laravel por sua framework robusta e elegante que simplifica o processo de desenvolvimento. Os recursos integrados do Laravel, como um ORM poderoso, roteamento e autenticação, fazem dele a escolha ideal para criar aplicativos complexos de forma rápida e eficiente.
A integração do MongoDB e do OpenAI com o Laravel nos permite criar backends com geração aumentada de recuperação (RAG) e alimentadas por IA sem problemas. O esquema flexível do MongoDB e os poderosos recursos de query, combinados com a sintaxe expressiva do Laravel, nos permitem implementar funcionalidades de pesquisa avançada com facilidade. A integração com o OpenAI aprimora ainda mais nosso aplicação , fornecendo recomendações inteligentes e recursos dinâmicos de planejamento de viagens.
Ao usar Laravel, MongoDB e OpenAI juntos, podemos criar um back-end escalável, eficiente e inteligente que aproveita o melhor das tecnologias modernas de desenvolvimento web.
O pacote OpenAI para Laravel não está incluído por padrão nas instalações do Laravel. Você precisa instalá-lo separadamente. Veja como adicioná-la ao seu projeto:
Primeiro, você precisa instalar o pacote usando o Composer. Execute este comando no diretório do projeto :
1 composer require openai-php/laravel
Após a instalação, você deve publicar o arquivo de configuração:
1 php artisan vendor:publish --provider="OpenAI\Laravel\ServiceProvider"
Isso criará um arquivo de configuração em
config/openai.php
. Você precisará definir sua chave de API do OpenAI neste arquivo ou, de preferência, no arquivo.env
:1 OPENAI_API_KEY=your-api-key-here
Depois de instalado e configurado, você pode usar a façada OpenAI em seu aplicação Laravel, conforme mostrado nos exemplos anteriores:
1 use OpenAI\Laravel\Facades\OpenAI;
Em nosso aplicação, todas essas etapas foram executadas e fazem parte do arquivo
composer.json
.O backend do Tour Planner é gerenciado pelo Laravel, na pasta
app
.Os pontos de interesse e as informações da cidade são armazenados em uma coleção MongoDB (
points_of_interest
) mapeada para o seguinte modelo de aplicação :1 2 3 namespace App\Models; 4 5 use MongoDB\Laravel\Eloquent\Model; 6 7 class PointOfInterest extends Model 8 { 9 protected $connection = 'mongodb'; 10 protected $collection = 'points_of_interest'; 11 12 protected $fillable = [ 13 'name', 14 'description', 15 'type', 16 'rating', 17 'location', 18 'embedding', 19 ]; 20 21 protected $casts = [ 22 'location' => 'object', 23 'embedding' => 'array', 24 ]; 25 }
O MongoDB Vector Search lida com as consultas de pesquisa complexas. Quando você pesquisa uma cidade ou atividade, o sistema gera incorporações com base em sua entrada e pesquisa as melhores correspondências no banco de banco de dados.
1 $embedding = $this->generateEmbedding($search); 2 $points = DB::collection('points_of_interest') 3 ->raw(function ($collection) use ($embedding) { 4 return $collection->aggregate([ 5 [ 6 '$vectorSearch' => [ 7 'index' => 'vector_index', 8 'path' => 'embedding', 9 'queryVector' => $embedding, 10 'numCandidates' => 20, 11 'limit' => 5 12 ], 13 ], 14 [ 15 '$project' => [ 16 'name' => 1, 17 'description' => 1, 18 'rating' => 1, 19 'location' => 1, 20 'score' => ['$meta' => 'vectorSearchScore'] 21 ] 22 ] 23 ]); 24 }) 25 ->toArray();
Os resultados são então aumentados com contexto relevante usando o OpenAI para criar um plano de viagem abrangente. O sistema gera um roteiro que inclui detalhes do voo, atividades e tempo livre, garantindo que cada momento da sua viagem seja bem planejado.
1 protected function generatePossibleTrip($cities, $context, $days) { 2 $result = OpenAI::chat()->create([ 3 'model' => 'gpt-4o-mini', 4 'temperature' => 0, 5 'response_format' => ['type' => 'json_object'], 6 'messages' => [ 7 [ 8 'role' => 'system', 9 'content' => 'You are a travel agent helping a customer plan a trip to a city. If it will be hard to visit all in the number of days designated, return a one day plan stating the problem. The customer will provide you with points of interest to visit in json.' 10 ], 11 [ 12 'role' => 'system', 13 'content' => 'Take this schema, for flights add orig_airport_code and dest_airport_code: 14 "tripPlan": { 15 "destination": [{ 16 "city": "string", 17 "country": "string" 18 }], 19 "pointsOfInterest": [ 20 { 21 "name": "string", 22 "description": "string", 23 "location": { 24 "coordinates": [number, number] 25 }, 26 "rating": number 27 } 28 ], 29 "flights" : [ "src_airport_code": "string", 30 "dest_airport_code": "string" 31 ], 32 "itinerary": [ 33 { 34 "day": number, 35 "destination": "string", 36 "activities": [ 37 { 38 "time": "string", 39 "activity": "string", 40 "duration": "string", 41 // if flight 42 "src_airport_code": "string", 43 dest_airport_code: "string" 44 } 45 ... 46 ] 47 } 48 ... 49 ] 50 }' 51 ], 52 [ 53 'role' => 'user', 54 'content' => 'For cities: ' . json_encode($cities) . '| Take this POIs: ' . $context . ' and build a plan for a trip of ' . $days . ' days.' 55 ] 56 ] 57 ]); 58 return $result->choices[0]->message->content; 59 }
Como o formato esperado e as solicitações do sistema especificam uma saída JSON, o LLM retorna um JSON flexível previsível que está sendo facilmente redistribuído para uma interface de usuário frontend.
Para começar a usar o Planejador de roteiros, você precisa de alguns pré-requisitos:
- PHP 8.1+
- Extensão e pré-requisitos do MongoDB
- Compositor
- Node.js e npm
- MongoDB Atlas cluster
- Abrir chave de API AI
Navegue até o diretório clonado:
1 cd laravel-openai-vector-search
Instale as dependências do PHP:
1 composer install
Copie o arquivo
.env.example
para .env
e configure suas variáveis de ambiente:1 OPENAI_API_KEY=your_openai_api_key 2 DB_URI=your_atlas_uri
Gerar uma chave de aplicação :
1 php artisan key:generate
Executar semeadores de banco de dados de dados:
1 php artisan db:seed
Isso criará duas coleções no banco de dados de dados
trip_planner
.- collection:
points_of_interest
. documento de amostra :
1 { 2 "name": "Eiffel Tower", 3 "description": "Iconic iron lattice tower on the Champ de Mars in Paris.", 4 "type": "landmark", 5 "location": { 6 "city": "Paris", 7 "country": "France", 8 "coordinates": [ 9 48.8584, 10 2.2945 11 ] 12 }, 13 "rating": 4.7, 14 "embedding":[] 15 }
- Collection:
air_routes
. documento de amostra :
1 { 2 "airline": { 3 "id": 410, 4 "name": "Aerocondor", 5 "alias": "2B", 6 "iata": "ARD" 7 }, 8 "src_airport": "CEK", 9 "dst_airport": "KZN", 10 "codeshare": "", 11 "stops": 0, 12 "airplane": "CR2" 13 }
Crie um índice do Atlas Vector Search no banco de banco de dados:
trip_planner
coleção: points_of_interest
. Consulte o guia para obter mais detalhes sobre como indexar campos para pesquisa vetorial.Nome do índice: vector_index
1 { 2 "fields": [ 3 { 4 "type": "vector", 5 "path": "embedding", 6 "numDimensions": 1536, 7 "similarity": "cosine" 8 } 9 ] 10 }
Inicie o servidor de desenvolvimento Laravel :
1 php artisan serve
Navegue até o diretório frontend:
1 cd frontend/trip-planner-frontend 2 npm install 3 npm run serve
O planejador de viagens utiliza a Vector Search do MongoDB para aprimorar os recursos de planejamento de viagens. Ele combina as preferências do usuário com análise de dados para sugerir opções de viagem personalizadas. Esta implementação demonstra a integração das tecnologias MongoDB, Laravel e OpenAI para criar um aplicação de pesquisa avançada para recomendações de viagens.
Pronto para começar sua viagem? Mergulhe em nossa documentação para obter guias de configuração detalhados, experimente o MongoDB por si mesmo no MongoDB Atlase explorar o projeto no Github. Desbloqueie uma nova maneira de planejar viagens e faça seu próximo projeto com o MongoDB.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.