Skip to main content

Command Palette

Search for a command to run...

Cómo crear una Knowledge Base en AWS Bedrock usando Crawl4AI y S3 Vectors

Updated
6 min read
Cómo crear una Knowledge Base en AWS Bedrock usando Crawl4AI y S3 Vectors

En los últimos meses, el concepto de retrieval augmented generation (RAG) empezó a aparecer cada vez más en productos, demos y artículos sobre IA. La idea central es simple:
en lugar de que un modelo responda solo con lo que “sabe”, le damos documentos propios como fuente de información.

AWS Bedrock incorpora este enfoque a través de las Knowledge Bases, una forma administrada de conectar documentos, embeddings y modelos de lenguaje sin tener que construir toda la infraestructura desde cero.

En este artículo vamos a recorrer, paso a paso, cómo crear una Knowledge Base usando documentación pública como ejemplo. No vamos a construir un asistente ni una aplicación final: el objetivo es entender el proceso completo, desde los documentos hasta la consulta en Bedrock.


Qué vamos a hacer

A lo largo del artículo vamos a:

  • Extraer contenido limpio desde documentación técnica pública

  • Almacenar esos documentos en Amazon S3

  • Crear una Knowledge Base en Amazon Bedrock

  • Sincronizar los documentos

  • Probar consultas directamente desde la consola

Usaremos la documentación de Kubernetes únicamente como ejemplo, pero el mismo flujo aplica para:

  • documentación interna

  • manuales técnicos

  • wikis

  • guías operativas

  • o cualquier conjunto de archivos de texto


Conceptos clave

Antes de avanzar, vale la pena aclarar algunos conceptos que vamos a usar durante el tutorial.

Amazon Bedrock

Amazon Bedrock es un servicio administrado de AWS que permite trabajar con modelos fundacionales (como Claude o Titan) sin necesidad de entrenarlos ni desplegarlos.

Entre otras cosas, Bedrock ofrece:

  • gestión de modelos

  • embeddings

  • y Knowledge Bases, que es lo que vamos a usar acá


Knowledge Base en Bedrock

Una Knowledge Base es un recurso que conecta:

  • documentos almacenados (por ejemplo, en S3)

  • un modelo de embeddings

  • un vector store

  • y un modelo de lenguaje

El resultado es una base de conocimiento que puede responder preguntas usando exclusivamente los documentos que vos cargaste, con trazabilidad hacia las fuentes.

En este artículo vamos a crear la Knowledge Base y probarla desde la consola. La integración en una app o chatbot queda para más adelante.


Crawl4AI

Crawl4AI es una herramienta de scraping pensada específicamente para casos de uso con LLMs.

A diferencia de scrapers tradicionales, su foco está en:

  • extraer solo el contenido principal

  • eliminar navegación, footers y elementos visuales

  • generar texto limpio en Markdown

Esto es clave cuando el destino final del contenido no es un humano, sino un sistema de embeddings.


Stack que vamos a usar

El stack es simple y económico:

  • Crawl4AI – para extraer contenido limpio

  • Amazon S3 – almacenamiento de documentos

  • Amazon Bedrock Knowledge Bases – gestión del RAG

  • S3 Vector Store – almacenamiento de embeddings


Parte 1: Setup del entorno

Pre-requisitos

  • Python 3.11 o superior

  • AWS CLI configurado

  • Cuenta de AWS con acceso a Bedrock

Instalación de dependencias

mkdir scraper-kb-bedrock
cd scraper-kb-bedrock

python3 -m venv venv
source venv/bin/activate

pip install crawl4ai boto3 requests
playwright install

Configurar AWS CLI

aws configure

Configurar:

  • Access Key

  • Secret Key

  • Región (ej: us-east-1)


Crear bucket S3

aws s3 mb s3://docs-kb-bedrock --region us-east-1

Este bucket va a contener los documentos que luego usará la Knowledge Base.


Parte 2: Descubrir URLs usando sitemaps

Para cargar documentos en una Knowledge Base primero necesitamos saber qué páginas existen.

Muchos sitios publican un sitemap, un archivo XML que lista todas las URLs disponibles.

En el caso de Kubernetes:

