LLPHANT: EL FRAMEWORK DE PHP PARA DESARROLLAR APLICACIONES DE IA GENERATIVA
LLPhant es un framework de PHP diseñado específicamente para facilitar la creación de aplicaciones basadas en inteligencia artificial generativa. Permite a los desarrolladores PHP integrar de forma nativa los principales modelos de lenguaje sin necesidad de abandonar el ecosistema PHP. Instalación sencilla mediante Composer:composer require theodo-group/llphant
Xaracterísticas de LLPhant
-
RAG (Retrieval-Augmented Generation) Avanzado
- Ingesta y división de documentos (PDF, Word, texto, etc.)
- Generación de embeddings con múltiples modelos
- Soporte para una amplia variedad de Vector Stores:
- Doctrine (PostgreSQL + pgvector)
- Redis, Elasticsearch, MongoDB
- Qdrant, Milvus, Pinecone, ChromaDB, AstraDB, OpenSearch, Typesense y más
- Estrategias avanzadas de recuperación:
- Multi-Query Query Transformation
- RetrievedDocumentsTransformer y Reranking
- Small to Big Retrieval
- Clase
QuestionAnsweringque automatiza todo el flujo RAG - Integración de Tools dentro del QuestionAnswering
-
Function Calling y Tools
- Permite que los LLMs llamen a funciones PHP definidas por el desarrollador
- Creación sencilla de herramientas como clases PHP
- Ideal para construir agentes que interactúen con APIs externas, bases de datos o realicen acciones
-
Agentes (Agents) y AutoPHP
- Soporte para agentes autónomos estilo ReAct / AutoGPT
- Paquete complementario AutoPHP para tareas complejas e iterativas
- Razonamiento paso a paso combinado con uso de herramientas
-
Guardrails y Seguridad
- Sistema integrado de Guardrails para validar salidas
- Detección de Prompt Injections
- Validación de formato JSON, cumplimiento de políticas y seguridad
-
Memoria y Conversaciones Contextuales
- Chat Memory / Chat Session para mantener el historial de conversación
- Memoria persistente según la implementación
- Interacciones multi-turno con contexto
-
Capacidades Multimodales
- Análisis de visión e imágenes (Image Understanding)
- Speech to Text (conversión de audio a texto)
- Traducción de audio (no inglés a inglés)
-
Otras Características Avanzadas
- Streaming de respuestas en tiempo real
- Tracking detallado de consumo de tokens
- Evaluación de resultados (scoring, A/B testing, validación)
- Personalización profunda de prompts y transformers
- Integración nativa y fluida con Laravel y Symfony
Ideas para Usar LLPhant en Proyectos Reales
LLPhant permite a los desarrolladores PHP crear aplicaciones de inteligencia artificial generativa de forma sencilla y potente. A continuación, una lista de ideas prácticas organizadas por nivel de complejidad y tipo de aplicación:
Ideas Básicas (Fáciles de implementar)
- Chatbot simple – Asistente conversacional con respuestas en tiempo real usando streaming.
- Generador de contenido – Crear descripciones de productos, artículos de blog, emails o resúmenes automáticos.
- Clasificador de texto – Analizar comentarios, tickets de soporte o reseñas (positivo/negativo, urgente, etc.).
- Traducción y resumen – Resumir documentos largos o traducir texto manteniendo el contexto.
Ideas Intermedias (Recomendadas – Usando RAG)
- “Chat with your documents”
- Chatear con PDFs, manuales, contratos o documentación interna de la empresa.
- Chat con la documentación técnica de Symfony o Laravel.
- Búsqueda semántica en catálogos de productos o películas.
- Búsqueda semántica avanzada – Mejorar el buscador de un sitio web o e-commerce para que entienda el significado de las consultas.
- Asistente de atención al cliente – Bot que responde basándose en FAQs, manuales y tickets anteriores.
- Recomendador inteligente – Recomendaciones de productos, películas, libros o cursos usando embeddings.
Ideas Avanzadas (Usando Agents + Tools)
- Agentes autónomos con AutoPHP
- Agente que realiza tareas complejas de forma iterativa (búsqueda + procesamiento + generación de informes).
- “Personal shopper” para e-commerce.
- Automatización de flujos internos (procesar tickets de soporte, extraer datos de facturas, etc.).
- Function Calling integrado – Conectar el LLM con APIs, bases de datos o sistemas externos para que pueda realizar acciones reales (consultar stock, reservar citas, enviar emails, etc.).
- Análisis multimodal – Combinar texto + imágenes (análisis de capturas de pantalla, PDFs escaneados o fotos de productos).
Ideas por Tipo de Proyecto
- En Laravel o Symfony
- Asistente IA integrado en el panel de administración.
- Chatbot para el frontend de un sitio web.
- Herramienta interna para equipos de desarrollo (explicar código, generar migraciones, etc.).
- E-commerce
- Generación automática de descripciones de productos.
- Chatbot de ventas y recomendaciones personalizadas.
- Búsqueda semántica en el catálogo completo.
- Educación y Knowledge Base
- Plataforma donde los estudiantes chatean con los materiales del curso.
- Asistente inteligente para documentación técnica.
- Productividad interna
- Resumen automático de reuniones o informes largos.
- Análisis de logs o errores del sistema.
- Extracción inteligente de información de documentos escaneados.
Consejos para Empezar
- Comenzar con un RAG simple usando Ollama (modelos locales gratuitos) + Redis o Elasticsearch.
- Utilizar guardrails para mantener las respuestas seguras en producción.
- Aprovechar la integración nativa con Laravel y Symfony.
- Para proyectos más ambiciosos, explora el paquete AutoPHP para agentes autónomos.
Ejemplo de un chat con ficheros pdy y gemini
require_once __DIR__ . '/vendor/autoload.php';
use LLPhant\Chat\GeminiChat;
use LLPhant\Chat\GeminiConfig;
use LLPhant\Embeddings\EmbeddingGenerator\OpenAIEmbeddingGenerator;
use LLPhant\Embeddings\VectorStores\Redis\RedisVectorStore;
use LLPhant\DocumentLoader\FileDataReader;
use LLPhant\DocumentSplitter\DocumentSplitter;
use LLPhant\Query\SemanticSearch\QuestionAnswering;
// ===================== CONFIGURACIÓN =====================
$config = new GeminiConfig();
$config->apiKey = $_ENV['GEMINI_API_KEY'] ?? 'tu-gemini-api-key-aqui';
$config->model = 'gemini-1.5-pro'; // Recomendado para mejor calidad
$chat = new GeminiChat($config);
$embeddingGenerator = new OpenAIEmbeddingGenerator([
'model' => 'text-embedding-3-small'
]);
$vectorStore = new RedisVectorStore(
host: '127.0.0.1',
port: 6379
);
// ===================== 1. CARGAR MÚLTIPLES PDFs =====================
function ingestMultiplePDFs($folderPath, $vectorStore, $embeddingGenerator)
{
echo "Cargando todos los PDFs de la carpeta: $folderPath\n";
// ← Aquí está la clave: pasar una carpeta en lugar de un solo archivo
$loader = new FileDataReader($folderPath);
$documents = $loader->getDocuments(); // Carga todos los PDFs de la carpeta
// Dividir en chunks
$splitter = new DocumentSplitter(chunkSize: 800, chunkOverlap: 100);
$chunks = $splitter->splitDocuments($documents);
// Indexar en el vector store
$vectorStore->addDocuments($embeddingGenerator, $chunks);
echo "Indexación completada: " . count($chunks) . " chunks de " . count($documents) . " documentos.\n";
}
// === Ejecuta esto UNA SOLA VEZ (o en un comando Artisan) ===
$carpetaPDFs = __DIR__ . '/documentos/'; // ← Crea esta carpeta y pon todos tus PDFs aquí
// ingestMultiplePDFs($carpetaPDFs, $vectorStore, $embeddingGenerator);
// ===================== 2. CHAT CON TODOS LOS PDFs =====================
$qa = new QuestionAnswering(
vectorStore: $vectorStore,
embeddingGenerator: $embeddingGenerator,
chat: $chat
);
$qa->systemMessageTemplate = "
Eres un asistente experto que responde basándose **únicamente** en los documentos PDF cargados.
Responde siempre en español, de forma clara, estructurada y profesional.
Si no tienes suficiente información en los documentos, indícalo con honestidad.
Contexto relevante:
{context}
";
echo "Chat con múltiples PDFs listo. Escribe 'salir' para terminar.\n\n";
while (true) {
echo "Tu pregunta: ";
$pregunta = trim(fgets(STDIN));
if (in_array(strtolower($pregunta), ['salir', 'exit', 'q'])) {
echo "¡Hasta luego!\n";
break;
}
try {
$respuesta = $qa->answerQuestion($pregunta);
echo "\n Respuesta:\n" . $respuesta . "\n\n";
} catch (Exception $e) {
echo " Error: " . $e->getMessage() . "\n\n";
}
}