Reader LlamaIndex per Pagine Web e Indicizzazione di Siti#

Il reader EnConvert per LlamaIndex converte le pagine web e i siti interi in LlamaIndex Documents. Percepisci i singoli URL in markdown o esplora un intero sito e restituisci un Document per chunk pronto per l'indicizzazione. Ogni rendering della pagina ha un punteggio render_quality (0,0–1,0), quindi una pagina bloccata o vuota è segnalata anziché essere silenziosamente indicizzata.

Pacchetto: llama-index-readers-enconvert · Fonte: enconvert/llama-index-readers-enconvert · Richiede: llama-index-core>=0.12,<0.15 · Licenza: MIT

Installazione#

pip install llama-index-readers-enconvert

Aggiungi la tua chiave API#

Il reader richiede una credenziale: Chiave API EnConvert.

from llama_index.readers.enconvert import EnConvertReader

reader = EnConvertReader(api_key="sk_...")
# Oppure imposta $ENCONVERT_API_KEY e ometti il parametro
reader = EnConvertReader()

Genera una chiave API privata nel dashboard. Le chiavi private iniziano con sk_. Le chiavi pubbliche pk_ vengono rifiutate.

Le chiavi pubbliche non funzioneranno. Le chiavi che iniziano con pk_ sono destinate ai widget del browser e vengono rifiutate dal reader. Scopri di più su Private Keys.

Usa EnConvertReader#

Il reader supporta due modalità.

Percepisci alcuni URL#

Converti i singoli URL in Documents markdown:

from llama_index.readers.enconvert import EnConvertReader

reader = EnConvertReader(api_key="sk_...")
docs = reader.load_data(urls=["https://example.com", "https://example.com/pricing"])

I metadati di ogni Document contengono: - url: l'URL di origine - render_quality: un numero da 0,0 (bloccato/vuoto) a 1,0 (rendering pulito)

Esplora un sito in chunk#

Esplora un intero sito e restituisci un Document per chunk di contenuto, pronto per la ricerca semantica:

from llama_index.readers.enconvert import EnConvertReader

reader = EnConvertReader(api_key="sk_...")
docs = reader.load_data(
    ingest_url="https://docs.example.com",
    mode="sitemap",  # oppure "crawl" oppure "hybrid"
    max_pages=100
)

I metadati di ogni Document contengono l'URL url specifico del chunk, il titolo e il contesto della sezione. Il reader esegue il polling del lavoro di ingestione fino al completamento, quindi load_data() è sincrono.


Costruisci un Indice Vettoriale#

Concatena il reader in un archivio vettoriale e una query:

from llama_index.readers.enconvert import EnConvertReader
from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.core.storage.docstore import SimpleDocumentStore
from llama_index.core.vector_stores import SimpleVectorStore

# Carica i documenti
reader = EnConvertReader(api_key="sk_...")
docs = reader.load_data(ingest_url="https://docs.example.com", mode="sitemap")

# Costruisci l'indice
index = VectorStoreIndex.from_documents(docs)

# Query
query_engine = index.as_query_engine()
response = query_engine.query("Come installo questo?")
print(response)

Risoluzione dei problemi#

raise ValueError("Provide either urls or ingest_url, but not both") Hai passato sia urls= che ingest_url= a load_data(). Scegli uno: percepisci i singoli URL o esplora un sito. Passare nessuno genera anche un errore.

AuthenticationError: 401 Unauthorized La chiave API è scorretta o mancante. Verifica di aver impostato api_key="sk_..." o la variabile di ambiente $ENCONVERT_API_KEY su una chiave privata (inizia con sk_). Le chiavi pubbliche vengono rifiutate immediatamente.

Il tempo di caricamento sembra molto lungo. Gli crawl dei siti sono asincroni. Il reader esegue il polling fino al completamento del lavoro, che può richiedere diversi minuti su un sito grande. Esegui il polling diretto dello stato del lavoro tramite /v2/ingest/{job_id} oppure usa la variante async (se disponibile).

render_quality è molto basso per le pagine che mi aspettavo di leggere correttamente. Un punteggio basso (< 0,5) significa che la pagina è bloccata, vuota o ha JavaScript pesante che non è stato renderizzato in tempo. Controlla l'URL url di origine in un browser per vedere cosa fornisce effettivamente la pagina. Se è un'app mono-pagina, un secondo rendering potrebbe avere successo; se è bloccato, non ci sono tentativi.



Domande frequenti#

Come carico un singolo URL in un Document?#

from llama_index.readers.enconvert import EnConvertReader
reader = EnConvertReader(api_key="sk_...")
docs = reader.load_data(urls=["https://example.com"])

Il contenuto di ogni Document è il markdown della pagina e i metadati contengono l'URL url e il punteggio render_quality.

Come esploro e indicizzo un intero sito?#

from llama_index.readers.enconvert import EnConvertReader
from llama_index.core import VectorStoreIndex

reader = EnConvertReader(api_key="sk_...")
docs = reader.load_data(ingest_url="https://docs.example.com", mode="sitemap", max_pages=100)
index = VectorStoreIndex.from_documents(docs)

# Query
engine = index.as_query_engine()
response = engine.query("Cos'è questo?")

Come verifico il render_quality di una pagina prima dell'indicizzazione?#

I metadati di ogni Document includono render_quality, un punteggio da 0,0 a 1,0. Filtra i documenti di alta qualità prima dell'indicizzazione:

high_quality = [doc for doc in docs if doc.metadata.get('render_quality', 1.0) > 0.5]
index = VectorStoreIndex.from_documents(high_quality)

Posso esplorare più siti?#

Sì. Crea un reader per sito e chiama load_data() in sequenza o parallelizza le chiamate nel tuo proprio codice async.

Posso usare questo con altri componenti di LlamaIndex?#

Sì. EnConvertReader restituisce LlamaIndex Documents standard, quindi funziona con qualsiasi indice o componente a valle.