Cargador LangChain para Páginas Web y Rastreo de Sitios#
El cargador EnConvert para LangChain convierte páginas web y sitios completos en LangChain Documents. Perciba URLs individuales en markdown o rastree un sitio completo y devuelva un Document por fragmento listo para RAG. Cada renderizado de página lleva una puntuación render_quality (0,0–1,0) en sus metadatos, por lo que una página bloqueada o vacía se marca en lugar de confiar silenciosamente.
langchain-enconvert · Fuente: enconvert/langchain-enconvert · Requiere: langchain-core>=0.3 · Licencia: MIT
Instalación#
pip install langchain-enconvert
Agregue su clave API#
El cargador requiere una credencial: EnConvert API Key.
from langchain_enconvert import EnconvertLoader
loader = EnconvertLoader(api_key="sk_...")
# O establezca $ENCONVERT_API_KEY y omita el parámetro
loader = EnconvertLoader()
Genere una clave API privada en el panel. Las claves privadas comienzan con sk_. Las claves públicas pk_ son rechazadas.
pk_ están destinadas a widgets del navegador y son rechazadas por el cargador. Obtenga más información en Private Keys.
Usar EnconvertLoader#
El cargador admite dos modos.
Percibir algunas URLs#
Convertir URLs individuales en Documents de markdown:
from langchain_enconvert import EnconvertLoader
loader = EnconvertLoader(urls=["https://example.com", "https://example.com/pricing"])
docs = loader.load()
Los metadatos de cada Document llevan:
- source: la URL
- 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 RAG:
from langchain_enconvert import EnconvertLoader
loader = EnconvertLoader(
ingest_url="https://docs.example.com",
mode="sitemap", # o "crawl" o "hybrid"
max_pages=100
)
docs = loader.load() # Bloquea hasta que se complete el rastreo
Los metadatos de cada Document llevan URL source propia del fragmento, título y contexto de sección.
El cargador sondea el trabajo de ingestión hasta completarse, así que .load() es síncrono. Para async verdadero, use .lazy_load() para iterar un Document a la vez.
Construir una canalización RAG#
Encadene el cargador en un divisor de texto y un almacén vectorial:
from langchain_enconvert import EnconvertLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
# Cargar y dividir
loader = EnconvertLoader(ingest_url="https://docs.example.com", mode="sitemap")
docs = loader.load()
# Incrustar e indexar
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = splitter.split_documents(docs)
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)
# Consultar
retriever = vectorstore.as_retriever()
relevant = retriever.invoke("¿Cómo instalo esto?")
Solución de problemas#
raise ValueError("Provide either urls or ingest_url, but not both")
Pasó tanto urls= como ingest_url= al cargador. 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= 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 cargador sondea hasta que se complete el trabajo, lo que puede tomar varios minutos en un sitio grande. Para una UX receptiva, use la API async (await loader.aload() en un contexto async) o sondee el estado del trabajo directamente a través de /v2/ingest/{job_id}.
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 source sin procesar 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#
- Fuente: enconvert/langchain-enconvert
- Paquete: PyPI
- Licencia: MIT
- Documentación de LangChain: python.langchain.com
- API subyacente: Introduction
Preguntas frecuentes#
¿Cómo cargo una sola URL en un Document?#
from langchain_enconvert import EnconvertLoader
loader = EnconvertLoader(urls=["https://example.com"])
docs = loader.load()
El contenido de cada Document es el markdown de la página, y los metadatos llevan la URL source y puntuación render_quality.
¿Cómo rastro e indexo un sitio completo?#
loader = EnconvertLoader(ingest_url="https://docs.example.com", mode="sitemap", max_pages=100)
docs = loader.load()
El cargador bloquea hasta completarse el rastreo, luego devuelve un Document por fragmento. Use mode="crawl" para rastreo HTTP, "sitemap" para análisis de mapa del sitio o "hybrid" para ambos.
¿Cómo verifico la render_quality de una página?#
Los metadatos de cada Document incluyen render_quality, puntuación de 0,0 a 1,0. Filtre documentos de alta calidad antes de indexar:
for doc in docs:
if doc.metadata.get('render_quality', 1.0) > 0.5:
vectorstore.add_documents([doc])
¿Puedo transmitir Documents uno a la vez?#
Sí, use .lazy_load():
for doc in loader.lazy_load():
print(doc.page_content[:100])
¿Qué pasa si necesito rastrear muchos sitios?#
Cree un cargador por sitio y llame a .load() secuencialmente, o use .aload() en un contexto async para distribuir rastreos en paralelo.