Construyendo un asistente genAI de WhatsApp con Amazon Bedrock y Claude 3

Construyendo un asistente genAI de WhatsApp con Amazon Bedrock y Claude 3

El blog enseña a desplegar una aplicación de WhatsApp en Amazon Bedrock para chatear en cualquier idioma con un LLM. Envía notas de voz, obtén transcripciones y conversa con ellas. Anteriormente, utilizabas Claude 1 o 2. Ahora, aprovecha Claude 3 para conversaciones y contenido visual como imágenes, gráficos y diagramas.

En el blog anterior “Construyendo un asistente genAI de WhatsApp con Amazon Bedrock“, aprendiste cómo desplegar una aplicación de WhatsApp que te permite chatear en cualquier idioma utilizando Anthropic Claude 1 o 2 como modelo de lenguaje grande (LLM) en Amazon Bedrock. Puedes enviar notas de voz y recibir transcripciones, e incluso, si lo prefieres, puedes dialogar con el modelo usando notas de voz.

En este nuevo blog, te mostraré cómo aprovechar las capacidades mejoradas de Anthropic Claude 3 para manejar conversaciones de manera más efectiva mientras procesas de forma transparente contenido visual como fotos, gráficos, gráficas y diagramas técnicos.

Ejemplo de Claude 3 manejando contenido visual

Claude 3 maneja contenido visual: Describe un diagrama.

Claude 3 maneja el contenido visual: entrega un Json de una nota manuscrita.

Ejemplo de generación de texto de Claude 3

Ejemplo de generación de texto de Claude 3: Solicitud para explicar cómo crear una aplicación compleja.

Ejemplo de generación de texto de Claude 3: respuesta sobre cómo construir una aplicación compleja. (parte 1)

Ejemplo de generación de texto Claude 3: respuesta sobre cómo construir una aplicación compleja (parte 2).
🔐 Sus datos permanecen almacenados de forma segura dentro de su cuenta de AWS y nunca se comparten ni se utilizan para fines de entrenamiento de modelos, garantizando la privacidad completa. Sin embargo, es recomendable evitar compartir información personal sensible, ya que no se puede garantizar la seguridad de los datos de WhatsApp.

Nivel de AWS: 300

Requisitos previos:

Cuenta de AWS
Conocimientos básicos de Python

💰 Costo para completar:

Precios de Amazon Bedrock
Precios de Amazon Lambda
Precios de Amazon Transcribe
Precios de Amazon DynamoDB
Precios de Amazon APIGateway
Precios de Whatsapp

Qué diferencia la llamada API de Claude 3 de sus versiones anteriores

En versiones anteriores, se utilizaba Create a Text Completion (ahora API heredada). Para una generación de respuestas adecuada, necesitará formatear su prompt utilizando turnos conversacionales alternados nnHuman: y nnAssistant:.

Así es como se ve el código con Amazon Bedrock:

import boto3
import json
bedrock = boto3.client(service_name=bedrock-runtime)

body = json.dumps({
prompt: nnHuman:explain black holes to 8th gradersnnAssistant:,
max_tokens_to_sample: 300,
temperature: 0.1,
top_p: 0.9,
})

modelId = anthropic.claude-v2
accept = application/json
contentType = application/json

response = bedrock.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)

response_body = json.loads(response.get(body).read())
# text
print(response_body.get(completion))

Con Anthropic Claude 3, la conversación se maneja a través de The Messages API: messages=[{“role”: “user”, “content”: content}].

Cada mensaje de entrada debe ser un objeto con un role (usuario o asistente) y un content. El contenido puede ser una cadena única o una matriz de bloques de contenido, cada uno con su propio type designado (texto o imagen).

type igual a text:

{“role”: “user”, “content”: [{“type”: “text”, “text”: “Hola, Claude”}]}

type igual a image:

{“role”: “user”, “content”: [
{
“type”: “image”,
“source”: {
“type”: “base64”,
“media_type”: “image/jpeg”,
“data”: “/9j/4AAQSkZJRg…”,
}
},
{“type”: “text”, “text”: “¿Qué hay en esta imagen?”}
]}

🖼️ Anthropic actualmente admite el tipo de fuente base64 para imágenes, y los tipos de medios image/jpeg, image/png, image/gif e image/webp. Consulta más ejemplos de entrada.

import boto3
import json
bedrock = boto3.client(service_name=bedrock-runtime)

modelId = anthropic.claude-3-sonnet-20240229-v1:0
anthropic_version = bedrock-2023-05-31
accept = application/json
contentType = application/json

with open(image_path, rb) as image_file:
content_image = base64.b64encode(image_file.read()).decode(utf8)
content = [
{type: image, source: {type: base64,
media_type: image/jpeg, data: content_image}},
{type:text,text:Hola Claude}
]
body = {
system: Eres un Asistente de IA, siempre responde en el idioma original del texto del usuario.,
messages:content,anthropic_version: anthropic_version,max_tokens:max_tokens}

response = bedrock.invoke_model(body=json.dumps(body), modelId=model_id, accept=accept, contentType=contentType)

response_body = json.loads(response.get(body).read())

Esta API de Mensajes nos permite agregar contexto o instrucciones al modelo a través de un System Prompt (system).

Así es como se ve el código con Amazon Bedrock:

import boto3
import json
bedrock = boto3.client(service_name=bedrock-runtime)

modelId = anthropic.claude-3-sonnet-20240229-v1:0
anthropic_version = bedrock-2023-05-31
accept = application/json

contentType = application/json

