LangChain vs. LangGraph: los funcionarios le dicen qué elegir
En la actualidad, el campo de la IA generativa evoluciona rápidamente, con la aparición de nuevos marcos y tecnologías. Por lo tanto, los lectores deben ser conscientes de que el contenido presentado en este artículo puede ser actual. En este artículo, examinaremos más de cerca los dos marcos dominantes para la creación de aplicaciones LLM, LangChain y LangGraph, y analizaremos sus puntos fuertes y débiles para ayudarle a elegir la herramienta más adecuada.

Componentes de la Fundación LangChain y LangGraph
Entender los elementos fundamentales de ambos marcos puede ayudar a los desarrolladores a comprender mejor las diferencias clave en la forma en que gestionan las funciones básicas. Las siguientes descripciones no enumeran todos los componentes de cada marco, sino que pretenden proporcionar una comprensión clara de su diseño general.
Cadena LangChain
LangChain puede utilizarse de dos formas principales: como cadena secuencial de comandos predefinidos (Cadena) y como Agente LangChain, que difiere en términos de herramientas y organización. La Cadena utiliza un flujo de trabajo lineal predefinido, mientras que el Agente actúa como coordinador y puede tomar decisiones más dinámicas (no lineales).
- CadenaCadena: Combinación de pasos que pueden incluir llamadas a LLMs, Agentes, herramientas, fuentes de datos externas y código procedimental. Las cadenas pueden dividir un único proceso en varias rutas basadas en bifurcaciones condicionales lógicas.
- Agente o LLMEl Agente: Mientras que el LLM en sí es capaz de generar respuestas en lenguaje natural, el Agente combina el LLM con capacidades adicionales que le permiten razonar, invocar la herramienta e intentar invocarla si falla.
- Herramientason funciones de código que pueden ser llamadas en cadena o activadas por un Agente para interactuar con un sistema externo.
- Pregunte aIncluye avisos del sistema (para indicar cómo el modelo debe completar la tarea y las herramientas disponibles), información inyectada de fuentes de datos externas (para proporcionar más contexto al modelo) y tareas de entrada del usuario.
LangGraph
LangGraph adopta un enfoque diferente para crear flujos de trabajo de IA. Como su nombre indica, organiza los flujos de trabajo en forma de gráfico. Debido a su capacidad de flexión entre agentes de IA, código procedimental y otras herramientas, es más adecuado para escenarios de aplicaciones complejas donde las cadenas lineales, las cadenas de ramificación o los sistemas de agentes simples no son suficientes.
- GráficoLangGraph también admite grafos cíclicos, que crean bucles y mecanismos de retroalimentación que permiten acceder varias veces a determinados nodos.
- Nodo: Indica un paso en un flujo de trabajo, como una consulta LLM, una llamada API o la ejecución de una herramienta.
- Borde y borde condicionalBordes: los bordes se utilizan para conectar nodos y definir el flujo de información de forma que la salida de un nodo se utilice como entrada para el siguiente. Las aristas condicionales permiten que la información fluya de un nodo a otro cuando se cumplen determinadas condiciones. El desarrollador puede personalizar estas condiciones.
- EstadoEl estado es un objeto TypedDict variable definido por el desarrollador que contiene toda la información relevante necesaria para la ejecución actual del grafo. El estado es un objeto TypedDict variable definida por el desarrollador que contiene toda la información relevante necesaria para la ejecución actual del gráfico.LangGraph actualiza automáticamente el estado en cada nodo.
- Agente o LLMEl LLM del grafo sólo es responsable de generar respuestas textuales a las entradas. La capacidad de Agente, por otro lado, permite que el grafo contenga múltiples nodos que representan diferentes componentes del Agente (por ejemplo, razonamiento, selección de herramientas y ejecución de herramientas.) El Agente puede decidir qué caminos tomar en el grafo, actualizar el estado del grafo y realizar más tareas que la mera generación de texto.
En resumen, LangChain es más adecuado para invocaciones lineales y basadas en herramientas, mientras que LangGraph es más adecuado para flujos de trabajo complejos, de múltiples rutas y de IA con mecanismos de retroalimentación.
Diferencias entre LangChain y LangGraph en el tratamiento de las funciones básicas
LangGraph y LangChain se solapan en algunas de sus capacidades, pero enfocan el problema de forma diferente; LangChain se centra en flujos de trabajo lineales (a través de cadenas) o diferentes patrones de Agentes AI, mientras que LangGraph se centra en crear flujos de trabajo más flexibles, de grano fino y basados en procesos, que pueden incorporar Agentes AI, llamadas a herramientas, código procedimental, etc.
En general, LangChain tiene una curva de aprendizaje relativamente baja porque proporciona más encapsulación de abstracción y configuraciones predefinidas, lo que hace que LangChain sea más fácil de aplicar a escenarios de uso sencillos. LangGraph, por otro lado, permite una personalización más detallada del diseño del flujo de trabajo, lo que significa que es menos abstracto y que los desarrolladores necesitan aprender más para utilizarlo eficazmente.
Llamada a la herramienta
Cadena LangChain
En LangChain, la forma en que se invoca una herramienta depende de si una serie de pasos se realizan secuencialmente en la cadena, o si sólo se utilizan las capacidades del Agente (no definidas explícitamente en la cadena).
- Las herramientas se incluyen como pasos predefinidos en la cadena, lo que significa que no necesariamente son invocadas dinámicamente por el Agente, sino que se decide qué herramientas se invocan en el momento de diseñar la cadena.
- Cuando el Agente no está definido en una cadena, el Agente tiene más autonomía y puede decidir qué herramienta llamar y cuándo, basándose en la lista de herramientas a las que tiene acceso.
Ejemplo de proceso para el enfoque en cadena:

