📚 CLASE: Introducción a Chains y LCEL en LangChain
━━━━━━━━━━━━━━━━━━
🎯 IDEA PRINCIPAL
Las chains permiten conectar componentes de IA para convertir una entrada en un resultado mediante varios pasos organizados.
LCEL (LangChain Expression Language) facilita esta composición utilizando el operador |, que conecta prompts, modelos, funciones y parsers sin tener que programar manualmente toda la coordinación.
━━━━━━━━━━━━━━━━━━
⚡ RESUMEN ULTRA RÁPIDO
🔵 Una chain conecta componentes donde la salida de uno alimenta al siguiente.
🔵 LCEL permite construir esos flujos utilizando expresiones declarativas y componentes reutilizables.
🟢 prompt | modelo | parser conecta instrucciones, generación de IA y transformación de la respuesta.
🟡 invoke() ejecuta la cadena completa; no necesitas invocar cada componente manualmente.
🟣 Las cadenas permiten reutilizar, probar y mantener flujos de procesamiento de IA.
━━━━━━━━━━━━━━━━━━
🔑 LO IMPORTANTE
🔵 Un Runnable es un componente compatible con la interfaz común de ejecución de LangChain.
🔵 RunnableSequence ejecuta componentes en orden y transmite la salida de cada paso al siguiente.
🔵 RunnableParallel permite ejecutar varias ramas con la misma entrada y reunir sus resultados.
🟡 El operador | equivale a conectar componentes secuencialmente.
🟢 StrOutputParser convierte la respuesta del modelo de chat en texto sencillo.
🟡 Las cadenas compatibles pueden admitir ejecución por lotes, procesamiento asíncrono y streaming, según sus componentes.
🔴 Los componentes deben recibir datos compatibles con sus entradas; un tipo de salida inesperado puede romper la cadena.
🔴 No necesitas LCEL para una única llamada sencilla a un modelo.
🟣 Para flujos con estado complejo, ciclos o múltiples agentes, considera LangGraph en lugar de forzar una cadena extensa.
━━━━━━━━━━━━━━━━━━
🧩 MODELO MENTAL
🔵 Entrada → Prompt → Modelo → Parser → Resultado.
🟢 La entrada proporciona los datos variables.
🟢 El prompt prepara las instrucciones que recibe el modelo.
🟢 El modelo genera una respuesta.
🟢 El parser transforma la salida al formato que necesita tu aplicación.
━━━━━━━━━━━━━━━━━━
🚀 ACCIONES PARA HOY
🟢 Crea un entorno virtual e instala las dependencias:
pip install -U langchain-core langchain-openai python-dotenv
🟢 Configura OPENAI_API_KEY como variable de entorno.
🟢 Importa los componentes necesarios:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
🟢 Crea un prompt reutilizable:
prompt = ChatPromptTemplate.from_template("Explica {tema} en tres frases para un principiante.")
🟢 Inicializa un modelo disponible para tu cuenta:
modelo = ChatOpenAI(model="MODELO_DISPONIBLE")
🟢 Construye tu primera chain:
chain = prompt | modelo | StrOutputParser()
🟢 Ejecuta el flujo completo:
resultado = chain.invoke({"tema": "qué es una API"})
🟢 Imprime resultado y cambia el tema para comprobar que la misma cadena sirve para distintas entradas.
━━━━━━━━━━━━━━━━━━
🟣 VENTAJA PROFESIONAL
🟣 Aporte experto: divide tus flujos en componentes pequeños para poder cambiar el modelo sin reescribir toda la aplicación.
🟣 Utiliza RunnableParallel cuando necesites realizar análisis independientes sobre una misma entrada.
🟣 Aprovecha batch() para procesar varias entradas y ainvoke() cuando tu aplicación requiera ejecución asíncrona.
🟣 En tu backend Python, separa las cadenas de IA de las vistas, rutas y reglas de negocio.
🟣 Registra errores, latencia y consumo de tokens para detectar qué componente está causando problemas.
🟣 Mantén las operaciones críticas fuera de la generación libre del modelo y valida sus resultados antes de modificar datos.
━━━━━━━━━━━━━━━━━━
📝 CIERRE
Un principiante ejecuta cada componente por separado; un profesional construye flujos reutilizables, controla las entradas y valida las salidas.
🟢 Reto: crea una chain que reciba una descripción de un gasto, genere una explicación breve y devuelva únicamente el texto procesado por el parser.