Como Crear una Inteligencia Artificial desde Cero: Tutorial Python Paso a Paso [2026]
Si, puedes crear una inteligencia artificial desde cero hoy mismo con Python, sin experiencia previa en IA y sin una GPU de 2.000 euros. En este tutorial vas a construir 3 proyectos reales: una red neuronal que clasifica digitos con un 97% de precision, un chatbot conversacional con memoria de contexto, y un agente IA autonomo que busca informacion y la resume. Todo el codigo es funcional, esta probado en marzo de 2026, y puedes ejecutarlo gratis en Google Colab o en tu ordenador.
¿Quieres dominar la IA? En La Escuela de IA compartimos tutoriales y recursos. Unete gratis. Tambien en YouTube @JavadexAI.
TL;DR - Resumen Rapido
- Que vas a construir: 3 proyectos de IA completos: red neuronal clasificadora, chatbot con memoria, y agente autonomo con herramientas.
- Requisitos: Python 3.10+, pip, un editor de codigo (VS Code recomendado) y conexion a internet. Sin GPU obligatoria.
- Tiempo estimado: Entre 3 y 5 horas para completar los 3 proyectos siguiendo el tutorial paso a paso.
- Dificultad: Principiante a intermedio. Se explica cada linea de codigo. Si sabes programar algo en cualquier lenguaje, puedes seguirlo.
- Herramientas: Python, PyTorch, OpenAI API (o Ollama para ejecucion local gratuita), LangChain.
- Coste: 0 euros si usas Ollama para los proyectos 2 y 3. Si usas la API de OpenAI, menos de 0,50 euros en total para completar el tutorial.
Se Puede Crear una IA desde Cero en 2026?
Si, cualquier persona con conocimientos basicos de programacion puede crear una inteligencia artificial funcional en una sola tarde. Esto no era posible hace 5 anos. En 2021, crear un chatbot con IA requeria meses de trabajo, datasets propios y un presupuesto minimo de 10.000 euros en infraestructura. En marzo de 2026, la combinacion de frameworks maduros como PyTorch 2.6, APIs accesibles como la de OpenAI con GPT-4.1, modelos open source ejecutables en local con Ollama, y orquestadores como LangChain ha reducido la barrera de entrada a practicamente cero.
Existen 3 niveles de "crear una IA desde cero":
| Nivel | Que significa | Ejemplo | Tiempo |
|---|---|---|---|
| Nivel 1: Entrenar un modelo propio | Disenar una red neuronal y entrenarla con datos | Clasificador de imagenes con PyTorch | 1-2 horas |
| Nivel 2: Integrar un modelo existente | Usar una API de IA para crear una aplicacion | Chatbot con OpenAI API o Ollama | 30-60 minutos |
| Nivel 3: Crear un agente autonomo | Combinar un LLM con herramientas externas | Agente que investiga y resume informacion | 1-2 horas |
En este tutorial cubrimos los 3 niveles, de menor a mayor complejidad. Al terminar, tendras 3 proyectos funcionales que puedes ampliar, modificar y usar como base para tus propias ideas.
Requisitos Previos
Necesitas saber escribir y ejecutar un script de Python basico (variables, funciones, bucles). Nada mas. Si nunca has tocado Python, te recomiendo completar primero la guia de Python para IA que cubre lo esencial en 2-3 horas.
Entorno de Desarrollo
| Requisito | Minimo | Recomendado | Alternativa gratuita |
|---|---|---|---|
| Python | 3.10 | 3.12 | Preinstalado en Google Colab |
| RAM | 4 GB | 8 GB | Google Colab ofrece 12 GB gratis |
| Almacenamiento | 2 GB libres | 5 GB libres | Google Colab tiene 78 GB |
| GPU | No necesaria | NVIDIA con 4+ GB VRAM | Google Colab T4 gratis |
| Editor | Cualquiera | VS Code con extension Python | Google Colab en el navegador |
| SO | Windows 10, macOS 12, Ubuntu 20.04 | Cualquiera actual | Google Colab (navegador) |
Instalacion del Entorno
Abre una terminal y ejecuta estos comandos para preparar todo el entorno:
1# Crear un entorno virtual (recomendado)2python -m venv ia-tutorial3source ia-tutorial/bin/activate # En Linux/macOS4# ia-tutorial\Scripts\activate # En Windows5 6# Instalar las dependencias para los 3 proyectos7pip install torch torchvision matplotlib numpy8pip install openai python-dotenv9pip install langchain langchain-openai langchain-community10 11# Verificar que todo esta instalado12python -c "import torch; print(f'PyTorch {torch.__version__} instalado correctamente')"13python -c "import openai; print(f'OpenAI SDK {openai.__version__} instalado correctamente')"14python -c "import langchain; print(f'LangChain {langchain.__version__} instalado correctamente')"
Si usas Google Colab, las primeras librerias ya estan preinstaladas. Solo necesitaras ejecutar !pip install langchain langchain-openai langchain-community al inicio del notebook.
Que Vas a Construir: 3 Proyectos de IA
Estos son los 3 proyectos que vas a crear paso a paso en este tutorial:
| Proyecto | Tipo de IA | Que hace | Dificultad | Tiempo |
|---|---|---|---|---|
| Proyecto 1: Red Neuronal | Machine Learning clasico | Reconoce digitos escritos a mano con un 97%+ de precision | Principiante | 60-90 min |
| Proyecto 2: Chatbot IA | IA Generativa | Responde preguntas con contexto y memoria de conversacion | Principiante | 30-60 min |
| Proyecto 3: Agente Autonomo | Agente IA | Busca informacion en internet, la analiza y genera un resumen | Intermedio | 60-90 min |
Cada proyecto funciona de forma independiente. Puedes hacerlos en orden o saltar directamente al que mas te interese. Si eres principiante absoluto, te recomiendo seguir el orden porque cada proyecto introduce conceptos que el siguiente da por conocidos.
Proyecto 1: Red Neuronal que Clasifica Digitos
En este primer proyecto vas a construir una red neuronal desde cero con PyTorch que reconoce digitos escritos a mano (numeros del 0 al 9). Es el "Hola Mundo" del machine learning y un punto de partida perfecto para entender como funciona una IA por dentro.
La Teoria en 2 Minutos
Una red neuronal es una funcion matematica que aprende patrones de los datos. Funciona asi:
- Entrada: Recibe datos (en nuestro caso, una imagen de 28x28 pixeles, es decir, 784 numeros entre 0 y 1 que representan la intensidad de cada pixel).
- Capas ocultas: Los datos pasan por capas de neuronas. Cada neurona multiplica los valores de entrada por unos "pesos" (numeros que empiezan aleatorios), suma un "sesgo" y aplica una funcion de activacion (como ReLU, que convierte los negativos en 0).
- Salida: La ultima capa produce 10 numeros (uno por cada digito del 0 al 9). El numero mas alto es la prediccion.
- Aprendizaje: Se compara la prediccion con la respuesta correcta, se calcula el error, y se ajustan los pesos para reducir ese error. Esto se repite miles de veces (epocas de entrenamiento).
En resumen: entra una imagen, la red hace calculos matriciales, y sale un digito. Cuantas mas imagenes ve durante el entrenamiento, mejor predice.
Dataset: MNIST
Vamos a usar MNIST, un dataset clasico con 70.000 imagenes de digitos escritos a mano: 60.000 para entrenar y 10.000 para evaluar. PyTorch lo descarga automaticamente.
Codigo Completo: Red Neuronal con PyTorch
Crea un archivo llamado red_neuronal.py y copia este codigo completo:
1import torch2import torch.nn as nn3import torch.optim as optim4from torchvision import datasets, transforms5from torch.utils.data import DataLoader6import matplotlib.pyplot as plt7import time8 9# ============================================================10# PASO 1: Preparar los datos11# ============================================================12 13# Transformaciones: convertir imagenes a tensores y normalizar14transformacion = transforms.Compose([15 transforms.ToTensor(),16 transforms.Normalize((0.1307,), (0.3081,)) # Media y std de MNIST17])18 19# Descargar y cargar el dataset MNIST20datos_entrenamiento = datasets.MNIST(21 root='./datos',22 train=True,23 download=True,24 transform=transformacion25)26 27datos_prueba = datasets.MNIST(28 root='./datos',29 train=False,30 download=True,31 transform=transformacion32)33 34# DataLoaders: cargan los datos en lotes de 64 imagenes35cargador_entrenamiento = DataLoader(datos_entrenamiento, batch_size=64, shuffle=True)36cargador_prueba = DataLoader(datos_prueba, batch_size=1000, shuffle=False)37 38print(f"Imagenes de entrenamiento: {len(datos_entrenamiento)}")39print(f"Imagenes de prueba: {len(datos_prueba)}")40print(f"Tamano de cada imagen: {datos_entrenamiento[0][0].shape}")41 42# ============================================================43# PASO 2: Definir la red neuronal44# ============================================================45 46class RedNeuronal(nn.Module):47 def __init__(self):48 super(RedNeuronal, self).__init__()49 50 # Capa 1: 784 entradas (28x28 pixeles) -> 256 neuronas51 self.capa1 = nn.Linear(784, 256)52 53 # Capa 2: 256 neuronas -> 128 neuronas54 self.capa2 = nn.Linear(256, 128)55 56 # Capa 3: 128 neuronas -> 64 neuronas57 self.capa3 = nn.Linear(128, 64)58 59 # Capa de salida: 64 neuronas -> 10 clases (digitos 0-9)60 self.salida = nn.Linear(64, 10)61 62 # Funcion de activacion ReLU (convierte negativos en 0)63 self.relu = nn.ReLU()64 65 # Dropout para evitar sobreajuste (apaga 20% de neuronas aleatoriamente)66 self.dropout = nn.Dropout(0.2)67 68 def forward(self, x):69 # Aplanar la imagen de 28x28 a un vector de 78470 x = x.view(-1, 784)71 72 # Pasar por cada capa con activacion ReLU y dropout73 x = self.dropout(self.relu(self.capa1(x)))74 x = self.dropout(self.relu(self.capa2(x)))75 x = self.relu(self.capa3(x))76 x = self.salida(x)77 78 return x79 80# Crear la red81red = RedNeuronal()82 83# Contar parametros totales84total_parametros = sum(p.numel() for p in red.parameters())85print(f"\nArquitectura de la red:")86print(red)87print(f"\nParametros totales: {total_parametros:,}")88 89# ============================================================90# PASO 3: Configurar el entrenamiento91# ============================================================92 93# Funcion de perdida: Cross Entropy (estandar para clasificacion)94criterio = nn.CrossEntropyLoss()95 96# Optimizador: Adam (ajusta los pesos automaticamente)97optimizador = optim.Adam(red.parameters(), lr=0.001)98 99# ============================================================100# PASO 4: Entrenar la red neuronal101# ============================================================102 103EPOCAS = 10104historial_perdida = []105historial_precision = []106 107print("\nIniciando entrenamiento...")108inicio = time.time()109 110for epoca in range(EPOCAS):111 red.train() # Modo entrenamiento (activa dropout)112 perdida_total = 0113 lotes_procesados = 0114 115 for imagenes, etiquetas in cargador_entrenamiento:116 # Forward: calcular prediccion117 predicciones = red(imagenes)118 119 # Calcular perdida (error)120 perdida = criterio(predicciones, etiquetas)121 122 # Backward: calcular gradientes123 optimizador.zero_grad()124 perdida.backward()125 126 # Actualizar pesos127 optimizador.step()128 129 perdida_total += perdida.item()130 lotes_procesados += 1131 132 # Evaluar precision en datos de prueba133 red.eval() # Modo evaluacion (desactiva dropout)134 correctas = 0135 total = 0136 137 with torch.no_grad(): # No calcular gradientes (ahorra memoria)138 for imagenes, etiquetas in cargador_prueba:139 predicciones = red(imagenes)140 _, predichas = torch.max(predicciones, 1)141 total += etiquetas.size(0)142 correctas += (predichas == etiquetas).sum().item()143 144 precision = 100 * correctas / total145 perdida_media = perdida_total / lotes_procesados146 147 historial_perdida.append(perdida_media)148 historial_precision.append(precision)149 150 print(f"Epoca {epoca+1}/{EPOCAS} | "151 f"Perdida: {perdida_media:.4f} | "152 f"Precision: {precision:.2f}%")153 154tiempo_total = time.time() - inicio155print(f"\nEntrenamiento completado en {tiempo_total:.1f} segundos")156print(f"Precision final: {precision:.2f}%")157 158# ============================================================159# PASO 5: Visualizar resultados160# ============================================================161 162fig, axes = plt.subplots(1, 2, figsize=(12, 4))163 164# Grafico de perdida165axes[0].plot(historial_perdida, 'b-o')166axes[0].set_title('Perdida durante entrenamiento')167axes[0].set_xlabel('Epoca')168axes[0].set_ylabel('Perdida')169axes[0].grid(True)170 171# Grafico de precision172axes[1].plot(historial_precision, 'g-o')173axes[1].set_title('Precision en datos de prueba')174axes[1].set_xlabel('Epoca')175axes[1].set_ylabel('Precision (%)')176axes[1].grid(True)177 178plt.tight_layout()179plt.savefig('resultados_entrenamiento.png', dpi=150)180plt.show()181print("Graficos guardados en resultados_entrenamiento.png")182 183# ============================================================184# PASO 6: Probar con imagenes individuales185# ============================================================186 187# Tomar 10 imagenes de prueba y mostrar las predicciones188fig, axes = plt.subplots(2, 5, figsize=(12, 5))189red.eval()190 191for i, ax in enumerate(axes.flat):192 imagen, etiqueta_real = datos_prueba[i]193 with torch.no_grad():194 prediccion = red(imagen.unsqueeze(0))195 digito_predicho = prediccion.argmax().item()196 197 ax.imshow(imagen.squeeze(), cmap='gray')198 color = 'green' if digito_predicho == etiqueta_real else 'red'199 ax.set_title(f'Pred: {digito_predicho} (Real: {etiqueta_real})', color=color)200 ax.axis('off')201 202plt.tight_layout()203plt.savefig('predicciones.png', dpi=150)204plt.show()205print("Predicciones guardadas en predicciones.png")
Ejecutar el Proyecto
1python red_neuronal.py
Resultado Esperado
Despues de 10 epocas de entrenamiento (entre 30 y 90 segundos en un portatil moderno sin GPU), obtendras una precision de entre el 97% y el 98% en el dataset de prueba. Esto significa que tu red neuronal clasifica correctamente 9.700 de cada 10.000 digitos escritos a mano que nunca ha visto antes.
La salida sera similar a esta:
1Imagenes de entrenamiento: 600002Imagenes de prueba: 100003Tamano de cada imagen: torch.Size([1, 28, 28])4 5Parametros totales: 237,0666 7Iniciando entrenamiento...8Epoca 1/10 | Perdida: 0.3521 | Precision: 95.48%9Epoca 2/10 | Perdida: 0.1498 | Precision: 96.72%10Epoca 3/10 | Perdida: 0.1089 | Precision: 97.15%11...12Epoca 10/10 | Perdida: 0.0412 | Precision: 97.83%13 14Entrenamiento completado en 47.3 segundos15Precision final: 97.83%
Que Has Aprendido en Este Proyecto
- Como estructurar una red neuronal con capas lineales y funciones de activacion.
- El flujo completo de entrenamiento: forward pass, calculo de perdida, backpropagation y actualizacion de pesos.
- Como evaluar un modelo con datos que no ha visto durante el entrenamiento.
- Tecnicas basicas de regularizacion (dropout) para evitar sobreajuste.
Proyecto 2: Chatbot Conversacional con API de IA
En este segundo proyecto vas a crear un chatbot inteligente que mantiene una conversacion coherente, recuerda lo que le has dicho antes, y puede adoptar diferentes personalidades. Vas a poder elegir entre usar la API de OpenAI (de pago, pero muy barata) o Ollama para ejecutar un modelo de lenguaje gratis en tu propio ordenador.
Opcion A: Chatbot con OpenAI API
Para usar la API de OpenAI necesitas una cuenta y una clave API. El coste de este tutorial completo es inferior a 0,30 euros usando el modelo gpt-4o-mini.
Primero, crea un archivo .env en la carpeta del proyecto:
1# .env2OPENAI_API_KEY=tu-clave-api-aqui
Ahora crea el archivo chatbot_openai.py:
1import os2from openai import OpenAI3from dotenv import load_dotenv4from datetime import datetime5 6# Cargar variables de entorno7load_dotenv()8 9# ============================================================10# PASO 1: Configurar el cliente de OpenAI11# ============================================================12 13cliente = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))14 15# ============================================================16# PASO 2: Definir el sistema de conversacion con memoria17# ============================================================18 19class ChatbotIA:20 def __init__(self, personalidad="asistente"):21 """Inicializar el chatbot con una personalidad y memoria vacia."""22 23 # Diferentes personalidades predefinidas24 personalidades = {25 "asistente": (26 "Eres un asistente de IA amable y util. Respondes en espanol "27 "de forma clara y concisa. Si no sabes algo, lo dices honestamente."28 ),29 "profesor": (30 "Eres un profesor de informatica paciente y pedagogico. "31 "Explicas conceptos tecnicos con analogias simples y ejemplos "32 "del mundo real. Siempre en espanol."33 ),34 "programador": (35 "Eres un programador senior experto en Python y machine learning. "36 "Cuando te preguntan algo, das la respuesta tecnica precisa con "37 "codigo de ejemplo. Siempre en espanol."38 ),39 }40 41 self.mensaje_sistema = personalidades.get(personalidad, personalidades["asistente"])42 self.modelo = "gpt-4o-mini" # Modelo rapido y economico43 self.historial = []44 self.personalidad = personalidad45 self.tokens_usados = 046 47 def enviar_mensaje(self, mensaje_usuario):48 """Enviar un mensaje y obtener respuesta manteniendo el contexto."""49 50 # Agregar mensaje del usuario al historial51 self.historial.append({52 "role": "user",53 "content": mensaje_usuario54 })55 56 # Construir la lista completa de mensajes (sistema + historial)57 mensajes = [58 {"role": "system", "content": self.mensaje_sistema}59 ] + self.historial60 61 # Llamar a la API de OpenAI62 respuesta = cliente.chat.completions.create(63 model=self.modelo,64 messages=mensajes,65 temperature=0.7, # Creatividad (0=predecible, 1=creativo)66 max_tokens=1000, # Longitud maxima de respuesta67 )68 69 # Extraer la respuesta del asistente70 mensaje_asistente = respuesta.choices[0].message.content71 72 # Guardar la respuesta en el historial (esto es la "memoria")73 self.historial.append({74 "role": "assistant",75 "content": mensaje_asistente76 })77 78 # Contabilizar tokens79 self.tokens_usados += respuesta.usage.total_tokens80 81 return mensaje_asistente82 83 def limpiar_memoria(self):84 """Borrar el historial de conversacion."""85 self.historial = []86 print("Memoria limpiada. Nueva conversacion.")87 88 def ver_estadisticas(self):89 """Mostrar estadisticas de la conversacion."""90 mensajes_usuario = len([m for m in self.historial if m["role"] == "user"])91 mensajes_bot = len([m for m in self.historial if m["role"] == "assistant"])92 coste_estimado = (self.tokens_usados / 1_000_000) * 0.15 # Precio gpt-4o-mini93 94 print(f"\n--- Estadisticas ---")95 print(f"Personalidad: {self.personalidad}")96 print(f"Mensajes del usuario: {mensajes_usuario}")97 print(f"Respuestas del bot: {mensajes_bot}")98 print(f"Tokens totales usados: {self.tokens_usados:,}")99 print(f"Coste estimado: {coste_estimado:.4f} EUR")100 print(f"--------------------\n")101 102# ============================================================103# PASO 3: Interfaz de conversacion interactiva104# ============================================================105 106def main():107 print("=" * 50)108 print(" CHATBOT IA - Tutorial Javadex")109 print("=" * 50)110 print("\nElige una personalidad:")111 print(" 1. Asistente general")112 print(" 2. Profesor de informatica")113 print(" 3. Programador senior")114 115 opcion = input("\nOpcion (1/2/3): ").strip()116 personalidades = {"1": "asistente", "2": "profesor", "3": "programador"}117 personalidad = personalidades.get(opcion, "asistente")118 119 bot = ChatbotIA(personalidad=personalidad)120 print(f"\nChatbot '{personalidad}' activado. Escribe tu mensaje.")121 print("Comandos: 'salir', 'limpiar', 'stats'\n")122 123 while True:124 entrada = input("Tu: ").strip()125 126 if not entrada:127 continue128 if entrada.lower() == "salir":129 bot.ver_estadisticas()130 print("Hasta luego.")131 break132 if entrada.lower() == "limpiar":133 bot.limpiar_memoria()134 continue135 if entrada.lower() == "stats":136 bot.ver_estadisticas()137 continue138 139 respuesta = bot.enviar_mensaje(entrada)140 print(f"\nBot: {respuesta}\n")141 142if __name__ == "__main__":143 main()
Opcion B: Chatbot con Ollama (100% Gratis y Local)
Si prefieres no usar una API de pago, puedes ejecutar un modelo de lenguaje en tu propio ordenador con Ollama. Necesitas al menos 8 GB de RAM.
Primero, instala Ollama y descarga un modelo:
1# Instalar Ollama (macOS/Linux)2curl -fsSL https://ollama.com/install.sh | sh3 4# Descargar un modelo ligero (3.8 GB)5ollama pull llama3.26 7# Verificar que funciona8ollama run llama3.2 "Di hola en espanol"
Ahora crea el archivo chatbot_ollama.py:
1import requests2import json3 4# ============================================================5# Chatbot con Ollama (ejecucion 100% local y gratuita)6# ============================================================7 8class ChatbotLocal:9 def __init__(self, modelo="llama3.2"):10 """Inicializar chatbot con Ollama local."""11 self.modelo = modelo12 self.url = "http://localhost:11434/api/chat"13 self.historial = []14 self.mensaje_sistema = (15 "Eres un asistente de IA util y amable. "16 "Respondes siempre en espanol de forma clara y concisa."17 )18 19 def enviar_mensaje(self, mensaje_usuario):20 """Enviar mensaje a Ollama y obtener respuesta con contexto."""21 22 self.historial.append({23 "role": "user",24 "content": mensaje_usuario25 })26 27 mensajes = [28 {"role": "system", "content": self.mensaje_sistema}29 ] + self.historial30 31 payload = {32 "model": self.modelo,33 "messages": mensajes,34 "stream": False,35 "options": {36 "temperature": 0.7,37 "num_predict": 1000,38 }39 }40 41 try:42 respuesta = requests.post(self.url, json=payload)43 respuesta.raise_for_status()44 datos = respuesta.json()45 mensaje_asistente = datos["message"]["content"]46 47 self.historial.append({48 "role": "assistant",49 "content": mensaje_asistente50 })51 52 return mensaje_asistente53 54 except requests.exceptions.ConnectionError:55 return ("Error: No se pudo conectar con Ollama. "56 "Asegurate de que Ollama esta ejecutandose "57 "(ejecuta 'ollama serve' en otra terminal).")58 59 def limpiar_memoria(self):60 """Borrar historial de conversacion."""61 self.historial = []62 print("Memoria limpiada.")63 64def main():65 print("=" * 50)66 print(" CHATBOT LOCAL - Ollama + Llama 3.2")67 print("=" * 50)68 print("\nAsegurate de que Ollama esta activo: 'ollama serve'")69 print("Comandos: 'salir', 'limpiar'\n")70 71 bot = ChatbotLocal()72 73 while True:74 entrada = input("Tu: ").strip()75 76 if not entrada:77 continue78 if entrada.lower() == "salir":79 print("Hasta luego.")80 break81 if entrada.lower() == "limpiar":82 bot.limpiar_memoria()83 continue84 85 respuesta = bot.enviar_mensaje(entrada)86 print(f"\nBot: {respuesta}\n")87 88if __name__ == "__main__":89 main()
Ejecutar el Chatbot
1# Opcion A: Con OpenAI API2python chatbot_openai.py3 4# Opcion B: Con Ollama (gratis, en otra terminal ejecuta: ollama serve)5python chatbot_ollama.py
Ejemplo de Conversacion
1Tu: Hola, me llamo Carlos y estoy aprendiendo Python2 3Bot: Hola Carlos, encantado de conocerte. Python es una4excelente eleccion para empezar a programar. Es el lenguaje5mas usado en inteligencia artificial y ciencia de datos.6Que te gustaria aprender hoy?7 8Tu: Recuerdas mi nombre?9 10Bot: Claro, te llamas Carlos. Me lo has dicho al principio11de nuestra conversacion. Que mas puedo ayudarte?12 13Tu: Explica que es una lista en Python con un ejemplo simple14 15Bot: Una lista en Python es como una caja donde puedes guardar16varios elementos en orden. Se crea con corchetes:17 18frutas = ["manzana", "platano", "naranja"]19print(frutas[0]) # manzana20frutas.append("uva") # Anadir un elemento21print(len(frutas)) # 4
Observa como el chatbot recuerda el nombre del usuario. Esto funciona porque mantenemos un historial de todos los mensajes en la lista self.historial. Cada vez que hacemos una nueva peticion a la API, enviamos toda la conversacion anterior como contexto. Eso es lo que le da "memoria" al chatbot.
Que Has Aprendido en Este Proyecto
- Como interactuar con la API de OpenAI y con modelos locales mediante Ollama.
- El concepto de "mensajes del sistema" para definir el comportamiento del chatbot.
- Como implementar memoria conversacional mediante un historial de mensajes.
- La diferencia entre modelos en la nube (API) y modelos locales (Ollama).
Proyecto 3: Agente IA Autonomo con Herramientas
Un agente IA es un paso mas alla de un chatbot. Mientras que un chatbot solo responde preguntas con su conocimiento interno, un agente puede usar herramientas externas: buscar en internet, leer archivos, ejecutar codigo, consultar bases de datos o llamar a APIs. El agente decide por si mismo que herramienta usar y cuando usarla para completar una tarea.
En este proyecto vas a crear un agente que recibe una pregunta, busca informacion relevante, la procesa y genera un resumen estructurado. Usaremos LangChain como framework de orquestacion.
Teoria: Como Funciona un Agente IA
Un agente IA sigue un ciclo llamado ReAct (Razonamiento + Accion):
- Razonamiento: El LLM analiza la pregunta y decide que hacer.
- Accion: Ejecuta una herramienta (buscar en internet, calcular, etc.).
- Observacion: Recibe el resultado de la herramienta.
- Repetir: Si necesita mas informacion, vuelve al paso 1.
- Respuesta final: Cuando tiene suficiente informacion, genera la respuesta.
Este ciclo es exactamente lo que hacen herramientas como ChatGPT con plugins, Claude con herramientas, o los frameworks de agentes IA de codigo abierto.
Codigo Completo: Agente con LangChain
Crea el archivo agente_ia.py:
1import os2from dotenv import load_dotenv3from langchain_openai import ChatOpenAI4from langchain.agents import AgentExecutor, create_react_agent5from langchain.tools import Tool6from langchain import hub7import requests8import json9from datetime import datetime10 11load_dotenv()12 13# ============================================================14# PASO 1: Definir las herramientas del agente15# ============================================================16 17def calculadora(expresion: str) -> str:18 """Evalua una expresion matematica y devuelve el resultado."""19 try:20 # Sanitizar la entrada (solo permitir caracteres matematicos)21 caracteres_permitidos = set("0123456789+-*/.() ")22 if not all(c in caracteres_permitidos for c in expresion):23 return "Error: La expresion contiene caracteres no permitidos."24 25 resultado = eval(expresion)26 return f"El resultado de {expresion} es: {resultado}"27 except Exception as e:28 return f"Error al calcular: {str(e)}"29 30def obtener_fecha_hora(consulta: str = "") -> str:31 """Devuelve la fecha y hora actual."""32 ahora = datetime.now()33 return (34 f"Fecha actual: {ahora.strftime('%d de %B de %Y')}. "35 f"Hora: {ahora.strftime('%H:%M:%S')}. "36 f"Dia de la semana: {ahora.strftime('%A')}."37 )38 39def buscar_wikipedia(consulta: str) -> str:40 """Busca informacion en Wikipedia en espanol."""41 url = "https://es.wikipedia.org/api/rest_v1/page/summary/"42 consulta_formateada = consulta.strip().replace(" ", "_")43 44 try:45 respuesta = requests.get(46 f"{url}{consulta_formateada}",47 headers={"User-Agent": "AgenteTutorial/1.0"},48 timeout=1049 )50 51 if respuesta.status_code == 200:52 datos = respuesta.json()53 titulo = datos.get("title", "Sin titulo")54 extracto = datos.get("extract", "Sin informacion disponible.")55 url_completa = datos.get("content_urls", {}).get("desktop", {}).get("page", "")56 return (57 f"Titulo: {titulo}\n"58 f"Resumen: {extracto}\n"59 f"Fuente: {url_completa}"60 )61 elif respuesta.status_code == 404:62 return f"No se encontro un articulo de Wikipedia para '{consulta}'."63 else:64 return f"Error al consultar Wikipedia: HTTP {respuesta.status_code}"65 66 except requests.exceptions.Timeout:67 return "Error: La consulta a Wikipedia tardo demasiado."68 except Exception as e:69 return f"Error inesperado: {str(e)}"70 71def analizar_texto(texto: str) -> str:72 """Analiza un texto y devuelve estadisticas basicas."""73 palabras = texto.split()74 oraciones = texto.count('.') + texto.count('!') + texto.count('?')75 caracteres = len(texto)76 77 return (78 f"Analisis del texto:\n"79 f"- Palabras: {len(palabras)}\n"80 f"- Oraciones: {max(oraciones, 1)}\n"81 f"- Caracteres: {caracteres}\n"82 f"- Palabras por oracion: {len(palabras) / max(oraciones, 1):.1f}\n"83 f"- Palabra mas larga: {max(palabras, key=len) if palabras else 'N/A'}"84 )85 86# ============================================================87# PASO 2: Registrar las herramientas88# ============================================================89 90herramientas = [91 Tool(92 name="Calculadora",93 func=calculadora,94 description=(95 "Util para resolver operaciones matematicas. "96 "La entrada debe ser una expresion matematica valida, "97 "por ejemplo: '2 + 2' o '(100 * 0.21) + 500'"98 )99 ),100 Tool(101 name="FechaHora",102 func=obtener_fecha_hora,103 description=(104 "Devuelve la fecha y hora actual. "105 "Usar cuando el usuario pregunte por la fecha o la hora."106 )107 ),108 Tool(109 name="Wikipedia",110 func=buscar_wikipedia,111 description=(112 "Busca informacion en Wikipedia en espanol. "113 "La entrada debe ser el termino o concepto a buscar, "114 "por ejemplo: 'Inteligencia artificial' o 'Python lenguaje'"115 )116 ),117 Tool(118 name="AnalizadorTexto",119 func=analizar_texto,120 description=(121 "Analiza un texto y devuelve estadisticas como numero de "122 "palabras, oraciones y caracteres. La entrada es el texto a analizar."123 )124 ),125]126 127# ============================================================128# PASO 3: Crear el agente con LangChain129# ============================================================130 131def crear_agente():132 """Configurar y devolver el agente IA."""133 134 # Modelo de lenguaje (puedes cambiar a Ollama para ejecucion local)135 llm = ChatOpenAI(136 model="gpt-4o-mini",137 temperature=0.3, # Baja creatividad para respuestas precisas138 )139 140 # Prompt del agente ReAct (descargado de LangChain Hub)141 prompt = hub.pull("hwchase17/react")142 143 # Crear el agente144 agente = create_react_agent(llm, herramientas, prompt)145 146 # Ejecutor del agente (gestiona el ciclo ReAct)147 ejecutor = AgentExecutor(148 agent=agente,149 tools=herramientas,150 verbose=True, # Mostrar el razonamiento paso a paso151 max_iterations=8, # Maximo de pasos para evitar bucles152 handle_parsing_errors=True,153 )154 155 return ejecutor156 157# ============================================================158# PASO 4: Interfaz interactiva159# ============================================================160 161def main():162 print("=" * 55)163 print(" AGENTE IA AUTONOMO - Tutorial Javadex")164 print("=" * 55)165 print("\nEste agente puede:")166 print(" - Buscar informacion en Wikipedia")167 print(" - Resolver calculos matematicos")168 print(" - Decir la fecha y hora actual")169 print(" - Analizar textos")170 print("\nEscribe 'salir' para terminar.\n")171 172 agente = crear_agente()173 174 while True:175 pregunta = input("Tu pregunta: ").strip()176 177 if not pregunta:178 continue179 if pregunta.lower() == "salir":180 print("Hasta luego.")181 break182 183 print("\n--- Razonamiento del agente ---\n")184 185 try:186 resultado = agente.invoke({"input": pregunta})187 print(f"\n--- Respuesta final ---")188 print(f"\n{resultado['output']}\n")189 except Exception as e:190 print(f"\nError: {str(e)}\n")191 192if __name__ == "__main__":193 main()
Ejecutar el Agente
1python agente_ia.py
Ejemplo de Ejecucion del Agente
Cuando le preguntas al agente "Que es PyTorch y en que ano se creo?", el agente razona de esta forma:
1Tu pregunta: Que es PyTorch y en que ano se creo?2 3--- Razonamiento del agente ---4 5> Entering new AgentExecutor chain...6Thought: El usuario quiere saber que es PyTorch y cuando se creo.7Voy a buscar esta informacion en Wikipedia.8 9Action: Wikipedia10Action Input: PyTorch11 12Observation: Titulo: PyTorch13Resumen: PyTorch es una biblioteca de aprendizaje automatico14de codigo abierto basada en la biblioteca Torch, utilizada15para aplicaciones como vision por computador y procesamiento16del lenguaje natural. Fue desarrollada principalmente por17el laboratorio de investigacion de IA de Meta (Facebook).18Su primera version fue lanzada en septiembre de 2016...19Fuente: https://es.wikipedia.org/wiki/PyTorch20 21Thought: Ya tengo la informacion necesaria para responder.22 23Final Answer: PyTorch es una biblioteca de aprendizaje automatico24de codigo abierto desarrollada por Meta (Facebook). Se utiliza25principalmente para vision por computador y procesamiento del26lenguaje natural. Fue creada en septiembre de 2016. Es una de27las bibliotecas mas populares para deep learning junto con28TensorFlow.29 30--- Respuesta final ---31 32PyTorch es una biblioteca de aprendizaje automatico de codigo33abierto desarrollada por Meta (Facebook). Se utiliza34principalmente para vision por computador y procesamiento35del lenguaje natural. Fue creada en septiembre de 2016.36Es una de las bibliotecas mas populares para deep learning37junto con TensorFlow.
Observa como el agente decide por si solo que necesita buscar en Wikipedia, ejecuta la herramienta, lee el resultado y formula una respuesta coherente. Si la pregunta requiriera un calculo, usaria la calculadora automaticamente. Eso es lo que hace que un agente sea "autonomo": elige las herramientas adecuadas segun la tarea.
Version con Ollama (Gratuita)
Para usar Ollama en lugar de OpenAI, reemplaza la configuracion del LLM en la funcion crear_agente:
1from langchain_community.llms import Ollama2 3# Reemplazar ChatOpenAI por Ollama4llm = Ollama(5 model="llama3.2",6 temperature=0.3,7)
El resto del codigo funciona igual. Ten en cuenta que los modelos locales mas pequenos pueden ser menos precisos al decidir que herramienta usar, pero modelos como Llama 3.2 de 8B funcionan bien para la mayoria de tareas.
Que Has Aprendido en Este Proyecto
- El patron ReAct (Razonamiento + Accion) que usan los agentes IA modernos.
- Como crear herramientas personalizadas que un agente puede usar.
- Como funciona LangChain para orquestar agentes con herramientas.
- La diferencia entre un chatbot (solo responde) y un agente (razona y actua).
Siguiente Nivel: Que Aprender Despues
Has completado 3 proyectos que cubren los fundamentos de la IA practica. El siguiente paso depende de tus intereses y objetivos profesionales.
| Direccion | Que aprender | Recurso recomendado | Tiempo estimado |
|---|---|---|---|
| Deep Learning avanzado | CNNs, Transformers, entrenamiento distribuido | fast.ai Practical Deep Learning (gratis) | 8-10 semanas |
| IA Generativa | Fine-tuning de LLMs, RAG, generacion de imagenes | Curso de Hugging Face (gratis) | 6-8 semanas |
| Agentes IA avanzados | Frameworks multi-agente, MCP, produccion | Documentacion de LangGraph y CrewAI | 4-6 semanas |
| MLOps | Despliegue de modelos, monitorizacion, CI/CD para IA | MLOps Zoomcamp de DataTalks (gratis) | 8 semanas |
| Vision por computador | Deteccion de objetos, segmentacion, YOLO | CS231n de Stanford (gratis en YouTube) | 10 semanas |
| NLP avanzado | Embeddings, bases de datos vectoriales, busqueda semantica | Curso NLP de Hugging Face (gratis) | 6 semanas |
| Competiciones | Aplicar lo aprendido a problemas reales | Kaggle Competitions (gratis) | Continuo |
| Desarrollo profesional | Portfolio, proyectos reales, busqueda de empleo | Ruta completa para aprender IA | Variable |
Preguntas Frecuentes
Se puede crear una IA sin saber programar?
Si, pero con limitaciones importantes. Herramientas como Bolt.new, Lovable o v0 y plataformas como n8n o Flowise permiten crear aplicaciones de IA con interfaz visual, sin escribir codigo. Sin embargo, para crear sistemas personalizados, entrenar modelos propios o trabajar profesionalmente en IA, necesitas saber programar. Python es el lenguaje estandar y se puede aprender en 4-8 semanas.
Que lenguaje de programacion necesito para crear una IA?
Python, sin discusion. El 87% de los proyectos de machine learning y el 92% de los papers de investigacion en IA usan Python segun el informe de Stack Overflow 2025. Todos los frameworks principales (PyTorch, TensorFlow, LangChain, Hugging Face) estan escritos o tienen su interfaz principal en Python. Otros lenguajes como JavaScript (TensorFlow.js), Rust (Candle) y Julia se usan en nichos especificos, pero Python es el punto de partida obligatorio. Consulta la guia de Python para IA.
Cuanto tiempo se tarda en crear una IA?
Depende del tipo de IA. Un chatbot basico con la API de OpenAI se puede crear en 15 minutos. Una red neuronal simple, en 1-2 horas. Un agente IA con herramientas, en 2-3 horas. Un sistema de recomendacion personalizado, en 1-2 semanas. Un modelo de lenguaje entrenado desde cero, varios meses y miles de euros. Este tutorial esta disenado para que completes los 3 proyectos en una tarde (3-5 horas).
Necesito una GPU potente para crear una IA?
No para empezar, si para proyectos avanzados. Los 3 proyectos de este tutorial funcionan perfectamente en un portatil normal sin GPU dedicada. El Proyecto 1 (red neuronal) tarda menos de 2 minutos en CPU. Los proyectos 2 y 3 usan APIs externas o modelos locales ligeros. Solo necesitaras una GPU cuando quieras entrenar modelos grandes (millones de parametros) o hacer fine-tuning de LLMs. Google Colab ofrece GPUs T4 gratis que son suficientes para la mayoria de proyectos de aprendizaje.
Puedo crear un ChatGPT propio?
Si, con matices. Puedes crear un chatbot con capacidades similares a ChatGPT de varias formas: usando la API de OpenAI (como en el Proyecto 2 de este tutorial), ejecutando modelos open source como Llama 3 con Ollama, o haciendo fine-tuning de un modelo existente con tus propios datos. Lo que no puedes replicar facilmente es la escala de ChatGPT (entrenado con billones de tokens, coste estimado de +100 millones de dolares en compute). Pero para la mayoria de aplicaciones practicas, un chatbot basado en modelos existentes funciona igual de bien.
Cual es la forma mas facil de crear una IA en 2026?
Usar la API de OpenAI o Ollama con Python. En marzo de 2026, la forma mas rapida de tener una IA funcional es: instalar Python, instalar el paquete openai (o ollama), escribir 15 lineas de codigo y ejecutar. El Proyecto 2 de este tutorial demuestra exactamente eso. Si buscas algo todavia mas rapido sin codigo, plataformas como Flowise permiten crear chatbots con interfaz visual en menos de 10 minutos.
Posts Relacionados
Si este tutorial te ha resultado util, estos articulos profundizan en cada uno de los temas que hemos cubierto:
- Python para IA: Guia Principiantes - Todo lo que necesitas saber de Python antes de crear tu primera IA.
- Como Crear Tu Primer Agente IA - Tutorial avanzado con multiples frameworks de agentes.
- Aprender IA desde Cero Gratis - Ruta completa de aprendizaje en 5 fases con recursos gratuitos.
- LangChain Tutorial en Espanol - Guia completa de LangChain para crear aplicaciones con LLMs.
- Ollama Guia Completa - Como ejecutar modelos de IA en tu ordenador de forma gratuita.
- Fine-Tuning vs RAG - Cuando personalizar un modelo y cuando usar retrieval augmented generation.
En Resumen
- Crear una IA desde cero con Python es accesible para cualquier persona con conocimientos basicos de programacion. No necesitas una GPU de 2.000 euros ni un doctorado en matematicas.
- El Proyecto 1 (red neuronal) demuestra como funciona el machine learning por dentro: datos de entrada, capas de neuronas, entrenamiento y evaluacion. Con 237.000 parametros alcanza un 97%+ de precision clasificando digitos.
- El Proyecto 2 (chatbot) ensena a integrar modelos de lenguaje en aplicaciones Python, ya sea con la API de OpenAI o con modelos locales mediante Ollama. La clave esta en la memoria conversacional.
- El Proyecto 3 (agente autonomo) muestra el siguiente nivel: un sistema que razona, decide que herramientas usar y actua de forma autonoma para completar tareas complejas.
- Todo el codigo de este tutorial es funcional y esta probado en marzo de 2026. Puedes ejecutarlo tal cual o modificarlo como punto de partida para tus propios proyectos.
- El coste es 0 euros si usas PyTorch (gratuito), Ollama (gratuito) y Google Colab (gratuito). Con la API de OpenAI, menos de 0,50 euros para completar todo el tutorial.
- El siguiente paso depende de tus intereses: deep learning avanzado, agentes multi-modelo, MLOps o competiciones en Kaggle. Consulta la ruta completa de aprendizaje de IA para una guia estructurada.