DEV Community

Cover image for Potenciando Aplicaciones de IA con AWS Bedrock y Streamlit
Fernando Silva T
Fernando Silva T

Posted on

Potenciando Aplicaciones de IA con AWS Bedrock y Streamlit

Este blog detalla cómo construir una aplicación de inteligencia artificial utilizando AWS Bedrock y Streamlit, en la que puedes realizar tareas como el procesamiento de lenguaje natural y la generación de imágenes. Este proyecto se basa en AWS Bedrock para interactuar con modelos de IA avanzados como Claude 3 y modelos de generación de imágenes como Stability AI.

1. Configuración de AWS Credentials

Para que tu aplicación de Streamlit se conecte a los servicios de AWS, necesitas configurar correctamente las credenciales de AWS. A continuación te explico cómo obtener y configurar las claves de acceso necesarias: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, y AWS_DEFAULT_REGION.

Paso a Paso para Obtener las Credenciales de AWS:

console

  • En el menú superior derecho, haz clic en tu nombre de usuario y selecciona "My Security Credentials".

My Security Credentials

  • En la sección "Access keys (access key ID and secret access key)", haz clic en "Create New Access Key".

Create New Access Key

  • Se generará una nueva clave de acceso. Descarga el archivo de claves, ya que solo podrás ver la AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY una vez.

clave de acceso

  • Asegúrate de guardar esta información en un lugar seguro.

Para completar la configuración de las credenciales, deberás colocar las variables obtenidas en un archivo .env, de manera que tu aplicación de Python pueda acceder a ellas sin exponer las claves directamente en el código.

Ejemplo de archivo .env:

AWS_ACCESS_KEY_ID=tu_aws_access_key_id
AWS_SECRET_ACCESS_KEY=tu_aws_secret_access_key
AWS_DEFAULT_REGION=us-west-2
Enter fullscreen mode Exit fullscreen mode

2. Explicación del Código

El código de esta aplicación utiliza varios servicios y librerías importantes para interactuar con AWS Bedrock y generar imágenes utilizando IA. A continuación explicamos las partes más esenciales del código:

2.1 Cargar las Variables de Entorno
from dotenv import load_dotenv

# Cargar las variables de entorno desde un archivo .env
load_dotenv()
Enter fullscreen mode Exit fullscreen mode

La librería dotenv permite cargar las credenciales desde un archivo .env, protegiendo las claves de acceso.

2.2 Conexión a AWS Bedrock
import boto3

# Crear un cliente para el servicio Bedrock de AWS
aws_bedrock = boto3.client('bedrock-runtime', 
    aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"),
    aws_secret_access_key=os.getenv("AWS_SECRET_ACCESS_KEY"),
    region_name=os.getenv("AWS_DEFAULT_REGION")
)
Enter fullscreen mode Exit fullscreen mode

Con boto3, la biblioteca oficial de AWS para Python, nos conectamos al servicio de Bedrock de AWS, que proporciona acceso a modelos como Claude 3 para procesamiento de texto y Stable Diffusion XL para generación de imágenes.

2.3 Generación de Imágenes
def generate_image(prompt, style):
    request_payload = json.dumps({
        "text_prompts": [{"text": f"{style} {prompt}"}],
        "cfg_scale": 9,
        "steps": 50,
    })
    model_response = aws_bedrock.invoke_model(body=request_payload, modelId=image_model_id)
    return decode_image_from_response(model_response)
Enter fullscreen mode Exit fullscreen mode

Esta función envía un prompt al modelo de generación de imágenes de AWS Bedrock y obtiene una imagen como respuesta, la cual luego se decodifica y se muestra al usuario.

2.4 Análisis de Imágenes
def analizar_imagen(ruta_imagen, texto=""):
    """Invoca Claude 3 para el análisis de imágenes y devuelve un texto normal."""
    tipo_archivo, imagen_base64 = codificador_base64_imagen(ruta_imagen)
    prompt_sistema = "Describe cada detalle que puedas sobre esta imagen, sé extremadamente minucioso."

    prompt = {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 1000,
        "temperature": 0.5,
        "system": prompt_sistema,
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "image", "source": {"type": "base64", "media_type": tipo_archivo, "data": imagen_base64}},
                    {"type": "text", "text": texto or "Usa el prompt del sistema"}
                ]
            }
        ]
    }

    respuesta = aws_bedrock.invoke_model(
        body=json.dumps(prompt), 
        modelId="anthropic.claude-3-sonnet-20240229-v1:0",
        accept="application/json", 
        contentType="application/json"
    )

    salida_llm = json.loads(respuesta.get('body').read())['content'][0]['text']
    return salida_llm  # Devuelve el texto normal
Enter fullscreen mode Exit fullscreen mode

En este bloque de código, la función analizar_imagen utiliza Claude 3 (un modelo de lenguaje de AWS) para analizar una imagen y devolver una descripción detallada de su contenido.

3. Configuración de Streamlit

Streamlit facilita la creación de interfaces web interactivas con Python. En este caso, hemos configurado un panel lateral para elegir entre diferentes tareas de IA. Dependiendo de la opción seleccionada, el usuario puede generar imágenes, realizar análisis de texto o más.

import streamlit as st

st.set_page_config(page_title="Potenciando Aplicaciones de IA con AWS Bedrock y Streamlit", page_icon=icon, layout="wide")
st.sidebar.title("Menú de Opciones")
option = st.sidebar.selectbox("Selecciona la tarea de IA", ["Inicio","Procesamiento de Lenguaje", "Generación de imágenes", "Descripción de Imágenes"])

if option == "Inicio":
    st.image(icon, width=50, output_format="SVG")
    st.title("Potenciando Aplicaciones de IA con AWS Bedrock y Streamlit")
    st.markdown(
        """
        Esta aplicación web permite interactuar con modelos de inteligencia artificial para realizar tareas de procesamiento de lenguaje natural y generación de imágenes.
        """
    )
Enter fullscreen mode Exit fullscreen mode

Este fragmento configura el título y las opciones de la interfaz, permitiendo al usuario interactuar con las distintas funcionalidades de la aplicación.

Mi Proyecto

He trabajado en este proyecto como una forma de integrar poderosos servicios de AWS con Streamlit para crear aplicaciones de inteligencia artificial accesibles y fáciles de usar. Si deseas ver el código fuente o probar la aplicación en vivo, puedes hacerlo a través del siguiente enlace:

Ver el proyecto en GitHub

My proyecto

¿Qué puedes encontrar en el proyecto?

  • Generación de imágenes utilizando AWS Bedrock
  • Análisis de imágenes usando el modelo Claude 3 de AWS.
  • Ejemplo de cómo integrar Streamlit con los servicios de AWS.
  • Instrucciones detalladas sobre cómo configurar el entorno de desarrollo.

No dudes en explorar el código y hacer preguntas o sugerencias sobre cómo mejorar la aplicación. ¡Estaré encantado de recibir tu feedback!

Conclusión

Este proyecto demuestra cómo utilizar los servicios de AWS Bedrock para potenciar aplicaciones de inteligencia artificial con Streamlit. La configuración correcta de las credenciales de AWS es crucial para garantizar el acceso a los servicios de AWS, y con las herramientas de Python como boto3 y langchain_aws, puedes integrar fácilmente modelos avanzados de procesamiento de lenguaje y generación de imágenes.

Top comments (0)