# LlamaIndex

A integração do LlamaIndex com o [**Oxylabs Web Scraper API**](https://oxylabs.io/products/scraper-api/web) permite que você raspagem e processe dados da web através de um LLM (Large Language Model) no mesmo fluxo de trabalho.

## Visão geral

[**LlamaIndex**](https://docs.llamaindex.ai/en/stable/examples/data_connectors/OxylabsDemo/) é uma estrutura de dados projetada para construir aplicações LLM com fontes de dados externas. Use-a com [**Oxylabs Web Scraper API**](https://oxylabs.io/products/scraper-api/web) para:

* Raspar dados estruturados sem lidar com CAPTCHAs, bloqueios de IP ou renderização JS
* Processar resultados com um LLM no mesmo pipeline
* Construir fluxos de trabalho de ponta a ponta da extração à saída com IA

## Primeiros passos

**Crie suas credenciais de usuário da API:** inscreva-se para um teste gratuito ou adquira o produto no [**painel da Oxylabs**](https://dashboard.oxylabs.io/en/registration) para criar suas credenciais de usuário da API (`USERNAME` e `PASSWORD`).

{% hint style="info" %}
Se você precisar de mais de um usuário de API para sua conta, entre em contato com nosso suporte ao cliente ou envie uma mensagem ao nosso suporte por chat ao vivo 24/7.
{% endhint %}

### Configuração do ambiente

Neste guia usaremos a linguagem de programação Python. Instale as bibliotecas necessárias usando pip:

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

Crie um `.env` arquivo no diretório do seu projeto com suas credenciais da Oxylabs Web Scraper API e a chave da API do OpenAI:

```
OXYLABS_USERNAME=seu_nome_de_usuário_API
OXYLABS_PASSWORD=sua_senha_de_API
OPENAI_API_KEY=sua-chave-openai
```

Carregue essas variáveis de ambiente em seu script Python:

```python
import os
from dotenv import load_dotenv

load_dotenv()
```

## Métodos de integração

Existem duas formas de acessar conteúdo web via Web Scraper API no LlamaIndex:

### Oxylabs Reader

O `llama-index-readers-oxylabs` módulo contém classes específicas que permitem raspar dados de várias fontes:

| Fonte de dados da API          | Classe Reader                  |
| ------------------------------ | ------------------------------ |
| Pesquisa web do Google         | OxylabsGoogleSearchReader      |
| Anúncios de pesquisa do Google | OxylabsGoogleAdsReader         |
| Produto da Amazon              | OxylabsAmazonProductReader     |
| Busca na Amazon                | OxylabsAmazonSearchReader      |
| Avaliações da Amazon           | OxylabsAmazonReviewsReader     |
| Transcrição do YouTube         | OxylabsYoutubeTranscriptReader |

Por exemplo, você pode extrair resultados de pesquisa do 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

Com a `OxylabsWebReader` classe, você pode extrair dados de qualquer 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')
```

## Construindo um agente de busca com IA básico

Abaixo está um exemplo de um agente de IA simples que pode buscar no Google e responder perguntas:

```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())
```

## Configuração avançada

### Lidando com conteúdo dinâmico

A Web Scraper API pode lidar com renderização JavaScript:

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

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

### Definindo o tipo de User-Agent

Você pode 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'}
)
```

### Usando parâmetros específicos do alvo

Muitos raspadores específicos de alvo suportam parâmetros adicionais:

```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
})
```

## Criando índices vetoriais

LlamaIndex é particularmente útil para construir índices vetoriais a partir de conteúdo 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)
```
