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 anthropicPaso 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 historyAñ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]}")
continueStreaming 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 finalManejo 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.