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:
  1. Indexad todo en un solo Vector Store (PDFs + texto de BD + etc.): Usar "QuestionAnswering" dentro del agente.
  2. Crear múltiples Vector Stores (uno por tipo de fuente) y hacer que el agente decida cuál consultar mediante Tools.
  3. Usar Multi-Query Retrieval + Reranking + Tools personalizadas.