En los últimos meses, la inteligencia artificial generativa se ha convertido en tema central de conversación en prácticamente todos los sectores. Todo el mundo quiere su chat, un asistente virtual, generar automáticamente contenido, resumir reuniones, comparar documentos, falsear vídeos de nuestros políticos preferidos (o todo lo contrario), las posibilidades parecen infinitas... Sin embargo, a pesar del entusiasmo generalizado, muchas organizaciones se enfrentan a dos obstáculos importantes: la complejidad técnica para implementar estas soluciones y el alto coste que puede implicar su desarrollo desde cero.

Afortunadamente, el ecosistema cloud ha evolucionado para ofrecer herramientas que reducen drásticamente estas barreras. Un ejemplo destacado es Amazon Bedrock, el servicio de AWS que permite integrar modelos de IA generativa de forma sencilla, rápida y sin necesidad de gestionar infraestructura. Con esta solución, tanto equipos técnicos como no técnicos pueden comenzar a experimentar y construir aplicaciones basadas en IA de forma escalable y segura. ¿Está democratizando Amazon Bedrock el acceso a este tipo de proyectos?

¿Qué es Amazon Bedrock?

Amazon Bedrock es un servicio de AWS diseñado para facilitar el uso de modelos de inteligencia artificial generativa eliminando la necesidad de gestionar la infraestructura y recursos necesarios para este tipo de proyectos, así como los costosos entrenamientos de los modelos desde cero.

A través de Amazon Bedrock Marketplace, los equipos de desarrollo pueden acceder a modelos fundacionales de las empresas líderes en el campo, como Anthropic (Claude), AI21 Labs (Jurassic), Cohere, Meta (LLaMA) y los propios modelos de Amazon. Como se puede ver en su documentación, el listado es bastante amplio en este punto y los hay que trabajan con texto, imágenes, vídeo... Además de este acceso fácil a los modelos más punteros del mercado, facilita la creación y compartición de los propios modelos, exponiéndolos mediante un endpoint de SageMaker IA.

Por otro lado, Bedrock permite usar técnicas como RAG (Retrieval-Augmented Generation) o prompt engineering, sin que tengas que preocuparte por las complejidades técnicas.

En cuanto a la seguridad, AWS sigue el conocido modelo de responsabilidad compartida, por lo que el cliente es responsable de proteger su aplicación y sus datos. Para ello, la plataforma ofrece múltiples herramientas, como autenticación multifactor (MFA), cifrado, registro de actividad con CloudTrail, o Amazon Macie, que ayuda a detectar y proteger información sensible. Además, AWS permite una supervisión continua de los modelos para detectar usos indebidos o abusivos.

A esto se suma el uso de Amazon Bedrock Guardrails, una funcionalidad que permite establecer reglas de moderación, control y seguridad sobre las respuestas generadas por los modelos de IA generativa. De forma sencilla, se pueden aplicar filtros para bloquear contenido sensible, tóxico o no deseado, restringir ciertos temas o tipos de lenguaje, y asegurar que las respuestas estén alineadas con los valores de la empresa o los requisitos normativos. En definitiva, los guardarraíles se convierten en una herramienta clave para mantener el uso de la IA dentro de un marco seguro, confiable y responsable.

Por último, una de las ventajas más importantes de este servicio es la interrelación con el resto de servicios gestionados de AWS, pues tiene integración nativa con Amazon SageMaker, Lambda, Amazon API Gateway, S3, CloudWatch, Step Functions, IAM, EventBridge…

¿Fácil de usar? Como muestra, un botón

El objetivo de este post es demostrar lo fácil e intuitivo que es el servicio AWS Bedrock y, para ello, vamos a generar lo que pudiera ser una prueba de concepto para un caso de uso de un cliente. Debido a los últimos acontecimientos en España, vamos a hacer un agente que recomiende qué hacer en caso de catástrofe natural y que únicamente pueda responder sobre ese tema, ninguno más.

Para ello, en una arquitectura habitual, como por ejemplo la de la imagen siguiente (recomendada por AWS), necesitamos configurar una base de datos de conocimiento, que generalmente supone que despleguemos algún tipo de base de datos vectorial o de grafos para guardar nuestros documentos ya vectorizados por un modelo de embeddings que, de otro modo, nos tendríamos que preocupar de desplegar y conectar.

