Ir al contenido

IDEAS PRÁCTICAS · ASIMOV INGENIERÍA

3 Primeros pasos para crear un agente de IA básico con Amazon Bedrock usando Python

Guía completa y práctica para iniciar el desarrollo de un agente de IA con Amazon Bedrock, incluye configuración, ejemplos de código en Python, buenas prácticas, seguridad y comparativas con otras plataformas.

Imagen ilustrativa · Growtika / Unsplash.

Table of contents

No titles in the blog post

En este artículo aprenderás a configurar tu entorno, conectar con Bedrock mediante Python y diseñar un agente sencillo capaz de responder preguntas, con ejemplos de código, buenas prácticas y comparativas con otras soluciones del mercado.

Equipos y cableado en un rack de servidores
Imagen ilustrativa · Kevin Ache / Unsplash.

1. ¿Qué es Amazon Bedrock?

Amazon Bedrock es el servicio gestionado de AWS que permite acceder a modelos fundacionales (Foundation Models) de proveedores como Anthropic, AI21, Stability AI y Amazon Titan. Ofrece una API unificada, control de acceso granular y una capa de prompt‑tuning que simplifica la creación de agentes de IA sin gestionar infraestructura.

  • Modelo bajo demanda: paga por token consumido.
  • Seguridad integrada: cifrado en reposo y en tránsito, IAM fine‑grained.
  • Escalabilidad automática: el backend de AWS dimensiona los recursos según la carga.

2. Prerrequisitos técnicos

Antes de escribir código, verifica lo siguiente:

  1. Cuenta AWS con AmazonBedrockFullAccess (o política personalizada).
  2. Python >= 3.9 y pip actualizado.
  3. Instalación del SDK boto3 y botocore (versión 1.34+).
  4. Configuración de credenciales mediante aws configure o variables de entorno (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION).

Opcional pero recomendado: crear un virtual environment para aislar dependencias.

3. Configuración del entorno Python

# Crear y activar venv
python -m venv bedrock‑env
source bedrock‑env/bin/activate  # Linux/macOS
# Windows: bedrock‑env\Scripts\activate

# Instalar dependencias
pip install --upgrade pip
pip install boto3 botocore tqdm

4. Conexión básica a Bedrock

El siguiente fragmento muestra cómo inicializar el cliente y enviar un prompt al modelo anthropic.claude-v2 (uno de los modelos más versátiles).

import boto3, json

# Cliente Bedrock (región us-east-1 por ejemplo)
bedrock = boto3.client(
    service_name='bedrock-runtime',
    region_name='us-east-1'  # Cambia según tu región
)

prompt = "Responde en una frase: ¿Cuál es la capital de Japón?"
payload = {
    "prompt": prompt,
    "max_tokens_to_sample": 50,
    "temperature": 0.0,
    "top_p": 0.9,
    "stop_sequences": []
}

response = bedrock.invoke_model(
    modelId='anthropic.claude-v2',
    body=json.dumps(payload)
)
print(json.loads(response['body'].read())['completion'])

Este ejemplo es la base de cualquier agente: envías un prompt y recibes una respuesta estructurada.

5. Arquitectura mínima de un agente de IA

Componente de entrada

  • Interfaz de usuario (CLI, API REST, Slack, etc.)
  • Validación y sanitización de texto
  • Enriquecimiento opcional (contexto, historial)

Motor de inferencia (Bedrock)

  • Selección de modelo (Claude, Titan, etc.)
  • Parámetros de generación: temperature, top_p, max_tokens
  • Gestión de "prompt‑engineering" para guiar al modelo

Componente de salida

  • Formateo (texto plano, JSON, markdown)
  • Post‑procesamiento (filtrado de contenido, detección de toxicidad)
  • Entrega al cliente (HTTP response, mensaje de chat, etc.)

Observabilidad y control

  • Logs estructurados en CloudWatch
  • Métricas de latencia y tokens consumidos
  • Políticas de IAM y etiquetas de recursos para gobernanza

6. Implementación de un agente conversacional simple

