COMO CARGAR DIFERENTES FUENTES DE DOCUMENTOS PARA RAG EN LLPHANT
En LLPhant se pueden cargar diferentes fuentes de información para alimentar a los agentes IA, especialmente con AutoPHP o herramientas personalizadas. El framework está diseñado para ser flexible, similar a LangChain. Aquí se explican las formas más comunes y efectivas de hacerlo:
Cargar diferentes fuentes de documentos (para RAG)
Usa principalmente la clase FileDataReader
use LLPhant\DocumentLoader\FileDataReader;
use LLPhant\DocumentSplitter\DocumentSplitter;
use LLPhant\Embeddings\EmbeddingGenerator\OpenAIEmbeddingGenerator; // o el que uses
use LLPhant\Embeddings\VectorStores\Redis\RedisVectorStore; // ejemplo
// Cargar varias fuentes en un solo vector store
$loader = new FileDataReader(__DIR__ . '/data/'); // carpeta con PDFs, .txt, .docx, etc.
$documents = $loader->getDocuments(); // Carga automáticamente todos los archivos soportados
// Dividir en chunks
$splitter = new DocumentSplitter(chunkSize: 800, chunkOverlap: 100);
$chunks = $splitter->splitDocuments($documents);
// Generar embeddings e indexar
$embeddingGenerator = new OpenAIEmbeddingGenerator(['model' => 'text-embedding-3-small']);
$vectorStore = new RedisVectorStore(host: '127.0.0.1', port: 6379);
$vectorStore->addDocuments($embeddingGenerator, $chunks);
echo count($chunks) . " chunks indexados desde múltiples fuentes.\n";
Fuentes soportadas actualmente por "FileDataReader":
- Archivos PDF.
- Documentos Word (.docx).
- Archivos de texto plano (.txt, .md, etc.).
- Carpetas completas (carga todo lo que haya dentro).
Cargar fuentes heterogéneas (recomendado para agentes)
Para agentes IA (AutoPHP), lo mejor es combinar varias estrategias:
// Ejemplo: Cargar diferentes tipos de fuentes
// 1. Documentos (PDFs, manuales, contratos)
$docsLoader = new FileDataReader(__DIR__ . '/documentos/');
$docs = $docsLoader->getDocuments();
// 2. Datos estructurados (base de datos)
$productos = // consulta a tu BD con Laravel/Symfony y conviértelos a texto
$productosDocs = array_map(fn($p) => new Document(
content: "Producto: {$p['nombre']} - Precio: {$p['precio']} - Stock: {$p['stock']}",
metadata: ['source' => 'database', 'type' => 'producto']
), $productos);
// 3. Contenido web o APIs (usando tools)
$webContent = // puedes crear un Tool personalizado que haga scraping o llame a una API
// Combinar todo
$allDocuments = array_merge($docs, $productosDocs /*, $otros */);
$splitter = new DocumentSplitter(800, 100);
$chunks = $splitter->splitDocuments($allDocuments);
// Indexar en el vector store
$vectorStore->addDocuments($embeddingGenerator, $chunks);
Para Agentes IA (AutoPHP) – La forma más potente
Los agentes funcionan mejor cuando se les da herramientas específicas para cada fuente:
use LLPhant\AutoPHP;
use LLPhant\Tool\SerpApiSearch; // ejemplo de tool web
use LLPhant\Chat\FunctionInfo\FunctionBuilder;
// Crear tools personalizadas
class DatabaseTool {
public function searchProducts(string $query): string {
// Consulta tu BD y devuelve resultados en texto
return "Resultados de productos para '$query': ...";
}
}
$tools = [
FunctionBuilder::buildFunctionInfo(new DatabaseTool(), 'searchProducts'),
FunctionBuilder::buildFunctionInfo(new SerpApiSearch(), 'googleSearch'), // búsqueda web
// Puedes crear más tools: consulta a API interna, leer Excel, etc.
];
$agent = new AutoPHP(
objective: "Ayuda al usuario con información de productos, documentación y datos actualizados de internet",
tools: $tools
);
$respuesta = $agent->run();
Recomendaciones para Agentes con múltiples fuentes:
- Indexad todo en un solo Vector Store (PDFs + texto de BD + etc.): Usar "QuestionAnswering" dentro del agente.
- Crear múltiples Vector Stores (uno por tipo de fuente) y hacer que el agente decida cuál consultar mediante Tools.
- Usar Multi-Query Retrieval + Reranking + Tools personalizadas.