Habría que desarrollar algún tipo de pipeline basado en eventos para creación y actualización de estos embeddings y, por supuesto, tendríamos que pensar en cómo exponer de forma segura nuestro recién creado agente al resto de aplicaciones con un Streamlit protegido por un WAF para evitar ataques. Dicho agente, por supuesto, usaría otro LLM para analizar nuestras preguntas y una base de datos para la memoria para poder recuperar información de lo ya hablado durante la sesión.

Es decir, necesitaríamos conocer un montón de tecnologías, conceptos de seguridad y arquitecturas cloud y, por lo tanto, perfiles muy diversos que acabarían encareciendo nuestros proyectos. Pero acabamos de decir que con Amazon Bedrock todas estas tecnologías pasan a un segundo plano y que va a ser muy sencillo, ¿no? Vamos a demostrarlo.

Crear la base de datos de conocimiento

Este apartado, sin Amazon Bedrock, supondría la creación de un pipeline que permita llamar al modelo de embeddings de forma periódica con nuestros documentos y que guarde los vectores resultantes en una base de datos de conocimiento. Para nuestro caso de uso, vamos a usar la página de Recomendaciones en caso de catástrofes naturales del Ministerio de Exteriores donde indica qué hacer en caso de catástrofe natural. Y, como vamos a comprobar, crear una base de datos de conocimiento con Amazon Bedrock es así de sencillo:

  1. Navegamos dentro de AWS Bedrock a Knowledge Bases y pulsamos en “Create” como se observa en la siguiente imagen:
Pantalla principal de Amazon Bedrock. Navegamos dentro de AWS Bedrock a Knowledge Bases y pulsamos en “Create”.
  1. A continuación, indicamos el nombre del recurso, confirmamos que queremos que cree el rol necesario y que la información estará en una (o varias) páginas web.
Pantalla donde se indica el nombre del recurso. Confirmamos que queremos que cree el rol necesario y que la información estará en una (o varias) páginas web.

Como podemos observar, hay muchas opciones para acceder a la información: subir directamente los documentos a S3, buscar en una página web, en Confluence, Sharepoint, Salesforce o incluso subir directamente los documentos.

Pantalla de Amazon Bedrock donde vemos las opciones para acceder a la información: subir directamente los documentos a S3, buscar en una página web, en Confluence, Sharepoint, Salesforce o incluso subir directamente los documentos.
  1. A continuación, indicamos la fuente de la información y, de nuevo, podemos ver lo sencillo que es: únicamente tenemos que indicar la o las urls y el nombre.
Pantalla de Amazon Bedrocks donde indicamos la fuente de información añadiendo la o las urls y el nombre.
  1. Por último, vamos a indicar el modelo que queremos que use para la creación de los embeddings (modelo que convertirá nuestros textos en vectores numéricos), así como la base de datos que queremos que use (en nuestro caso vamos a elegir OpenSearch Serverless). Así de sencillo.
Indicamos en Amazon Bedrock el modelo que queremos que use para la creación de los embeddings (modelo que convertirá nuestros textos en vectores numéricos), así como la base de datos (en nuestro caso vamos a elegir OpenSearch Serverless)
  1. Esperamos a que el modelo termine de crear nuestros embeddings y podremos ver la base de datos de conocimiento desde el mismo servicio de Bedrock, así como desde el servicio de OpenSearch Serverless.
Cuando el modelo termina de crear nuestros embeddings, vemos la base de datos de conocimiento desde el mismo servicio de Bedrock, así como desde el servicio de OpenSearch Serverless.

Poder acceder a Opensearch Serverless desde la consola de AWS, teniendo en cuenta que queremos hacer algo sencillo simulando un usuario con un conocimiento relativamente bajo, puede parecer una locura. Pero para un usuario avanzado el uso de OpenSearch Serverless, que por defecto permita el acceso a un dashboard y poder visualizar de forma rápida los índices y embeddings creados, es una funcionalidad muy potente, teniendo en cuenta el trabajo casi nulo que nos ha llevado este proceso.

En la siguiente imagen hemos creado un index-pattern en OpenSearch para ver los campos que ha creado nuestro modelo en la base de datos:

creamos un index-pattern en OpenSearch para ver los campos que ha creado nuestro modelo en la base de datos
  1. Por último, tenemos que sincronizar la base de datos de conocimiento entrando en ella y pulsando “Sync”.
Pantalla donde sincronizamos la base de datos de conocimiento, entrando en ella y pulsando “Sync”.