Este script muestra un bucle REPL (Read‑Eval‑Print Loop) que mantiene el historial de la conversación y aplica prompt‑chaining para dar contexto al modelo.

import boto3, json, os

bedrock = boto3.client('bedrock-runtime', region_name=os.getenv('AWS_DEFAULT_REGION', 'us-east-1'))
model_id = 'anthropic.claude-v2'

# Historial limitado a los últimos 5 intercambios para evitar límite de tokens
history = []
MAX_TURNS = 5

def build_prompt(user_msg):
    # Construye un prompt con historial
    context = "".join([f"Human: {h['human']}\nAssistant: {h['assistant']}\n" for h in history])
    return f"{context}Human: {user_msg}\nAssistant:"  # El modelo completará la respuesta

while True:
    user_input = input('\n\nYou: ')
    if user_input.lower() in ('exit', 'quit'):
        break

    prompt = build_prompt(user_input)
    payload = {
        "prompt": prompt,
        "max_tokens_to_sample": 300,
        "temperature": 0.7,
        "top_p": 0.9,
        "stop_sequences": ["\nHuman:"]
    }
    response = bedrock.invoke_model(modelId=model_id, body=json.dumps(payload))
    answer = json.loads(response['body'].read())['completion'].strip()
    print(f"Assistant: {answer}")

    # Actualizar historial
    history.append({"human": user_input, "assistant": answer})
    if len(history) > MAX_TURNS:
        history.pop(0)

Consejo de rendimiento: ajusta max_tokens_to_sample y temperature según la naturaleza de la tarea (informativa vs creativa).

7. Buenas prácticas de seguridad y cumplimiento

  • Principio de menor privilegio: otorga a la función Lambda o EC2 solo bedrock:InvokeModel para el modelo específico.
  • Cifrado de datos sensibles: utiliza AWS KMS para encriptar cualquier dato de cliente antes de enviarlo a Bedrock.
  • Filtrado de salida: integra Amazon GuardDuty o Amazon Comprehend para detectar contenido ofensivo o PII.
  • Auditoría: habilita CloudTrail para registrar cada InvokeModel con el ID de solicitud y número de tokens.

8. Solución de problemas (troubleshooting)

ProblemaCausa típicaAcción correctiva
403 ForbiddenPolítica IAM insuficienteAñadir bedrock:InvokeModel al rol o usuario
TimeoutLatencia de red o modelo sobrecargadoAumentar read_timeout en cliente Boto3 y habilitar retries
Respuesta truncadaValor max_tokens_to_sample muy bajoIncrementar el límite según el uso previsto
Contenido inesperado (hallucinations)Prompt poco estructuradoAplicar técnicas de prompt‑engineering (instrucciones claras, ejemplos)

9. Comparativa rápida con otras plataformas LLM

Amazon Bedrock

  • Integración nativa con IAM, CloudWatch, KMS.
  • Facturación por token, sin cargos de infraestructura.
  • Amplio catálogo (Claude, Titan, AI21, Stability).

OpenAI (ChatGPT, GPT‑4)

  • API robusta, pero gestión de credenciales externa a AWS.
  • Modelos de última generación, pero costos por token más altos.
  • Menor integración directa con servicios AWS.

Azure OpenAI

  • Integrado con Azure AD, buen para entornos híbridos.
  • Opciones de aislamiento de red (VNet).
  • Modelo limitado a los que Azure licencia.

Google Vertex AI PaLM

  • Fuerte en razonamiento y traducción.
  • Requiere configuración de pipelines de ML más compleja.
  • Costos variables y menos control de políticas de datos.

10. Escalabilidad y performance

Para cargas en producción, considera:

  • Lambda + API Gateway: latencia < 300 ms para respuestas breves, ideal para micro‑servicios.
  • ECS/EKS: contenedores con aws-sdk y asyncio para procesamiento concurrente.
  • Batch inference: agrupa varias peticiones en un solo invoke_model usando prompt concatenation para reducir tokens.

Monitorea InvocationCount y TokensConsumed en CloudWatch para detectar picos y ajustar presupuestos.

© 2025 TechInsights Blog – Todos los derechos reservados.