Lector LlamaIndex para Páginas Web e Indexación de Sitios#

El lector EnConvert para LlamaIndex convierte páginas web y sitios completos en LlamaIndex Documents. Perciba URLs individuales en markdown o rastree un sitio completo y devuelva un Document por fragmento listo para indexación. Cada renderizado de página lleva una puntuación render_quality (0,0–1,0), por lo que una página bloqueada o vacía se marca en lugar de indexarse silenciosamente.

Paquete: llama-index-readers-enconvert · Fuente: enconvert/llama-index-readers-enconvert · Requiere: llama-index-core>=0.12,<0.15 · Licencia: MIT

Instalación#

pip install llama-index-readers-enconvert

Agregue su clave API#

El lector requiere una credencial: EnConvert API Key.

from llama_index.readers.enconvert import EnConvertReader

reader = EnConvertReader(api_key="sk_...")
# O establezca $ENCONVERT_API_KEY y omita el parámetro
reader = EnConvertReader()

Genere una clave API privada en el panel. Las claves privadas comienzan con sk_. Las claves públicas pk_ son rechazadas.

Las claves públicas no funcionarán. Las claves que comienzan con pk_ están destinadas a widgets del navegador y son rechazadas por el lector. Obtenga más información en Private Keys.

Usar EnConvertReader#

El lector admite dos modos.

Percibir algunas URLs#

Convertir URLs individuales en Documents de 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"])

Los metadatos de cada Document llevan: - url: la URL de origen - render_quality: un número de 0,0 (bloqueado/vacío) a 1,0 (renderizado limpio)

Rastrear un sitio en fragmentos#

Rastree un sitio completo y devuelva un Document por fragmento de contenido, listo para búsqueda semántica:

from llama_index.readers.enconvert import EnConvertReader

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

Los metadatos de cada Document llevan la URL url propia del fragmento, título y contexto de sección. El lector sondea el trabajo de ingestión hasta completarse, así que load_data() es síncrono.


Construir un Índice Vectorial#

Encadene el lector en un almacén vectorial y una consulta:

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

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

# Construir índice
index = VectorStoreIndex.from_documents(docs)

# Consultar
query_engine = index.as_query_engine()
response = query_engine.query("¿Cómo instalo esto?")
print(response)

Solución de problemas#

raise ValueError("Provide either urls or ingest_url, but not both") Pasó tanto urls= como ingest_url= a load_data(). Elija uno: perciba URLs individuales o rastree un sitio. Pasar ninguno también genera un error.

AuthenticationError: 401 Unauthorized La clave API es incorrecta o falta. Verifique que haya configurado api_key="sk_..." o la variable de entorno $ENCONVERT_API_KEY en una clave privada (comienza con sk_). Las claves públicas son rechazadas inmediatamente.

El tiempo de carga parece muy largo. Los rastreos de sitios son asíncronos. El lector sondea hasta que se complete el trabajo, lo que puede tomar varios minutos en un sitio grande. Sondee el estado del trabajo directamente a través de /v2/ingest/{job_id} o use la variante async (si está disponible).

render_quality es muy bajo para páginas que esperaba leer limpiamente. Una puntuación baja (< 0,5) significa la página está bloqueada, vacía o tiene JavaScript pesado que no se renderizó a tiempo. Verifique la URL url de origen en un navegador para ver qué entrega realmente la página. Si es una aplicación de una sola página, un segundo renderizado podría tener éxito; si está bloqueada, no hay reintentos.


Fuente y enlaces#


Preguntas frecuentes#

¿Cómo cargo una sola URL en un Document?#

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

El contenido de cada Document es el markdown de la página, y los metadatos llevan la URL url y puntuación render_quality.

¿Cómo rastro e indexo un sitio completo?#

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)

# Consultar
engine = index.as_query_engine()
response = engine.query("¿Qué es esto?")

¿Cómo verifico la render_quality de una página antes de indexar?#

Los metadatos de cada Document incluyen render_quality, puntuación de 0,0 a 1,0. Filtre documentos de alta calidad antes de indexar:

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

¿Puedo rastrear múltiples sitios?#

Sí. Cree un lector por sitio y llame a load_data() secuencialmente o paralelice las llamadas en su propio código async.

¿Puedo usar esto con otros componentes de LlamaIndex?#

Sí. EnConvertReader devuelve LlamaIndex Documents estándar, así que funciona con cualquier índice o componente posterior.