Crear Agentes IA con LangChain: Guía Completa [2026]
Tutorial completo para crear agentes de IA con LangChain. Desde agentes básicos hasta sistemas multi-agente complejos con herramientas.
Crear Agentes de IA con LangChain: Tutorial Completo [2026]
TLDR: Los agentes de IA son LLMs que pueden usar herramientas, tomar decisiones, y ejecutar acciones autónomamente. Con LangChain, puedes crear agentes en minutos: define tools (funciones que el agente puede usar), conecta un LLM (GPT-4, Claude), y deja que el agente decida cómo resolver la tarea.
¿Qué es un agente de IA?
Definición simple
Un agente de IA es un sistema que:
- Recibe una tarea en lenguaje natural
- Decide qué acciones tomar
- Usa herramientas para ejecutar acciones
- Observa resultados
- Repite hasta completar la tarea
Diferencia: Chatbot vs Agente
| Chatbot | Agente |
|---|---|
| Solo responde texto | Puede ejecutar acciones |
| No usa herramientas | Usa tools (APIs, código, etc.) |
| Una respuesta por input | Múltiples pasos si es necesario |
| Sin autonomía | Decide cómo resolver |
Ejemplo: Agente de investigación
1Usuario: "Investiga las últimas noticias sobre OpenAI y2 escribe un resumen de 3 párrafos"3 4Agente piensa: "Necesito buscar noticias recientes"5 ↓6Agente usa: Tool "web_search" con query "OpenAI news 2026"7 ↓8Agente recibe: [Resultados de búsqueda]9 ↓10Agente piensa: "Tengo info, ahora debo resumir"11 ↓12Agente escribe: [Resumen de 3 párrafos]
Arquitectura de agentes en LangChain
Componentes principales
1┌─────────────────────────────────────────────────┐2│ AGENTE │3├─────────────────────────────────────────────────┤4│ │5│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │6│ │ LLM │ │ Tools │ │ Memory │ │7│ │ (cerebro)│ │(acciones)│ │(contexto)│ │8│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │9│ │ │ │ │10│ └───────────────┴───────────────┘ │11│ │ │12│ ┌───────┴───────┐ │13│ │ Agent Loop │ │14│ │ (ReAct/LCEL) │ │15│ └───────────────┘ │16└─────────────────────────────────────────────────┘
El Agent Loop (ReAct)
11. THOUGHT: Pensar qué hacer22. ACTION: Elegir tool y parámetros33. OBSERVATION: Ver resultado del tool44. Repetir hasta: tener respuesta final55. FINAL ANSWER: Responder al usuario
Tu primer agente: paso a paso
Instalación
1pip install langchain langchain-openai langchain-community
Agente básico con búsqueda web
1from langchain_openai import ChatOpenAI2from langchain.agents import AgentExecutor, create_react_agent3from langchain_community.tools import DuckDuckGoSearchRun4from langchain import hub5 6# 1. Configurar LLM7llm = ChatOpenAI(model="gpt-4o", temperature=0)8 9# 2. Definir tools10search = DuckDuckGoSearchRun()11tools = [search]12 13# 3. Cargar prompt de agente ReAct14prompt = hub.pull("hwchase17/react")15 16# 4. Crear agente17agent = create_react_agent(llm, tools, prompt)18 19# 5. Crear executor20agent_executor = AgentExecutor(21 agent=agent,22 tools=tools,23 verbose=True, # Ver el razonamiento24 max_iterations=525)26 27# 6. Ejecutar28response = agent_executor.invoke({29 "input": "¿Cuáles son las últimas noticias sobre IA en España?"30})31 32print(response["output"])
Output del agente (verbose=True)
1> Entering new AgentExecutor chain...2Thought: Necesito buscar noticias recientes sobre IA en España.3Action: duckduckgo_search4Action Input: "noticias inteligencia artificial España 2026"5Observation: [Resultados de búsqueda...]6 7Thought: Tengo información relevante. Voy a resumir los puntos principales.8Final Answer: Las últimas noticias sobre IA en España incluyen:91. [Noticia 1]102. [Noticia 2]113. [Noticia 3]12 13> Finished chain.
Herramientas (Tools) personalizadas
Crear un tool simple
1from langchain.tools import tool2 3@tool4def calcular_precio(cantidad: int, precio_unitario: float) -> float:5 """6 Calcula el precio total de una compra.7 Args:8 cantidad: Número de unidades9 precio_unitario: Precio por unidad10 Returns:11 Precio total12 """13 return cantidad * precio_unitario14 15# Usar en agente16tools = [calcular_precio, search]
Tool con llamada a API externa
1import requests2from langchain.tools import tool3 4@tool5def obtener_clima(ciudad: str) -> str:6 """7 Obtiene el clima actual de una ciudad.8 Args:9 ciudad: Nombre de la ciudad10 Returns:11 Descripción del clima actual12 """13 api_key = "tu-api-key"14 url = f"https://api.weatherapi.com/v1/current.json?key={api_key}&q={ciudad}"15 16 response = requests.get(url)17 data = response.json()18 19 return f"En {ciudad}: {data['current']['condition']['text']}, {data['current']['temp_c']}°C"
Tool con acceso a base de datos
1from langchain.tools import tool2import sqlite33 4@tool5def consultar_productos(categoria: str) -> str:6 """7 Busca productos en la base de datos por categoría.8 Args:9 categoria: Categoría de productos a buscar10 Returns:11 Lista de productos encontrados12 """13 conn = sqlite3.connect("productos.db")14 cursor = conn.cursor()15 16 cursor.execute(17 "SELECT nombre, precio FROM productos WHERE categoria = ?",18 (categoria,)19 )20 resultados = cursor.fetchall()21 conn.close()22 23 if not resultados:24 return f"No se encontraron productos en la categoría '{categoria}'"25 26 return "\n".join([f"- {nombre}: €{precio}" for nombre, precio in resultados])
Toolkit completo de ejemplo
1@tool2def enviar_email(destinatario: str, asunto: str, cuerpo: str) -> str:3 """Envía un email."""4 # Implementación...5 return f"Email enviado a {destinatario}"6 7@tool8def crear_evento_calendario(titulo: str, fecha: str, hora: str) -> str:9 """Crea un evento en Google Calendar."""10 # Implementación...11 return f"Evento '{titulo}' creado para {fecha} a las {hora}"12 13@tool14def buscar_en_documentos(query: str) -> str:15 """Busca información en los documentos internos de la empresa."""16 # Implementación con RAG...17 return "Resultados relevantes..."18 19tools = [20 search,21 enviar_email,22 crear_evento_calendario,23 buscar_en_documentos,24 calcular_precio,25 obtener_clima26]
Memoria y contexto
Memoria de conversación
1from langchain.memory import ConversationBufferMemory2 3# Memoria que guarda el historial completo4memory = ConversationBufferMemory(5 memory_key="chat_history",6 return_messages=True7)8 9# Incluir en el executor10agent_executor = AgentExecutor(11 agent=agent,12 tools=tools,13 memory=memory,14 verbose=True15)16 17# Primera interacción18agent_executor.invoke({"input": "Me llamo Carlos"})19 20# El agente recuerda21agent_executor.invoke({"input": "¿Cómo me llamo?"})22# Output: "Te llamas Carlos"
Memoria con ventana
1from langchain.memory import ConversationBufferWindowMemory2 3# Solo guarda los últimos N intercambios4memory = ConversationBufferWindowMemory(5 k=5, # Últimas 5 conversaciones6 memory_key="chat_history",7 return_messages=True8)
Memoria con resumen
1from langchain.memory import ConversationSummaryMemory2 3# Resume conversaciones largas automáticamente4memory = ConversationSummaryMemory(5 llm=llm,6 memory_key="chat_history"7)
Memoria persistente (Redis)
1from langchain.memory import RedisChatMessageHistory2from langchain.memory import ConversationBufferMemory3 4# Memoria que persiste en Redis5message_history = RedisChatMessageHistory(6 url="redis://localhost:6379/0",7 session_id="user-123"8)9 10memory = ConversationBufferMemory(11 chat_memory=message_history,12 memory_key="chat_history",13 return_messages=True14)
Agentes multi-tool avanzados
Agente asistente personal
1from langchain_openai import ChatOpenAI2from langchain.agents import AgentExecutor, create_openai_functions_agent3from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder4 5# Prompt personalizado6prompt = ChatPromptTemplate.from_messages([7 ("system", """Eres un asistente personal inteligente.8 9Tienes acceso a las siguientes herramientas:10- Búsqueda web para información actualizada11- Calendario para gestionar eventos12- Email para enviar mensajes13- Base de datos de documentos internos14 15Siempre:161. Piensa qué herramientas necesitas172. Ejecuta las acciones necesarias183. Proporciona respuestas claras y útiles19 20Fecha actual: {current_date}21"""),22 MessagesPlaceholder(variable_name="chat_history"),23 ("human", "{input}"),24 MessagesPlaceholder(variable_name="agent_scratchpad"),25])26 27# Crear agente con function calling (más preciso)28agent = create_openai_functions_agent(llm, tools, prompt)29 30agent_executor = AgentExecutor(31 agent=agent,32 tools=tools,33 memory=memory,34 verbose=True,35 handle_parsing_errors=True36)
Ejemplo de uso complejo
1# El agente puede encadenar múltiples herramientas2response = agent_executor.invoke({3 "input": """4 Necesito preparar la reunión con el cliente de mañana:5 1. Busca información sobre su empresa (TechCorp)6 2. Revisa si tenemos documentos previos sobre ellos7 3. Crea un evento en el calendario para mañana a las 10:008 4. Envía un email de confirmación a cliente@techcorp.com9 """,10 "current_date": "2026-02-02"11})
Output del agente
1> Entering new AgentExecutor chain...2 3Invoking: search with {'query': 'TechCorp empresa información'}4[Resultados de búsqueda...]5 6Invoking: buscar_en_documentos with {'query': 'TechCorp cliente'}7"Encontré 3 documentos: propuesta_2025.pdf, contrato_2024.pdf..."8 9Invoking: crear_evento_calendario with {'titulo': 'Reunión TechCorp', 'fecha': '2026-02-03', 'hora': '10:00'}10"Evento creado correctamente"11 12Invoking: enviar_email with {'destinatario': 'cliente@techcorp.com', 'asunto': 'Confirmación reunión mañana', 'cuerpo': '...'}13"Email enviado"14 15Final Answer: He preparado todo para la reunión:161. TechCorp es una empresa de tecnología fundada en 2015...172. Encontré documentos previos: propuesta y contrato de años anteriores183. Evento creado: "Reunión TechCorp" mañana a las 10:00194. Email de confirmación enviado al cliente20 21> Finished chain.
Sistemas multi-agente
Arquitectura supervisor
1from langchain.agents import AgentExecutor2from langgraph.graph import StateGraph3 4# Definir agentes especializados5researcher_agent = create_agent(llm, [search], "Investigador")6writer_agent = create_agent(llm, [write_file], "Escritor")7reviewer_agent = create_agent(llm, [review_tool], "Revisor")8 9# Supervisor que coordina10def supervisor_node(state):11 """Decide qué agente debe actuar"""12 messages = state["messages"]13 last_message = messages[-1]14 15 # Lógica de routing16 if "investigar" in last_message.lower():17 return "researcher"18 elif "escribir" in last_message.lower():19 return "writer"20 elif "revisar" in last_message.lower():21 return "reviewer"22 else:23 return "end"24 25# Crear grafo de agentes26workflow = StateGraph(AgentState)27workflow.add_node("supervisor", supervisor_node)28workflow.add_node("researcher", researcher_agent)29workflow.add_node("writer", writer_agent)30workflow.add_node("reviewer", reviewer_agent)31 32# Definir transiciones33workflow.add_edge("supervisor", "researcher")34workflow.add_edge("researcher", "supervisor")35workflow.add_edge("supervisor", "writer")36workflow.add_edge("writer", "supervisor")37workflow.add_edge("supervisor", "reviewer")38workflow.add_edge("reviewer", "end")39 40app = workflow.compile()
Uso del sistema multi-agente
1result = app.invoke({2 "messages": ["Investiga sobre IA generativa, escribe un artículo, y revísalo"]3})4 5# El supervisor coordina:6# 1. researcher investiga7# 2. writer escribe basándose en la investigación8# 3. reviewer revisa y sugiere mejoras
Deployment en producción
API con FastAPI
1from fastapi import FastAPI2from pydantic import BaseModel3 4app = FastAPI()5 6class Query(BaseModel):7 input: str8 user_id: str9 10@app.post("/agent")11async def run_agent(query: Query):12 # Obtener memoria del usuario13 memory = get_user_memory(query.user_id)14 15 executor = AgentExecutor(16 agent=agent,17 tools=tools,18 memory=memory,19 max_iterations=10,20 early_stopping_method="generate"21 )22 23 try:24 result = executor.invoke({"input": query.input})25 return {"response": result["output"], "success": True}26 except Exception as e:27 return {"error": str(e), "success": False}
Manejo de errores
1agent_executor = AgentExecutor(2 agent=agent,3 tools=tools,4 verbose=True,5 max_iterations=10, # Evitar loops infinitos6 max_execution_time=60, # Timeout de 60 segundos7 handle_parsing_errors=True, # Recuperarse de errores de parsing8 early_stopping_method="generate" # Generar respuesta si se alcanza límite9)
Logging y monitoreo
1from langchain.callbacks import FileCallbackHandler2from langchain.callbacks.manager import CallbackManager3 4# Log a archivo5file_handler = FileCallbackHandler("agent_logs.txt")6callback_manager = CallbackManager([file_handler])7 8agent_executor = AgentExecutor(9 agent=agent,10 tools=tools,11 callbacks=callback_manager12)
FAQ
¿Qué LLM usar para agentes?
GPT-4o es el más fiable para agentes complejos. Claude 3.5 Sonnet es excelente para agentes de código. GPT-4o-mini funciona para agentes simples y es más económico.
Los modelos necesitan ser buenos en "function calling" para agentes. Si quieres ejecutar agentes con modelos locales (Llama 3, Mistral) para no depender de APIs externas, necesitas un equipo con al menos 32 GB de RAM. Un Mac Mini M4 o un mini PC con 32 GB como el Blackview MP50 son opciones asequibles para correr agentes locales con Ollama.
¿Cuántas herramientas puede tener un agente?
Prácticamente sin límite técnico, pero:
- 5-10 tools: Óptimo
- 10-20 tools: Funciona bien con buen LLM
- 20+ tools: Considerar agrupar o usar sub-agentes
¿Los agentes pueden ejecutar código peligroso?
Sí, ten cuidado. Mejores prácticas:
- Sandboxing para ejecución de código
- Validación de inputs en tools
- Límites de tiempo y recursos
- No dar acceso a credenciales sensibles directamente
Conclusión
Los agentes de IA con LangChain te permiten crear sistemas que van más allá de chatbots simples. Con tools, memoria, y coordinación multi-agente, puedes automatizar tareas complejas que antes requerían intervención humana.
Tu próximo paso:
- Crea un agente básico con búsqueda web
- Añade 2-3 tools personalizadas para tu caso de uso
- Implementa memoria para conversaciones
- Considera multi-agente si la tarea es muy compleja
Recursos relacionados:
Más tutoriales de IA en Javadex.es
Síguenos: YouTube @JavadexAI | TikTok @javadex
¿Listo para poner tu proyecto en producción?
Si estás siguiendo este tutorial, necesitas un servidor donde desplegarlo. Yo uso Hostinger para mis proyectos porque el panel es intuitivo, los VPS van con SSD NVMe, y a 4,99€/mes no hay nada comparable en relación calidad-precio.
* Enlace de afiliado. Si contratas a través de este enlace, nos ayudas a mantener este contenido gratuito.
Posts Relacionados
Consultoría IA en San Sebastián (Donostia): Agentes, Automatización y Modelos Privados para Empresas [2026]
Guía completa de servicios de inteligencia artificial en San Sebastián: agentes IA, automatización, modelos privados y consultoría para empresas vascas en 2026.
Kit Digital 2026 para IA: Cómo Solicitar Hasta 12.000€ para tu PYME Paso a Paso
Tutorial paso a paso para solicitar el Kit Digital 2026 con soluciones de IA. Requisitos, cuantías por segmento (hasta 12.000€), agentes digitalizadores y errores que rechazan tu solicitud.
Formación en Claude Code para Empresas en España: Proveedores, Precios y Qué Esperar [2026]
Guía de formación en Claude Code para empresas españolas: proveedores, precios (desde 4.000€), programas in-company, duración y resultados esperados.
Javier Santos Criado
Consultor de IA y Automatización | Fundador de Javadex
Experto en implementación de soluciones de Inteligencia Artificial para empresas. Especializado en automatización con n8n, integración de LLMs, y desarrollo de agentes IA.
Lleva tu proyecto a producción
Hosting web desde 2,99€/mes o VPS con SSD NVMe desde 4,99€/mes. Panel intuitivo, IP dedicada y soporte 24/7 en español.
¿Quieres más contenido de IA?
Explora nuestras comparativas y guías