Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

Integrar MongoDB con LL Phantom

En esta guía, puedes aprender a crear una aplicación que utiliza LLPhant, un framework de inteligencia artificial generativa en PHP, y MongoDB como almacén vectorial. LLPhant es una estructura integral de código abierto que ofrece una amplia gama de funcionalidades, proporcionando herramientas para desarrollar aplicaciones potenciadas por IA con soporte para múltiples proveedores de LLM.

LLPhant admite el uso de MongoDB como almacén de datos vectoriales, lo que te permite crear potentes aplicaciones de IA que requieren búsqueda semántica y operaciones vectoriales. LLPhant también es compatible con los modelos de incrustación Voyage AI de MongoDB, que están optimizados para una búsqueda y recuperación de IA precisas. Las capacidades nativas de búsqueda vectorial de MongoDB, combinadas con el marco de IA de LLPhant, proporcionan las siguientes funcionalidades:

  • Almacenar y buscar incrustaciones: Utiliza las incrustaciones de Voyage AI con MongoDB Vector Search para realizar consultas de búsqueda semántica rápidas y precisas en grandes colecciones de documentos.

  • Almacenamiento flexible de documentos: Almacene tanto metadatos estructurados como incrustaciones vectoriales en el mismo documento.

  • Aplicaciones de IA escalables: Desarrolle aplicaciones capaces de gestionar grandes volúmenes de documentos y consultas complejas.

  • Búsqueda multimodal: vectoriza datos mixtos de texto, imágenes y videos y haz query de estos datos en una sola consulta de búsqueda. Para obtener más información, consulte Embeddings multimodales en la documentación de Voyage AI.

Esta combinación es compatible con aplicaciones del mundo real, como sistemas inteligentes de gestión de documentos, búsqueda semántica de productos, bases de conocimientos y motores de recomendación de contenido impulsados por IA.

Este tutorial te muestra cómo compilar un sistema de búsqueda inteligente de documentos utilizando LLPhant y MongoDB. La aplicación procesa documentos que almacenan datos de restaurantes, genera representaciones vectoriales de Voyage AI, las almacena en MongoDB y proporciona capacidades de búsqueda semántica. El tutorial incluye instrucciones para conectarse a un clúster de MongoDB Atlas e implementar la funcionalidad de búsqueda vectorial.

Sigue los pasos de esta sección para instalar las dependencias del proyecto, crear un clúster de Atlas y configurar la estructura de la aplicación.

1

Para crear la aplicación Quick Start, instala el siguiente software en tu entorno de desarrollo:

Requisito previo
notas

Usa la versión 8.1 o posterior.

Instalar mongodb, la extensión de PHP para MongoDB. Siga las instrucciones de la documentación de la extensión que correspondan a su sistema operativo.

Requerido para la gestión de dependencias de PHP.

Obligatorio para generar embeddings. Cree una cuenta y genere una clave API.

Editor de código

Usa el editor de código de tu preferencia.

Aplicación de terminal y shell

Para los usuarios de macOS, utilicen Terminal o una aplicación similar. Para usuarios de Windows, use PowerShell o el shell de comandos.

2

MongoDB Atlas es un servicio de base de datos en la nube completamente gestionado que aloja tus implementaciones de MongoDB. Si no tienes una implementación de MongoDB, puedes crear un clúster de MongoDB de forma gratuita al completar el tutorial MongoDB Primeros pasos.

Para conectarte a tu clúster de MongoDB, debes usar una cadena de conexión. Para aprender cómo recuperar tu cadena de conexión, consulta la sección Agregar tu cadena de conexión del tutorial de introducción de MongoDB.

Importante

Guarda tu cadena de conexión en una ubicación segura.

3

Desde tu terminal, ejecuta los siguientes comandos para crear un nuevo directorio para tu proyecto y navegar hasta él:

mkdir llphant-quickstart
cd llphant-quickstart
4

Installa las dependencias necesarias ejecutando el siguiente comando:

composer require theodo-group/llphant symfony/dotenv mongodb/mongodb

Este comando instala LLphant, la biblioteca PHP de MongoDB y el paquete Symfony dotenv para administrar variables de entorno.

5

En tu directorio llphant-quickstart, navega hasta tu archivo composer.json. Agrega el código resaltado a este archivo:

