Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
PHPchevron-right

Apresentando o planejador de passeios com a Vector Search do MongoDB

Pavel Duchovny5 min read • Published Sep 24, 2024 • Updated Sep 24, 2024
IAAtlasPesquisa vetorialPHP
APLICATIVO COMPLETO
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse exemplo de código
star-empty
star-empty
star-empty
star-empty
star-empty
social-githubVer código
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!

A essencia do planejador de roteiros

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.
Página principal do aplicação

Características principais

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ê.
Pesquisa semântica com vetores

2. Pontos de interesse personalizados

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.
Planejador personalizado

3. Planejamento inteligente de viagens

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.
Plano construído com AI

Por que Laravel?

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.

facilidade de configuração com integrações MongoDB e Laravel OpenAI

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 :
1composer require openai-php/laravel
Após a instalação, você deve publicar o arquivo de configuração:
1php 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:
1OPENAI_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:
1use OpenAI\Laravel\Facades\OpenAI;
Em nosso aplicação, todas essas etapas foram executadas e fazem parte do arquivocomposer.json.

Como funciona

O backend do Tour Planner é gerenciado pelo Laravel, na pastaapp .
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<?php
2
3namespace App\Models;
4
5use MongoDB\Laravel\Eloquent\Model;
6
7class 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.
1protected 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.

Começar

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

Configuração de backend (Laravel):

Navegue até o diretório clonado:
1cd laravel-openai-vector-search
Instale as dependências do PHP:
1composer install
Copie o arquivo.env.example para .env e configure suas variáveis de ambiente:
1OPENAI_API_KEY=your_openai_api_key
2DB_URI=your_atlas_uri
Gerar uma chave de aplicação :
1php artisan key:generate
Executar semeadores de banco de dados de dados:
1php artisan db:seed
Isso criará duas coleções no banco de dados de dadostrip_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 :
1php artisan serve

Frontend setup (Vue.js)

Navegue até o diretório frontend:
1cd frontend/trip-planner-frontend
2npm install
3npm run serve
O aplicação deve estar visível em http://localhost:8080.

Conclusão

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.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse exemplo de código
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Artigo

Lidando com Erros do MongoDB PHP


Aug 28, 2024 | 7 min read
Notícias e Anúncios

Laravel Herd adiciona suporte nativo ao MongoDB


Oct 07, 2024 | 0 min read
exemplo de código

Go-FIFA


Jul 07, 2022 | 2 min read
Notícias e Anúncios

Laravel MongoDB 4.2 Lançado, com suporte do Laravel 11


Aug 28, 2024 | 1 min read
Tecnologias Utilizadas
Linguagens
Tecnologias
Sumário