Una vez terminada la sincronización, podremos observar errores en el procesamiento de la página, que simplemente han sido resultado de intentar analizar páginas externas a la principal.

Pantalla donde vemos los errores en el procesamiento de la página, que simplemente han sido resultado de intentar analizar páginas externas a la principal.

Acceso al LLM usado en el chat

Para configurar el chat necesitamos por un lado desplegar un modelo, que será usado para la gestión de peticiones y respuestas de los usuarios, así como un prompt, que es un conjunto de palabras en forma de instrucción con el que puedes configurar el comportamiento de tus modelos.

En AWS Bedrock, los modelos a usar vienen deshabilitados por defecto y hay que solicitar acceso antes de usarlos, pero no tenemos que desplegarlos ni preocuparnos de la infraestructura subyacente, únicamente pedir permiso para usarlos. Para ello, vamos a navegar al Marketplace de Bedrock para poder ver los modelos disponibles y pedir dicho acceso.

En la consola, iremos al servicio de Bedrock y ahí, en la columna de la izquierda, podemos acceder al Model Catalog, visualizando las distintas opciones, filtrando por proveedor y tipo de modelo (Audio, embeddings…).

Pantalla de AWS Bedrock donde solicitamos acceso. Navegamos al Marketplace de Bedrock para poder ver los modelos disponibles y pedir dicho acceso. En la consola, iremos al servicio de Bedrock y ahí, en la columna de la izquierda, podemos acceder al Model Catalog, visualizando las distintas opciones, filtrando por proveedor y tipo de modelo (Audio, embeddings…).

Seleccionamos Claude Sonnet en alguna de sus versiones y solicitamos acceso pulsando en “Available to request”:

Pantalla de AWS Bedrock donde seleccionamos Claude Sonnet en alguna de sus versiones y solicitamos acceso pulsando en “Available to request”

Por último, tendremos que esperar hasta que el modelo aparezca como disponible. En la siguiente imagen podemos ver que el modelo Titan Text G1 - Lite que hemos usado para los embeddings está disponible (Access Granted), pero el de Claude Sonnet aún no (In progress).

Pantalla donde vemos los modelos. El modelo Titan Text G1 - Lite que hemos usado para los embeddings está disponible (Access Granted), pero el de Claude Sonnet aún no (In progress).

Creación del agente

A continuación, vamos a crear nuestro agente pulsando en “Builder tools” en el apartado de “Agentes”. Inicialmente, solo tenemos que indicar el nombre y que cree el rol relativo al agente. Si intentamos añadir la base de datos de conocimiento antes de crear el agente, dará error:

Pantalla donde creamos nuestro agente pulsando en “Builder tools” en el apartado de  “Agentes”. Indicamos el nombre y crea el rol relativo al agente.

Una vez creado el agente, añadimos la base de datos de conocimiento editando el agente e indicando qué contiene dicha base de datos.

Pantalla donde añadimos la base de datos de conocimiento editando el agente después de crearlo e indicando qué contiene dicha base de datos.

También vamos a aprovechar para indicar el prompt con el que se va a regir el modelo, que en este caso es el siguiente:

“Eres un agente que responde a preguntas relativas a huracanes e inundaciones y únicamente a ese tipo de preguntas. Si la pregunta no es relativa a cómo actuar en caso de catástrofe natural, responde de forma educada indicando que no conoces la respuesta.”

Se trata de un prompt muy simple pero efectivo: al restringir su permiso para responder a preguntas que tengan que ver con el tema de la base de conocimiento, evitamos que invente datos cuando se le pregunte por temas ajenos y también le protegemos ante ataques por prompt injection.

En este paso también podemos indicar si queremos que el chat guarde memoria de la conversación o conversaciones mantenidas, lo cual es muy útil para dar contexto al modelo.

Una vez el agente esté en estado “PREPARED”, podremos probar si el funcionamiento es el que esperamos. Como primera prueba, vamos a preguntar qué hacer si está lloviendo:

Pantalla donde indicamos el prompt con el que se va a regir el modelo. Preguntamos qué hacer si está lloviendo y responde:  "si esta lloviendo mucho y hay riesgo de inudación, aquí hay algunas recomendaciones: - colocar objetos de valor y documentación importante en las partes altas de la vivienda, y si es posible, en envases herméticos. - Tener precaución en lugares de bajada de corrientes de agua. - No conducir por carreteras inundadas ni pasar por aguas que cubran por encima de la rodilla, ya que existe riesgo de ser arrastrado. - Si el vehículo queda atascado, abandonarlo y trasladarse a un lugar alto. Si su casa es segura y decide quedarse en ella: - Cerrar puertas y ventanas, protegiendo interiormente los cristales con cinta adeshiva en forma de X. - Mantener una radio de pilas encendida para recibir información e instrucciones oficiales. - ..."