{
"require": {
"theodo-group/llphant": "^0.11.15",
"symfony/dotenv": "^8.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
...
}

Este código le indica a Composer que autoload las clases en el espacio de nombres App del directorio src.

6

Para almacenar tus variables de entorno, crea un archivo .env en tu directorio llphant-quickstart. Pega el siguiente código en el archivo:

VOYAGE_AI_API_KEY=<Voyage AI key>
MONGODB_URI=<connection string>

Reemplaza los valores de los marcadores de posición con tu clave API de Voyage IA y tu cadena de conexión a MongoDB de los pasos anteriores.

Tras configurar las dependencias del proyecto, siga los pasos de esta sección para crear el servicio de búsqueda e implementar la funcionalidad de búsqueda.

1

Ejecute los siguientes comandos desde su directorio llphant-quickstart para crear un subdirectorio src y un archivo DocumentSearchService.php. Seleccione el macOS / Linux o Windows pestaña para ver los comandos que corresponden a su sistema operativo:

mkdir -p src
touch src/DocumentSearchService.php
mkdir src
type nul > src\DocumentSearchService.php

Luego, agrega el siguiente código a tu archivo src/DocumentSearchService.php:

<?php
namespace App;
use LLPhant\Embeddings\EmbeddingGenerator\EmbeddingGeneratorInterface;
use LLPhant\Embeddings\VectorStores\VectorStoreBase;
use LLPhant\Embeddings\Document;
class DocumentSearchService
{
public function __construct(
private EmbeddingGeneratorInterface $embeddingGenerator,
private VectorStoreBase $vectorStore
) {
}
public function addDocument(string $title, string $content): void
{
// Generates embedding for the content
$document = new Document();
$document->content = $content;
$document->formattedContent = $title;
$this->embeddingGenerator->embedDocument($document);
// Adds to vector store
$this->vectorStore->addDocument($document);
}
public function searchDocuments(string $query, int $limit = 5): array
{
// Generates embedding for the query
$queryDocument = new Document();
$queryDocument->content = $query;
$this->embeddingGenerator->embedDocument($queryDocument);
// Searches using the embedding
return $this->vectorStore->similaritySearch($queryDocument->embedding, $limit);
}
}

Esta clase de servicio recibe un generador de embeddings y un almacén vectorial como dependencias e incluye métodos que gestionan el almacenamiento de documentos y la búsqueda por similitud de vectores.

2

Seleccione la pestaña correspondiente a su sistema operativo y ejecute el siguiente comando para crear un archivo index.php en su directorio llphant-quickstart:

touch index.php
type nul > index.php

Luego, agregue el siguiente código a index.php:

<?php
require_once 'vendor/autoload.php';
use App\DocumentSearchService;
use LLPhant\Embeddings\EmbeddingGenerator\VoyageAI\Voyage3EmbeddingGenerator;
use LLPhant\Embeddings\VectorStores\MongoDB\MongoDBVectorStore;
use LLPhant\VoyageAIConfig;
use MongoDB\Client;
use Symfony\Component\Dotenv\Dotenv;
$dotenv = new Dotenv();
$dotenv->load(__DIR__ . '/.env');
$client = new Client($_ENV['MONGODB_URI']);
// Creates the embedding generator
$config = new VoyageAIConfig(apiKey: $_ENV['VOYAGE_AI_API_KEY']);
$embeddingGenerator = new Voyage3EmbeddingGenerator($config);
// Creates the vector store
$vectorStore = new MongoDBVectorStore(
$client,
'test',
'searchable_restaurants',
'restaurant_vector_idx'
);
$searchService = new DocumentSearchService($embeddingGenerator, $vectorStore);
// Sample restaurant documents to add
$restaurantDocs = [
[
"name" => "Le Bernardin",
"description" => "Elite French restaurant offers chef Eric Ripert's refined seafood, expert service & luxurious decor. Fine dining establishment known for exceptional French cuisine with a focus on seafood. Upscale, formal atmosphere with premium pricing. Reservations required. Dress code enforced."
],
[
"name" => "Au Za'atar",
"description" => "Polished eatery offering shawarma, mezze, and Lebanese dishes, plus outdoor dining. Features authentic shawarma, falafel, hummus, and fresh mezze platters. Relaxed atmosphere with both indoor and outdoor seating. Moderate pricing, family-friendly."
],
[
"name" => "Bacaro",
"description" => "Candlelit basement eatery serving pastas & Venetian small plates alongside Italian wines. Intimate Italian restaurant featuring traditional Venetian cicchetti (small plates) and handmade pasta. Romantic ambiance with dim lighting. Extensive Italian wine selection. Cozy, casual-upscale atmosphere. Moderate to high pricing."
],
[
"name" => "Levant",
"description" => "Cozy eatery serving Middle Eastern comfort food, with healthy options, and coffee. Offers authentic Lebanese, Syrian, and Mediterranean dishes. Known for fresh, healthy options including vegetarian and vegan choices. Warm, welcoming atmosphere. Great for lunch or casual dinner. Affordable pricing. Popular items include falafel wraps, tabbouleh, and grilled kebabs."
],
[
"name" => "Hangawi",
"description" => "Upscale menu of creative, gourmet Korean fare in a tranquil space where shoes come off at the door. Fine dining Korean restaurant specializing in traditional temple cuisine. Entirely vegetarian menu featuring organic ingredients. Unique cultural experience with floor seating and traditional Korean decor. Peaceful, meditative atmosphere. Upscale pricing. Reservations recommended."
]
];
echo "Adding sample restaurant documents...\n";
foreach ($restaurantDocs as $restaurant) {
$searchService->addDocument($restaurant['name'], $restaurant['description']);
echo "Added: {$restaurant['name']}\n";
}
echo "\nPerforming semantic search...\n";
$searchQuery = "High-end restaurant with unique options and a romantic atmosphere";
echo "Query: $searchQuery\n\n";
$results = $searchService->searchDocuments($searchQuery, 3);
echo "Search Results:\n";
foreach ($results as $index => $result) {
echo ($index + 1) . ". {$result->formattedContent}\n";
echo " Description: " . substr($result->content, 0, 100) . "...\n\n";
}

Este script principal de aplicación realiza las siguientes acciones:

  • Utiliza MongoDB como almacén vectorial, especificando la base de datos, la colección y el índice a utilizar.

  • Crea documentos de muestra que almacenen información sobre restaurantes en la ciudad de Nueva York. Cada documento contiene el nombre de un restaurante, una descripción y fragmentos generados por IA.

  • Realiza una query de búsqueda semántica para encontrar descripciones de restaurantes que sean similares a la frase de query "High-end restaurant with unique options and a romantic atmosphere".

  • Muestra los resultados de la búsqueda ordenados por similitud vectorial.

Siga los pasos de esta sección para ejecutar su aplicación de búsqueda de documentos y probar la funcionalidad de búsqueda semántica.

1

Desde su directorio llphant-quickstart, ejecute el siguiente comando para iniciar la aplicación:

php index.php

Si la aplicación se ejecuta correctamente, el resultado se parecerá al siguiente código:

Adding sample documents...
Added: Le Bernardin
Added: Au Za'atar
Added: Bacaro
Added: Levant
Added: Hangawi
Performing semantic search...
Query: High-end restaurant with unique options and a romantic atmosphere
Search Results:
1. Au Za'atar
Description: Polished eatery offering shawarma, mezze, and Lebanese dishes, plus outdoor dining. Features authent...
2. Bacaro
Description: Candlelit basement eatery serving pastas & Venetian small plates alongside Italian wines. Intimate I...
3. Hangawi
Description: Upscale menu of creative, gourmet Korean fare in a tranquil space where shoes come off at the door. ...
2

Puedes experimentar con la búsqueda semántica modificando la variable $searchQuery en tu archivo index.php y ejecutando la aplicación nuevamente. Por ejemplo, utilice las siguientes consultas de búsqueda:

# Sample search queries
$searchQuery = "Casual place for Middle Eastern food";
$searchQuery = "Modern Italian restaurant";
$searchQuery = "Affordable restaurants serving Asian cuisine";

Tip

Antes de ejecutar consultas adicionales, comenta el código que añade documentos de muestra en tu archivo index.php.

La búsqueda semántica devuelve documentos relevantes basándose en el significado en lugar de coincidencias exactas de palabras clave, lo que demuestra el poder de las incrustaciones vectoriales para aplicaciones de búsqueda inteligente.

¡Enhorabuena por completar el tutorial de inicio rápido de LL Phantom!

Después de completar estos pasos, tienes un sistema inteligente de búsqueda de documentos que utiliza LLPhant y MongoDB para ofrecer capacidades de búsqueda semántica. La aplicación demuestra cómo generar embeddings, almacenarlos en MongoDB y realizar búsquedas de similitud vectorial para la recuperación de documentos impulsada por IA.

Para obtener más información sobre LLPhant, MongoDB y la creación de aplicaciones de IA, consulta los siguientes recursos:

Volver

Integración de Drupal

En esta página