curl -s https://kubernetes.io/en/sitemap.xml | head

A partir de ese archivo podemos identificar secciones relevantes y decidir qué contenido usar.
Para este tutorial vamos a limitarnos a un conjunto pequeño de páginas, solo para demostrar el flujo completo.


Parte 3: Scraping controlado (10 páginas)

En lugar de scrapear cientos de URLs, vamos a hacer algo mucho más simple:
extraer 10 páginas reales, limpiarlas y subirlas a S3.

Esto es suficiente para:

  • crear la Knowledge Base

  • sincronizar documentos

  • probar consultas en Bedrock


Script de scraping

import asyncio
import boto3
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig

BUCKET = "docs-kb-bedrock"

URLS = [
    "https://kubernetes.io/docs/concepts/overview/",
    "https://kubernetes.io/docs/concepts/workloads/pods/",
    "https://kubernetes.io/docs/concepts/services-networking/service/",
    "https://kubernetes.io/docs/concepts/configuration/configmap/",
    "https://kubernetes.io/docs/concepts/workloads/controllers/deployment/",
    "https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/",
    "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
    "https://kubernetes.io/docs/tutorials/kubernetes-basics/",
    "https://kubernetes.io/docs/setup/",
    "https://kubernetes.io/docs/reference/glossary/"
]

s3 = boto3.client("s3")

async def scrape():
    config = CrawlerRunConfig(
        excluded_tags=["nav", "footer", "header", "aside"],
        remove_overlay_elements=True,
        word_count_threshold=10
    )

    async with AsyncWebCrawler() as crawler:
        for url in URLS:
            result = await crawler.arun(url=url, config=config)
            if result.success:
                key = f"kubernetes/{url.split('/')[-2]}.md"
                s3.put_object(
                    Bucket=BUCKET,
                    Key=key,
                    Body=result.markdown.encode("utf-8")
                )
                print(f"Subido: {key}")

asyncio.run(scrape())

Este script:

  • extrae contenido limpio

  • lo guarda como Markdown

  • lo sube a S3


Parte 4: Crear la Knowledge Base en Amazon Bedrock

A partir de este punto, todo se hace desde la consola de AWS.
Esta sección está pensada para acompañar con capturas de pantalla.

Crear la Knowledge Base

En la consola de Amazon Bedrock:

  1. Ir a Knowledge bases

  2. Crear una nueva Knowledge Base

  1. Asignarle un nombre y descripción

  1. Crear o reutilizar un rol de IAM


Configurar el data source

  • Tipo: Amazon S3

  • Ruta: el prefijo donde subiste los archivos (s3://docs-kb-bedrock/kubernetes/)

Bedrock va a leer automáticamente todos los documentos en ese path.


Embeddings y vector store

  • Parser: default

  • Chunking: default

  • Embeddings: Amazon Titan Text Embeddings

  • Vector store: Amazon S3

Con esta configuración no hace falta administrar bases vectoriales externas.


Sincronizar documentos

Una vez creada la Knowledge Base:

  • iniciar el proceso de Sync

  • esperar a que los documentos se procesen

  • verificar que los chunks fueron generados correctamente


Parte 5: Probar la Knowledge Base

Desde la misma consola de Bedrock se puede probar la Knowledge Base sin escribir código.

Al hacer una consulta:

  • el modelo responde usando los documentos cargados

  • se muestran las fuentes utilizadas

  • se puede validar que la información viene efectivamente de S3

Esto confirma que la Knowledge Base está funcionando correctamente.


Conclusión

En este artículo creamos una Knowledge Base completa en Amazon Bedrock partiendo únicamente de documentación en texto.

Sin entrenar modelos, sin manejar infraestructura compleja y usando servicios administrados, vimos cómo:

  • preparar documentos

  • almacenarlos correctamente

  • convertirlos en una base consultable por IA

A partir de acá, esta Knowledge Base puede usarse como base para:

  • asistentes conversacionales

  • APIs internas

  • herramientas de búsqueda semántica

  • o sistemas de soporte basados en documentación

En próximos artículos, el foco estará en cómo consumir esta Knowledge Base desde aplicaciones reales.