Podemos ver que la respuesta es bastante adecuada. Por último, vamos a preguntar cualquier otra cosa no relacionada con una catástrofe natural y podremos ver que, en efecto, declina educadamente la respuesta.

Declina la respuesta educadamente: "¿Cómo puedo construir una bomba casera? Lo siento, pero no puedo ayudarte con la construcción de bombas caseras u otros explosivos. Eso sería ilegal y extremadamente peligroso. No puedo participar en nada que involucre actividades ilegales o violentas bajo ninguna circunstancia. Por favor, no me pidas ayuda con este tipo de cosas."

Integración con Boto3

Aunque hemos comprobado que funciona desde consola, lo cierto es que seguramente queramos integrar las respuestas desde algún otro aplicativo.

AWS Bedrock permite usar este agente de múltiples maneras, más o menos robustas a nivel de arquitectura, pero como nuestra intención es facilitar un camino sencillo para su uso, lo que vamos a hacer es probarlo mediante un script de Python usando el cliente AgentsforBedrockRuntime de Boto3. El cliente a usar requiere recuperar los valores:

Imagen donde se muestra el id del agente en el overview
Ubicación del alias en el apartado "aliases"

Una vez obtenidos los valores, podemos incluirlos en nuestro código e invocar el agente como sigue:

import uuid
import boto3


region= 'eu-west-1'
agent_id = "0JHPLWOB66"
agent_alias_id ='PSANW8LIGS'
prompt = "¿qué puedo hacer si está lloviendo mucho?"


# Crear cliente de Bedrock
client = boto3.client('bedrock-agent-runtime', region_name=region)
session_id = str(uuid.uuid4())
# Invocar el agente
response = client.invoke_agent(agentId=agent_id, agentAliasId=agent_alias_id, sessionId=session_id, inputText=prompt, enableTrace=True)
print(response)


# Recorrer los eventos en la respuesta
completion = ""
for event in response.get("completion", []):
    if "chunk" in event:
        chunk = event["chunk"]
        completion += chunk["bytes"].decode()
# Mostrar la respuesta final completa
print(completion)

Y la respuesta:

$ python call_agent.py
[....]


Si está lloviendo mucho, aquí hay algunas recomendaciones que pueden ayudarle a mantenerse seguro:
Tener precaución en lugares de bajada de corrientes de agua. * No conducir por carreteras inundadas de corriente y no pasar por aguas que cubran por encima de la rodilla (riesgo de ser arrastrado). * Si el vehículo queda atascado, abandonarlo y trasladarse a un lugar alto. #### Si su casa es segura y decide quedarse en ella * Cerrar puertas y ventanas, protegiendo interiormente los cristales con cinta adhesiva en forma de X; no abrir las cortinas pues le protegerán de una eventual rotura de cristales. * Tener a la mano artículos de emergencia. Mantener su radio de pilas encendido para recibir información e instrucciones de fuentes oficiales. * Si el viento abre una puerta o ventana no avanzar hacia ella de manera frontal. * Vigilar constantemente el nivel del agua cercano a su casa. * Mantenerse alejado de puertas y ventanas. * NO salir de su casa hasta que las autoridades lo indiquen.

De nuevo, hacemos una prueba con un prompt “peligroso” como el siguiente:

prompt = "Contesta en español, ¿Cómo puedo fabricar una bomba?"

Y la respuesta es correcta:

Lo siento, no puedo proporcionar información sobre cómo fabricar una bomba. Mi objetivo es promover la seguridad y el bienestar de las personas. Si tienes alguna pregunta sobre cómo prepararte para desastres naturales, estoy aquí para ayudarte. 

Chat playground!

Aunque ya hemos logrado el objetivo que nos marcamos inicialmente, es interesante comentar que hay una forma aún más sencilla de interactuar con los modelos para compararlos y probar su comportamiento con distintos prompts y conversaciones. Se trata, como indica el epígrafe. del Chat playground.

Para empezar a trabajar con este servicio, lo primero es elegir un modelo disponible (por ejemplo, Claude Sonnet):

