# LlamaIndex

La integración de LlamaIndex con [**Oxylabs Web Scraper API**](https://oxylabs.io/products/scraper-api/web) te permite extraer y procesar datos web a través de un LLM (Large Language Model) en el mismo flujo de trabajo.

## Descripción general

[**LlamaIndex**](https://docs.llamaindex.ai/en/stable/examples/data_connectors/OxylabsDemo/) es un marco de datos diseñado para construir aplicaciones LLM con fuentes de datos externas. Úsalo con [**Oxylabs Web Scraper API**](https://oxylabs.io/products/scraper-api/web) para:

* Extraer datos estructurados sin manejar CAPTCHAs, bloqueos de IP o renderizado JS
* Procesar resultados con un LLM en la misma canalización
* Construir flujos de trabajo de extremo a extremo desde la extracción hasta la salida potenciada por IA

## Comenzando

**Crea tus credenciales de usuario API:** regístrate para una prueba gratuita o compra el producto en el [**panel de Oxylabs**](https://dashboard.oxylabs.io/en/registration) para crear tus credenciales de usuario API (`USERNAME` y `PASSWORD`).

{% hint style="info" %}
Si necesitas más de un usuario API para tu cuenta, por favor contacta con nuestro soporte al cliente o envía un mensaje a nuestro chat en vivo 24/7.
{% endhint %}

### Configuración del entorno

En esta guía usaremos el lenguaje de programación Python. Instala las bibliotecas requeridas usando pip:

```
pip install -qU llama-index llama-index-readers-oxylabs llama-index-readers-web
```

Crea un `.env` archivo en el directorio de tu proyecto con tus credenciales de Oxylabs Web Scraper API y la clave de OpenAI:

```
OXYLABS_USERNAME=your_API_username
OXYLABS_PASSWORD=your_API_password
OPENAI_API_KEY=your-openai-key
```

Carga estas variables de entorno en tu script de Python:

```python
import os
from dotenv import load_dotenv

load_dotenv()
```

## Métodos de integración

Hay dos maneras de acceder al contenido web vía Web Scraper API en LlamaIndex:

### Oxylabs Reader

El `llama-index-readers-oxylabs` el módulo contiene clases específicas que te permiten extraer datos de varias fuentes:

| Fuente de datos API            | Clase Reader                   |
| ------------------------------ | ------------------------------ |
| Búsqueda web de Google         | OxylabsGoogleSearchReader      |
| Anuncios de búsqueda de Google | OxylabsGoogleAdsReader         |
| Producto de Amazon             | OxylabsAmazonProductReader     |
| Búsqueda en Amazon             | OxylabsAmazonSearchReader      |
| Reseñas de Amazon              | OxylabsAmazonReviewsReader     |
| Transcripción de YouTube       | OxylabsYoutubeTranscriptReader |

Por ejemplo, puedes extraer resultados de búsqueda de Google:

```python
import os
from dotenv import load_dotenv
from llama_index.readers.oxylabs import OxylabsGoogleSearchReader

load_dotenv()
reader = OxylabsGoogleSearchReader(
    os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
results = reader.load_data({
    'query': 'best pancake recipe',
    'parse': True
})
print(results[0].text)
```

### Oxylabs Web Reader

Con la `OxylabsWebReader` clase, puedes extraer datos de cualquier URL:

```python
import os
from dotenv import load_dotenv
from llama_index.readers.web import OxylabsWebReader

load_dotenv()
reader = OxylabsWebReader(
    os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
results = reader.load_data(
    [
        'https://sandbox.oxylabs.io/products/1',
        'https://sandbox.oxylabs.io/products/2'
    ]
)
for result in results:
    print(result.text + '\n')
```

## Construyendo un agente de búsqueda AI básico

A continuación hay un ejemplo de un agente AI simple que puede buscar en Google y responder preguntas:

```python
import os
import asyncio
from dotenv import load_dotenv
from llama_index.readers.oxylabs import OxylabsGoogleSearchReader
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai import OpenAI

load_dotenv()
reader = OxylabsGoogleSearchReader(
    os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)

def web_search(query: str) -> str:
    results = reader.load_data({'query': query, 'parse': True})
    return results[0].text

agent = FunctionAgent(
    tools=[web_search],
    llm=OpenAI(model='gpt-4o-mini'),
    max_function_calls=1,
    system_prompt=(
        'Craft a short Google search query to use with the `web_search` tool. '
        'Analyze the most relevant results and answer the question.'
    )
)

async def main():
    response = await agent.run('How did DeepSeek affect the stock market?')
    print(response)

if __name__ == '__main__':
    asyncio.run(main())
```

## Configuración avanzada

### Manejo de contenido dinámico

La Web Scraper API puede manejar renderizado JavaScript:

```python
reader = OxylabsWebReader(
    os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)

results = reader.load_data(
    [
        'https://quotes.toscrape.com/js/'
    ],
    {'render': 'html'}
)
```

### Configurando el tipo de User-Agent

Puedes especificar diferentes user agents:

```python
reader = OxylabsWebReader(
    os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)

results = reader.load_data(
    [
        'https://sandbox.oxylabs.io/products/1'
    ],
    {'user_agent_type': 'mobile'}
)
```

### Uso de parámetros específicos del objetivo

Muchos scrapers específicos de objetivos soportan parámetros adicionales:

```python
reader = OxylabsGoogleSearchReader(
    os.getenv('OXYLABS_USERNAME'),
    os.getenv('OXYLABS_PASSWORD')
)
results = reader.load_data({
    'query': 'iphone',
    'parse': True,
    'domain': 'com',
    'start_page': 2,
    'pages': 3
})
```

## Creando índices vectoriales

LlamaIndex es especialmente útil para construir índices vectoriales a partir de contenido web:

```python
import os
from dotenv import load_dotenv
from llama_index.readers.web import OxylabsWebReader
from llama_index.core import Settings, VectorStoreIndex
from llama_index.llms.openai import OpenAI

load_dotenv()
reader = OxylabsWebReader(
    os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
documents = reader.load_data([
    'https://sandbox.oxylabs.io/products/1',
    'https://sandbox.oxylabs.io/products/2'
])

# Configure LlamaIndex settings
Settings.llm = OpenAI(model='gpt-4o-mini')

# Create an index
index = VectorStoreIndex.from_documents(documents)

# Query the index
query_engine = index.as_query_engine()
response = query_engine.query('What is the main topic of these pages?')
print(response)
```