with open(image_path, rb) as image_file:
content_image = base64.b64encode(image_file.read()).decode(utf8)
content = [
{type: image, source: {type: base64,
media_type: image/jpeg, data: content_image}},
{type: text, text: text}
]
body = {
system: Eres un Asistente de IA, siempre responde en el idioma original del texto del usuario.,
messages: content, anthropic_version: anthropic_version, max_tokens: max_tokens}

response = bedrock.invoke_model(body=json.dumps(body), modelId=model_id, accept=accept, contentType=contentType)

response_body = json.loads(response.get(body).read())

Cómo funciona la aplicación

Desglosemos los componentes clave:

El sistema recibe entradas de usuario en forma de texto, voz o imágenes a través de WhatsApp.

Se realiza el procesamiento de mensajes según el formato de entrada (texto, voz o imagen).

Para el procesamiento de texto, la función Lambda process_stream envía el texto del mensaje a otra Función Lambda que invoca un Modelo de Lenguaje Grande (LLM) a través de una llamada a la API de Amazon Bedrock. La respuesta del LLM se envía luego utilizando la función Lambda whatsapp_out, que la entrega al usuario a través de WhatsApp.

Para el procesamiento de voz, se activa la función Lambda audio_job_transcriptor. Esta función Lambda descarga el audio de WhatsApp desde el enlace en el mensaje a un bucket de Amazon S3, utilizando la autenticación de Token de WhatsApp. Luego convierte el audio a texto utilizando la API start_transcription_job de Amazon Transcribe, que deja el archivo de transcripción en un bucket de salida de Amazon S3. La función Lambda transcriber_done se activa mediante una notificación de evento de Amazon S3 una vez que se completa el Trabajo de Transcripción. Extrae la transcripción del bucket de salida de S3 y la envía a la función Lambda whatsapp_out para responder a WhatsApp.

Para el procesamiento de imágenes, invoca a Claude 3 a través de una llamada a la API de Amazon Bedrock.

El sistema puede acceder a bases de datos como Amazon DynamoDB para recuperar información contextual como el historial de mensajes y las sesiones de usuario.

Después del procesamiento, el sistema genera una respuesta que se envía de vuelta al usuario a través de WhatsApp.

✅ Tienes la opción de descomentar el código en la función Lambda transcriber_done y enviar la transcripción de la nota de voz a la función Lambda agent_text_v3.

El siguiente prompt del sistema se utiliza:

Lo siguiente es una conversación amistosa entre un humano y una IA.
La IA es habladora y proporciona muchos detalles específicos de su contexto.
Si la IA no conoce la respuesta a una pregunta, dice con sinceridad que no lo sabe.
Responde siempre en el idioma original del usuario.

💡 La frase “Siempre responder en el idioma original del usuario” asegura que siempre responda en el idioma original y la capacidad multilingüe es proporcionada por Anthropic Claude.

🚀 ¡Construyamos!

Sigue los pasos en https://github.com/build-on-aws/building-gen-ai-whatsapp-assistant-with-amazon-bedrock-and-python

👾 ¡Disfruta de la aplicación!

Sigue los pasos en build-on-aws/building-gen-ai-whatsapp-assistant-with-amazon-bedrock-and-python:

✅ Chatea y haz preguntas de seguimiento. Prueba tus habilidades multilingües.

✅ Envía y transcribe notas de voz. Prueba las capacidades de la aplicación para transcribir múltiples idiomas.

✅ Envía fotos y prueba las capacidades de la aplicación para describir e identificar lo que hay en las imágenes. Juega con los prompts.

🚀 Sigue probando la aplicación, juega con el prompt y ajústalo a tus necesidades.

🧹 ¡Limpia la casa!:

Si terminas de probar y quieres limpiar la aplicación, solo tienes que seguir estos dos pasos:

Elimina los archivos del bucket de Amazon S3 creado en el despliegue.

Ejecuta este comando en tu terminal:

cdk destroy

Conclusión:

En esta publicación, exploraste cómo construir una aplicación de WhatsApp impulsada por el modelo de lenguaje Claude 3 de Anthropic utilizando Amazon Bedrock. Aprovechaste la nueva API de Mensajes para manejar conversaciones e incorporar contenido visual como imágenes, gráficos y diagramas de manera fluida.

Con las capacidades avanzadas de Claude 3, puedes mantener conversaciones naturales y conscientes del contexto, comprendiendo y respondiendo tanto a entradas de texto como visuales. Ya sea que estés practicando un nuevo idioma, transcribiendo notas de voz o buscando información de diagramas técnicos, este asistente de WhatsApp está listo para ayudarte.

El poder de los grandes modelos de lenguaje combinado con la escalabilidad y facilidad de despliegue que ofrece Amazon Bedrock abre emocionantes posibilidades para construir interfaces conversacionales inteligentes y multimodales.

Si estás interesado en explorar otros casos de uso o profundizar en los detalles técnicos, asegúrate de revisar el repositorio AWS Samples para más proyectos y ejemplos de código. Además, la documentación de Anthropic y Amazon Bedrock son excelentes recursos para mantenerte actualizado con las últimas características y mejores prácticas.

Te animamos a experimentar con este chatbot de WhatsApp y compartir tus comentarios o ideas para mejoras en los comentarios a continuación. ¡Feliz codeo!

🚀 Algunos enlaces para que continúes aprendiendo y construyendo:

Comenzar con Amazon Connect

Elevating Customer Support With a Whatsapp Assistant.

RAG with history memory agents using Amazon Bedrock, Amazon Kendra, Amazon Lambda Function, and Amazon DynamoDB

How To Choose Your LLM

Working With Your Live Data Using LangChain

Leave a Reply

Your email address will not be published. Required fields are marked *