Creando tu Propio Chatbot con Claude

Los chatbots con IA son una de las aplicaciones más populares de los modelos de lenguaje. En este tutorial crearemos un chatbot funcional usando la API de Claude.

Si aún no conoces la API de Claude, te recomiendo empezar con nuestro tutorial completo de Claude API en español.

Lo Que Vamos a Construir

  • Chatbot de consola (Python)
  • Chatbot web simple (JavaScript + HTML)
  • Manejo de contexto y memoria
  • Personalidad configurable

Chatbot Básico en Python

Paso 1: Instalación

pip install anthropic

Paso 2: Código Básico

import anthropic

client = anthropic.Anthropic(api_key="tu-api-key")

def chat(user_message, history=[]):
    history.append({"role": "user", "content": user_message})
    
    response = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=1024,
        system="Eres un asistente amigable y útil.",
        messages=history
    )
    
    assistant_message = response.content[0].text
    history.append({"role": "assistant", "content": assistant_message})
    
    return assistant_message, history

# Uso
history = []
while True:
    user_input = input("Tú: ")
    if user_input.lower() == 'salir':
        break
    response, history = chat(user_input, history)
    print(f"Bot: {response}")

Añadiendo Personalidad

El system prompt define la personalidad del bot:

SYSTEM_PROMPT = """
Eres "Asistente Code", un experto en programación.

Tu personalidad:
- Amigable pero profesional
- Explicas con ejemplos de código
- Si no sabes algo, lo admites
- Respondes en español

Tu expertise:
- Python, JavaScript, TypeScript
- APIs REST
- Bases de datos
- DevOps básico
"""

Chatbot Web con JavaScript

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Chatbot Claude</title>
    <style>
        #chat { height: 400px; overflow-y: auto; border: 1px solid #ccc; padding: 10px; }
        .user { color: blue; }
        .bot { color: green; }
    </style>
</head>
<body>
    <div id="chat"></div>
    <input type="text" id="input" placeholder="Escribe tu mensaje...">
    <button onclick="sendMessage()">Enviar</button>
    <script src="chat.js"></script>
</body>
</html>

JavaScript (chat.js)

const API_KEY = 'tu-api-key';
let history = [];

async function sendMessage() {
    const input = document.getElementById('input');
    const chat = document.getElementById('chat');
    const message = input.value;
    input.value = '';
    
    chat.innerHTML += `<p class="user">Tú: ${message}</p>`;
    
    history.push({ role: 'user', content: message });
    
    const response = await fetch('https://api.anthropic.com/v1/messages', {
        method: 'POST',
        headers: {
            'x-api-key': API_KEY,
            'anthropic-version': '2023-06-01',
            'content-type': 'application/json'
        },
        body: JSON.stringify({
            model: 'claude-3-5-sonnet-20241022',
            max_tokens: 1024,
            messages: history
        })
    });
    
    const data = await response.json();
    const botMessage = data.content[0].text;
    
    history.push({ role: 'assistant', content: botMessage });
    chat.innerHTML += `<p class="bot">Bot: ${botMessage}</p>`;
    chat.scrollTop = chat.scrollHeight;
}

Nota: En producción, NUNCA expongas tu API key en el frontend. Usa un backend.

Chatbot con Memoria Persistente

Para que el bot recuerde conversaciones pasadas:

import json
import os

HISTORY_FILE = 'chat_history.json'

def load_history():
    if os.path.exists(HISTORY_FILE):
        with open(HISTORY_FILE, 'r') as f:
            return json.load(f)
    return []

def save_history(history):
    with open(HISTORY_FILE, 'w') as f:
        json.dump(history, f)

# Uso
history = load_history()
response, history = chat("Hola", history)
save_history(history)

Limitando el Contexto

Para evitar exceder límites de tokens y controlar costos de la API:

def trim_history(history, max_messages=20):
    if len(history) > max_messages:
        # Mantén los últimos N mensajes
        return history[-max_messages:]
    return history

Añadiendo Comandos Especiales

def process_command(message):
    if message.startswith('/clear'):
        return [], "Historial borrado."
    if message.startswith('/help'):
        return None, "Comandos: /clear, /help, /info"
    if message.startswith('/info'):
        return None, "Bot creado con Claude API v2026"
    return None, None

# En el loop principal
result = process_command(user_input)
if result[1]:
    if result[0] is not None:
        history = result[0]
    print(f"Bot: {result[1]}")
    continue

Streaming de Respuestas

Para respuestas más interactivas:

with client.messages.stream(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    messages=history
) as stream:
    print("Bot: ", end="")
    full_response = ""
    for text in stream.text_stream:
        print(text, end="", flush=True)
        full_response += text
    print()  # Nueva línea al final

Manejo de Errores

Es importante manejar errores correctamente. Consulta nuestra guía de errores comunes en APIs de IA para más detalles.

import anthropic

try:
    response = client.messages.create(...)
except anthropic.RateLimitError:
    print("Demasiadas peticiones. Espera un momento.")
except anthropic.AuthenticationError:
    print("API key inválida.")
except anthropic.APIError as e:
    print(f"Error de API: {e}")

Conclusión

Ya tienes las bases para crear chatbots con Claude. Desde aquí puedes expandir con:

  • Integración con bases de datos
  • Conexión a APIs externas (clima, noticias, etc.)
  • Interfaz gráfica con React o Vue
  • Despliegue en servidor

El límite es tu imaginación. Si quieres llevar tus habilidades al siguiente nivel, aprende sobre Claude Code y cómo puede acelerar tu desarrollo. Y no te pierdas el curso de Claude Code para dominar todas estas herramientas.