iniciante25 minutosLección 2 de 10

Repaso de LangChain

Repaso rápido de los fundamentos de LangChain: ChatPromptTemplate, Chains, Output Parsers y cómo se integran con LangGraph.

Repaso de LangChain

LangChain es la biblioteca hermana de LangGraph. Proporciona los componentes básicos — LLMs, prompts, herramientas — que usarás dentro de tus nodos de LangGraph.


Conceptos Clave de LangChain

ComponentePropósito
ChatPromptTemplatePlantillas para mensajes del sistema y humanos
ChatOpenAI | ChatAnthropicInterfaces para LLMs
StrOutputParserExtrae texto de la salida del LLM
chainPipeline: prompt | llm | parser
python
from langchain_openai import ChatOpenAI from langchain.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser llm = ChatOpenAI(model="gpt-4o-mini") prompt = ChatPromptTemplate.from_messages([ ("system", "Eres un asistente útil."), ("human", "{input}") ]) chain = prompt | llm | StrOutputParser() result = chain.invoke({"input": "¡Hola!"})

ChatPromptTemplate

python
from langchain.prompts import ChatPromptTemplate # Plantilla básica prompt = ChatPromptTemplate.from_messages([ ("system", "Eres un experto en {topic}."), ("human", "{question}") ]) # Con mensajes de ejemplo prompt = ChatPromptTemplate.from_messages([ ("system", "Eres un asistente útil."), ("human", "¿Qué es {concept}?"), ("ai", "Te lo explicaré en términos simples."), ("human", "{question}") ]) # Invocar una plantilla messages = prompt.invoke({ "topic": "Python", "question": "¿Qué es un decorador?" })

Output Parsers

python
from langchain_core.output_parsers import StrOutputParser, CommaSeparatedListOutputParser # Parser de string simple str_parser = StrOutputParser() # Parser de lista separada por comas list_parser = CommaSeparatedListOutputParser() # "manzana, pera, plátano" → ["manzana", "pera", "plátano"] # En una chain chain = prompt | llm | StrOutputParser() result = chain.invoke({"input": "cuéntame un chiste"})

Chains vs LangGraph

python
# Chain de LangChain (lineal, sin estado) chain = prompt_a | llm | parser_a result = chain.invoke(input) # LangGraph (con estado, flexible) builder.add_node("step_a", node_a) builder.add_edge("step_a", "step_b") app = builder.compile() result = app.invoke({"key": "value"})
ℹ️Note

LangChain chains son para pipelines simples de usar y olvidar. LangGraph graphs son para flujos de trabajo complejos con estado, bucles y toma de decisiones. A menudo usarás componentes de LangChain dentro de nodos de LangGraph.


Mensajes de LangChain

python
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage, ToolMessage messages = [ SystemMessage("Eres un asistente útil."), HumanMessage("¿Qué es LangGraph?"), AIMessage("LangGraph es un framework para construir agentes de IA.") ] # Usar con LLM response = llm.invoke(messages) print(response.content) # Texto de respuesta print(response.response_metadata) # Metadatos (uso de tokens, etc.)

Bindings de Herramientas

python
from langchain_core.tools import tool @tool def get_weather(city: str) -> str: """Obtener el clima actual de una ciudad.""" return f"El clima en {city} es soleado, 22°C" # Vincular herramientas al LLM llm_with_tools = llm.bind_tools([get_weather]) # Ahora el LLM puede solicitar llamadas a herramientas response = llm_with_tools.invoke("¿Qué clima hace en Madrid?") print(response.tool_calls) # Solicitudes de herramientas si las hay
💡Tip

Los binding de herramientas son cómo los LLMs solicitan el uso de herramientas. LangGraph ejecuta estas solicitudes en nodos separados.


Pipelines con Chain

python
# Pipeline de documentos: extraer → resumir → traducir from operator import itemgetter extract_prompt = ChatPromptTemplate.from_messages([ ("system", "Extrae los puntos clave de este texto."), ("human", "{text}") ]) summarize_prompt = ChatPromptTemplate.from_messages([ ("system", "Resume estos puntos en 2 frases."), ("human", "{points}") ]) # Chain compuesta pipeline = ( {"points": extract_prompt | llm | StrOutputParser()} | summarize_prompt | llm | StrOutputParser() ) # Equivalente en LangGraph (más legible para flujos complejos) # node_extract → node_summarize con estado compartido

Preguntas de Práctica

Practice Question

¿Cuál es el propósito de StrOutputParser?

Practice Question

¿Cómo se vinculan herramientas a un LLM en LangChain?

Practice Question

¿Qué contiene response.tool_calls después de invocar un LLM con herramientas vinculadas?

Practice Question

¿Cuáles son los tipos de mensaje en LangChain?

Practice Question

¿Cuándo deberías usar LangGraph en lugar de una Chain de LangChain?


Success

Puntos Clave

  • LangChain proporciona componentes (prompts, LLMs, parsers) para usar dentro de nodos de LangGraph
  • ChatPromptTemplate.from_messages() crea plantillas con roles de sistema/humano/IA
  • Los Output Parsers transforman la salida del LLM en formatos utilizables
  • llm.bind_tools() permite a los LLMs solicitar ejecuciones de herramientas
  • Los tipos de mensaje (Human/AI/System/Tool) estructuran la comunicación con el LLM
  • Las Chain de LangChain son para pipelines lineales; LangGraph es para flujos complejos con estado
Progreso20%