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.
Tabla de Contenidos
- ¿Qué es un agente de IA?
- Arquitectura de agentes en LangChain
- Tu primer agente: paso a paso
- Herramientas (Tools) personalizadas
- Memoria y contexto
- Agentes multi-tool avanzados
- Sistemas multi-agente
- Deployment en producción
- FAQ
¿Qué es un agente de IA? {#que-es-agente}
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 {#arquitectura}
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 {#primer-agente}
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 {#tools}
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}
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 {#multi-tool}
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 {#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 {#produccion}
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 {#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.
¿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
Posts Relacionados
Cómo Usar Claude Code en Terminal: Tutorial Paso a Paso [2026]
Tutorial completo de Claude Code CLI. Aprende a usar el agente de código de Anthropic en terminal para automatizar desarrollo, refactoring y tareas complejas.
MCP Servers para Claude: Guía de Configuración en Español [2026]
Configura MCP Servers para Claude Code y Claude Desktop. Tutorial en español con ejemplos: filesystem, GitHub, bases de datos, APIs personalizadas.
Gemini 3 Deep Think: Cómo Usar el Modo Razonamiento de Google [2026]
Guía de Gemini 3 Deep Think, el modo de razonamiento avanzado de Google. Cómo activarlo, cuándo usarlo, comparativa con GPT-5.2 Thinking y casos de uso.
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.
¿Quieres más contenido de IA?
Explora nuestras comparativas y guías