Overview
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.
¿Por qué usar MongoDB con LLphant?
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.
Tutorial de inicio rápido
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.
Configurar el proyecto
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.
Verificar los prerrequisitos.
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 | |
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. |
Crea un clúster de MongoDB Atlas.
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.
Instala LLPhant, la librería PHP y las dependencias.
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.
Configura la carga automática de Composer.
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.
Configura las variables de entorno.
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.
Configura tu aplicación
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.
Cree el servicio de búsqueda.
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:
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.
Crear el script principal de la aplicación.
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:
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.
Ejecutar la aplicación
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.
Ejecuta la aplicación.
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. ...
Prueba diferentes consultas de búsqueda.
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.
Recursos adicionales
Para obtener más información sobre LLPhant, MongoDB y la creación de aplicaciones de IA, consulta los siguientes recursos:
Documentación deLLPhant
Repositorio LLPhant en GitHub
MongoDB Vector Search documentation
Documentación de la librería PHP de MongoDB
Documentación deVoyage AI