Este es un ejemplo del flujo del método Agente:

LangGraph
En LangGraph, una herramienta se representa normalmente como un nodo en el grafo. Si el grafo contiene un Agente, el Agente es responsable de decidir qué herramienta invocar basándose en su capacidad de razonamiento. Cuando el Agente selecciona una herramienta, el flujo de trabajo salta al Nodo Herramienta correspondiente para realizar la operación de la herramienta. El borde entre el Agente y el Nodo Herramienta puede contener Lógica Condicional, que añade lógica de juicio adicional para decidir si se ejecuta o no una herramienta. De esta forma, el desarrollador puede tener un control más preciso. Si no hay Agente en el grafo, la herramienta se invoca de forma similar a una cadena LangChain, es decir, la herramienta se ejecuta en el flujo de trabajo basándose en la Lógica Condicional predefinida.
Contiene un ejemplo del flujo de diagramas para Agente:

Ejemplo de flujo de un diagrama sin Agente:

Diálogo sobre historia y memoria
Cadena LangChain
LangChain proporciona una capa de abstracción integrada para gestionar el historial de conversaciones y las memorias. Soporta la gestión de memoria a diferentes niveles de granularidad, controlando así la cantidad de ficha cantidad, principalmente de las siguientes maneras:
- Historial de conversaciones de la sesión completa (Full session conversation history)
- Versión resumida del historial de la conversación
- Memoria definida por el usuario (MDP)
Además, los desarrolladores pueden personalizar el sistema de memoria a largo plazo para almacenar el historial de diálogos en una base de datos externa y recuperar los recuerdos relevantes cuando sea necesario.
LangGraph
En LangGraph, Estado es responsable de la gestión de la memoria, que realiza un seguimiento de la información de estado mediante el registro de variables definidas en cada momento en el tiempo.Estado puede incluir:
- Diálogo con la Historia
- Etapas de la aplicación del mandato
- El último resultado del modelo lingüístico
- Otra información importante
El estado puede pasarse entre nodos de forma que cada nodo tenga acceso al estado actual del sistema. Sin embargo, LangGraph por sí mismo no proporciona memoria a largo plazo entre sesiones. Si los desarrolladores necesitan almacenar memoria de forma persistente, pueden introducir nodos específicos para almacenar memorias y variables en una base de datos externa para su posterior recuperación.
Capacidad RAG lista para usar
Cadena LangChain
LangChain admite de forma nativa RAG flujos de trabajo y proporciona un sofisticado conjunto de herramientas para facilitar a los desarrolladores la integración de RAG en sus aplicaciones. Por ejemplo, proporciona:
- Carga de documentos
- Análisis sintáctico de textos
- Creación de incrustaciones
- Almacenamiento vectorial
- Capacidades de recuperación (Retrieval Capabilities)
Los desarrolladores pueden utilizar directamente las API proporcionadas por LangChain (como la API langchain.document_loaders
ylangchain.embeddings
responder cantando langchain.vectorstores
) para aplicar los flujos de trabajo del GAR.
LangGraph
En LangGraph, los GAR deben ser diseñados por el desarrollador e implementados como parte de la estructura del grafo. Por ejemplo, los desarrolladores pueden crear nodos separados para cada una:
- Análisis sintáctico de documentos
- Cálculo de incrustación (Embedding Computation)
- Búsqueda semántica (recuperación)
Estos nodos pueden conectarse entre sí mediante Aristas Normales o Aristas Condicionales, y el estado de los nodos individuales puede utilizarse para pasar información con el fin de compartir datos entre los diferentes pasos de la tubería RAG.
Paralelismo
Cadena LangChain
LangChain permite la ejecución en paralelo de múltiples cadenas o Agentes, que pueden ejecutarse utilizando la función RunnableParallel
para implementar el procesamiento paralelo básico.
Sin embargo, si se requieren cálculos paralelos más avanzados o llamadas a herramientas asíncronas, los desarrolladores tendrán que utilizar bibliotecas de Python como asyncio
) Autoaplicación.
LangGraph
LangGraph admite de forma natural la ejecución paralela de nodos siempre que no existan dependencias entre ellos (por ejemplo, la salida de un LLM no puede utilizarse como entrada del siguiente). Esto significa que varios Agentes pueden ejecutarse simultáneamente, siempre que no sean nodos interdependientes.
También compatible con LangGraph:
- utilizar
RunnableParallel
Ejecución de varios gráficos - Con Python
asyncio
Biblioteca Herramienta de llamada paralela
Lógica de reintentos y gestión de errores
Cadena LangChain
La gestión de errores de LangChain debe ser definida explícitamente por el desarrollador, lo que puede hacerse mediante:
- Introducción de la lógica de reintentos en la cadena (Retry Logic)
- Gestión de fallos de llamadas de herramientas en el agente
LangGraph
LangGraph puede incrustar la lógica de gestión de errores directamente en el flujo de trabajo haciendo de la gestión de errores un nodo separado.
- Cuando una tarea falla, puede saltar a otro nodo de gestión de errores o volver a intentarlo en el nodo actual.
- Los nodos que fallan se vuelven a intentar individualmente, en lugar de volver a ejecutar todo el flujo de trabajo.
- De este modo, el diagrama puede continuar la ejecución desde el punto en el que falló, sin tener que empezar desde cero.
Si su tarea implica múltiples pasos y llamadas a herramientas, este mecanismo de gestión de errores puede ser muy importante.
¿Cómo elegir entre LangChain y LangGraph?
Los promotores pueden:
- Utilizar sólo LangChain
- Utilizar sólo LangGraph
- Uso de LangChain y LangGraph
También es posible combinar las capacidades de estructuración de grafos de LangGraph con otros marcos de trabajo de Agentes como AutoGen de Microsoft, por ejemplo, combinando la función AutoGen Agente como nodo de LangGraph.
LangChain y LangGraph tienen cada una sus ventajas, y elegir la herramienta adecuada puede resultar confuso.
¿Cuándo elegir LangChain?
Si los desarrolladores necesitan crear flujos de trabajo de IA con rapidez, he aquí algunos escenarios para considerar la elección de LangChain:
- tarea linealFlujos de trabajo predefinidos para recuperación de documentos, generación de textos, resumen, etc.
- El agente de IA requiere una toma de decisiones dinámicapero no requiere un control preciso de procesos complejos.
¿Cuándo elegir LangGraph?
Si el escenario de la aplicación requiere un flujo de trabajo no lineal (no lineal), considere LangGraph para las siguientes situaciones:
- La tarea implica la interacción dinámica de múltiples componentes.
- Requiere juicio condicional, lógica de bifurcación compleja, gestión de errores o ejecución paralela.
- Los desarrolladores están dispuestos a implementar por su cuenta algunas de las funciones que no proporciona LangChain.
¿Cuándo debo utilizar conjuntamente LangChain y LangGraph?
Si se desea aprovechar tanto las capacidades de abstracción fácilmente disponibles de LangChain (por ejemplo, componentes RAG, memorias de diálogo, etc.) como las capacidades de orquestación no lineal de LangGraph, se podría considerar el uso de ambas.
Combinadas, ambas pueden aprovechar al máximo sus respectivos puntos fuertes para crear flujos de trabajo de IA más flexibles y potentes.
© declaración de copyright
El artículo está protegido por derechos de autor y no debe reproducirse sin autorización.
Artículos relacionados
Sin comentarios...