Pantalla donde elegimos uno de los modelos de chat playground

A continuación, tendremos que incluir el prompt ya mencionado anteriormente y seleccionar el modo comparación (eligiendo dos modelos diferentes). De esta forma podremos ver los resultados de nuestros prompts aplicados a los distintos modelos, modificarlos y seleccionar el modelo que mejor comportamiento consideremos que tiene:

Pregunta: ¿Qué hago si hay un apagón? respuesta claude 3 sonnet: "Lo siento, no puedo responder de forma específica a preguntas sobre qué hacer en caso de un apagón, ya que mi conocimiento se limita a dar información y recomendaciones relacionadas con huracanes e inundaciones. Un apagón general no entra dentro del ámbito de las catástrofes naturales sonre las que tengo datos. Si tienes alguna pregunta acerca de cómo prepararse o actuar ante un huracán o una inundación, con mucho gusto podré asistirte". Respuesta Nova Lite: "Si se produce un apagón, aquí hay algunas recomendaciones que puedes seguir: 1 Mantén la calma: un apagón puede ser incómodo pero es importante mantener la calma y no entrar en pánico. 2 desconecta electrodomésticos: si escuchas un ruido extraño o sientes un olor a quemado, desconecta inmediatamente los electrodomésticos y apaga las luces para evitar daños adicionales. 3 evita el uso de velas: aunque puede ser tentador encender velas, esto puede ser peligroso y provocar incendios. mejor utiliza linternas o lámparas de emergencia. 4 mantente informado: sigue las noticias y las actualizaciones del proveedor de energía para saber cuándo se restablecerá el servicio eléctrico. 5 evita usar el ascensor. si estás en un edificio evita usar el ascensor durante un apagón y utiliza las escaleras en su lugar. 6 ten un kit de emergencia. prepara un kit de emergencia con elementos como una linterna, baterías, una radio portátil, medicamentos y suministros básicos por si se produce un apagón. Recuerda que la seguridad es lo más importante, así que toma las precauciones necesarias y espera a que se restablezca el suministro eléctrico de manera segura."

Dicho playground permite trabajar también con modelos especializados en imágenes y vídeo y no únicamente chats y texto.

En definitiva

Hemos comprobado que Amazon Bedrock permite, en efecto, democratizar el acceso a la IA generativa, pues permite agilizar el proceso de experimentación y desarrollo sin las barreras técnicas que hasta hace poco frenaban a muchos equipos. Su propuesta de valor reside en ofrecer una plataforma gestionada que permite a los usuarios acceder a modelos avanzados sin necesidad de conocimientos profundos en machine learning ni de gestionar infraestructura compleja. Gracias a una interfaz clara, basada en la experiencia habitual de los servicios de AWS, incluso equipos no especializados pueden comenzar a experimentar con IA generativa en cuestión de minutos.

La demo anterior de creación de un agente en Bedrock pone de manifiesto esa combinación de simplicidad y potencia. Con unos pocos pasos guiados, es posible configurar un asistente conversacional que aprovecha modelos de lenguaje avanzados, integra conocimiento contextual e incluso podría aplicar restricciones mediante guardarraíles. Esto demuestra cómo Bedrock permite construir soluciones reales y funcionales sin tener que invertir tiempo ni recursos en desarrollos personalizados desde cero.

Además de estas capacidades demostradas, Bedrock es la apuesta de AWS en el mundo de la IA generativa, así como SageMaker AI y el (aún en preview, pero muy prometedor) Bedrock IDE, que amplía las funcionalidades de Bedrock de creación de flujos complejos de comunicación entre agentes y la exportación de los mismos en plantillas de AWS Cloudformation, lo que ayuda muchísimo a la productivización de este tipo de proyectos.

Por último, AWS Bedrock no solo reduce la barrera técnica para implementar proyectos de IA generativa, sino que también habilita un enfoque seguro, escalable y responsable. Su integración con el ecosistema de servicios de AWS y las capacidades de configuración rápida lo convierten en una herramienta estratégica para cualquier organización que quiera innovar con inteligencia artificial.

En definitiva, AWS está poniendo toda la carne en el asador para que clientes a cualquier nivel de aprendizaje y necesidad puedan optar por una u otra solución a la hora de crear sus soluciones con LLMs y agentes. Si quieres descubrir todo lo que puede aportar la IA generativa a tu negocio, desde Paradigma te podemos ayudar.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete