> For the complete documentation index, see [llms.txt](https://docs.neuron-ai.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.neuron-ai.dev/neuron-v3-es/rag/retrieval.md).

# Recuperación

### Introducción

El módulo RAG cuenta con un componente de recuperación separado que te permite implementar diferentes estrategias para lograr la recuperación de contexto desde fuentes de datos externas. De forma predeterminada, RAG usa `SimilarityRetrieval` que simplemente consulta el almacén vectorial para recuperar documentos:

```php
namespace App\Neuron;

use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\RAG\Embeddings\EmbeddingsProviderInterface;
use NeuronAI\RAG\RAG;
use NeuronAI\RAG\RAG\Retrieval\RetrievalInterface;
use NeuronAI\RAG\RAG\Retrieval\SimilarityRetrieval;
use NeuronAI\RAG\VectorStore\VectorStoreInterface;

class WorkoutTipsAgent extends RAG
{
    protected function retrieval(): RetrievalInterface
    {
        return new SimilarityRetrieval(
            $this->resolveVectorStore(),
            $this->resolveEmbeddingsProvider()
        );
    }
    
    protected function provider(): AIProviderInterface
    {
        // Devuelve una instancia de un proveedor de IA...
    }
    
    protected function embeddings(): EmbeddingsProviderInterface
    {
        // Devuelve una instancia de un proveedor de embeddings...
    }
    
    protected function vectorStore(): VectorStoreInterface
    {
        // Devuelve una instancia de un almacén vectorial...
    }
}
```

Implementación de `RetrievalInterface` eres libre de crear cualquier comportamiento de recuperación personalizado para tu RAG.

```php
interface RetrievalInterface
{
    /**
     * Recupera los documentos relevantes para la consulta dada.
     *
     * @return Document[]
     */
    public function retrieve(Message $query): array;
}
```

Si estás implementando un flujo de trabajo personalizado, puedes usar la recuperación como un componente independiente para recuperar dinámicamente datos de contexto para su uso en tus sistemas agénticos.

### Recuperación como herramienta

Neuron te proporciona una `RetrievalTool` herramienta que permite a los agentes de IA realizar recuperación de contexto desde almacenes vectoriales si el modelo considera que necesita más contexto para responder a la pregunta actual del usuario. Está construida sobre la base de `RetrievalInterface` , lo que permite construir agentes con capacidades RAG (Generación Aumentada por Recuperación) bajo demanda en lugar de la inyección automática de contexto proporcionada por el componente RAG.

Aquí tienes un ejemplo usando la herramienta integrada `SimilarityRetrieval`:

```php
use NeuronAI\Tools\Toolkits\RetrievalTool;
use NeuronAI\RAG\Retrieval\SimilarityRetrieval;

class AgenticRAG extends Agent
{
    protected function provider(): AIProviderInterface
    {...}
    
    protected function instructions(): string
    {...}
    
    protected function tools(): array
    {
        return [
            RetrievalTool::make(
                new SimilarityRetrieval(
                    $this->vectorStore(), 
                    $this->embeddings()
                )
            ),
        ];
    }
    
    protected function vectorStore(): VectorStoreInterface
    {
        return new FileVectorStore(__DIR__);
    }
    
    protected function embeddings(): EmbeddingsProviderInterface
    {
        return new OllamaEmbeddingsProvider(
            model: 'OLLAMA_EMBEDDINGS_MODEL'
        );
    }
}
```

Como puedes notar en este ejemplo, no extendemos RAG sino el Agent básico en su lugar. En esta implementación dejamos que el modelo decida si corresponde buscar una fuente externa para responder la pregunta del usuario.

Siempre puedes usar todos los métodos de herramientas y agentes para personalizar la descripción, las instrucciones y los prompts en general, y hacer que el modelo se comporte según tu caso de uso.

### Módulo de recuperación RAPTOR

La mayoría de los modelos aumentados con recuperación funcionan dividiendo los documentos en fragmentos pequeños y recuperando solo los más relevantes. Sin embargo, este enfoque tiene algunas limitaciones:

* **Pérdida de contexto**: Recuperar solo fragmentos pequeños y aislados puede perder la visión general, especialmente en documentos con contextos largos.
* **Dificultad en el razonamiento de varios pasos**: Algunas preguntas requieren información de varias secciones de un documento.

**Usa RAPTOR cuando:**

* Los usuarios hacen preguntas abiertas que requieren una cobertura exhaustiva
* Tu dominio involucra temas complejos donde el contexto importa tanto como los hechos
* Necesitas gestionar consultas sobre temas, tendencias o relaciones entre documentos

**Mantén el RAG tradicional cuando:**

* Los usuarios principalmente necesitan una recuperación rápida y específica de hechos
* La velocidad de procesamiento y la eficiencia de tokens son restricciones críticas

Obtén más información sobre RAPTOR en el repositorio dedicado:

{% embed url="<https://github.com/neuron-core/raptor-retrieval>" %}
