Repaso de LangChain
Repaso rápido de los fundamentos de LangChain: ChatPromptTemplate, Chains, Output Parsers y cómo se integran con LangGraph.
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
Componente | Propósito |
|---|---|
ChatPromptTemplate | Plantillas para mensajes del sistema y humanos |
ChatOpenAI | ChatAnthropic | Interfaces para LLMs |
StrOutputParser | Extrae texto de la salida del LLM |
chain | Pipeline: prompt | llm | parser |
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
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
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
# 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"})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
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
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 hayLos binding de herramientas son cómo los LLMs solicitan el uso de herramientas. LangGraph ejecuta estas solicitudes en nodos separados.
Pipelines con Chain
# 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 compartidoPreguntas de Práctica
Cómo responder
Pregunta de opción múltiple con 4 opciones. Selecciona una opción y elige Comprobar respuesta.
¿Cuál es el propósito de StrOutputParser?
Cómo responder
Pregunta de opción múltiple con 4 opciones. Selecciona una opción y elige Comprobar respuesta.
¿Cómo se vinculan herramientas a un LLM en LangChain?
Cómo responder
Pregunta de opción múltiple con 4 opciones. Selecciona una opción y elige Comprobar respuesta.
¿Qué contiene response.tool_calls después de invocar un LLM con herramientas vinculadas?
Cómo responder
Pregunta de opción múltiple con 4 opciones. Selecciona una opción y elige Comprobar respuesta.
¿Cuáles son los tipos de mensaje en LangChain?
Cómo responder
Pregunta de opción múltiple con 4 opciones. Selecciona una opción y elige Comprobar respuesta.
¿Cuándo deberías usar LangGraph en lugar de una Chain de LangChain?
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