Nuestra posición: somos Geonode y vendemos proxies, que no tienen nada que ver con frameworks de LLM. No ganamos nada sea cual sea tu elección, lo que hace de esta una comparación escrita por alguien sin interés en el resultado — una posición inusual en una categoría donde la mayoría de las comparaciones salen de uno de los proveedores. Todas las versiones, licencias y actividad de repositorios de abajo se comprobaron en septiembre de 2026.
Por Qué la Gente Busca Alternativas
Conviene nombrar las quejas reales, porque determinan qué alternativa ayuda.
Profundidad de la abstracción. Depurar una chain a menudo significa leer el código fuente del framework para averiguar qué prompt se envió de verdad. La indirección que acorta la demo alarga los incidentes de producción.
Rotación de la API. El framework se ha movido mucho a lo largo de su vida y los tutoriales envejecen rápido. El código escrito contra una versión major hay que revisitarlo.
Peso de las dependencias. Una superficie grande trae un árbol de dependencias grande, y eso importa en despliegues restringidos y en revisión de seguridad.
Hacer demasiado. Chains, agents, memory, retrieval, tooling, evaluation. La mayoría de los proyectos necesitan dos de esos y heredan todos.
Nótese que ninguna de estas quejas es sobre las ideas. Las abstracciones de LangChain son descripciones razonables del espacio del problema, precisamente por eso se copiaron. Las quejas son sobre el coste de adoptar un framework entero para usar una parte.
También conviene decir que el proyecto no está parado: langchain está en 1.3.18 y langchain-core en 1.6.1, ambos publicados a finales de agosto de 2026, licencia MIT, y el repositorio está entre los más activos de la categoría. Gran parte de la crítica describe una versión anterior.
El Panorama
Todas las cifras proceden de PyPI y de los repositorios de los propios proyectos, comprobadas en septiembre de 2026.
| Proyecto | Más reciente | Licencia | Enfoque |
|---|---|---|---|
| LangChain | 1.3.18 | MIT | Composición de propósito general |
| LangGraph | 1.2.11 | MIT | Flujos stateful, multi-actor |
| LlamaIndex | 0.14.24 | MIT | Indexación y recuperación de datos |
| Haystack | 3.1.0 | Apache-2.0 | Pipelines de producción |
| DSPy | 3.3.1 | MIT | Optimización programática de prompts |
| Semantic Kernel | 1.44.1 | MIT | Empresa, multilenguaje |
| Pydantic AI | 2.37.0 | MIT | Agents con type safety |
| Instructor | 1.16.0 | MIT | Solo salidas estructuradas |
Todos en desarrollo activo: cada uno recibió un push a pocos días de la comprobación. Todos con licencia permisiva. Las diferencias están en el alcance y la filosofía, no en la viabilidad.
LlamaIndex: Recuperación Primero
La alternativa de propósito general más cercana, y llega desde otra dirección.
Donde LangChain empezó componiendo llamadas a LLM, LlamaIndex empezó conectando LLMs a tus datos: su propio resumen es "interface between LLMs and your data". Ese origen se ve en lo que hace bien: carga de documentos desde una gama muy amplia de fuentes, estrategias de chunking, construcción de índices y patrones de recuperación más allá de la similitud top-k simple.
Elígelo cuando la calidad de la recuperación es la parte difícil de tu problema. Las abstracciones de índice y los query engines son más sofisticados que el equivalente en un framework general, y el ecosistema de loaders es lo bastante amplio como para que conectar una fuente inusual suela ser una sola línea.
La reserva tiene la misma forma que la de LangChain: ha crecido hasta ser un framework general, así que adoptarlo para recuperación trae agents, flujos y tooling que quizá no quieras.
Haystack: Pipelines de Producción
El framework de Deepset, y el más explícitamente orientado a producción del grupo: se describe como un framework "to build customizable, production-ready LLM applications".
Su rasgo distintivo es que los pipelines son grafos explícitos de componentes con entradas y salidas declaradas, serializables a YAML. Eso hace inspeccionable lo que se ejecuta de un modo que el method-chaining no permite, y convierte el pipeline en algo que puedes versionar, hacer diff y revisar.
Elígelo cuando estás construyendo algo que se va a operar, no a demostrar: donde ver la estructura del pipeline, serializarlo y razonar sobre él en revisión importa más que el camino más corto a un prototipo que funciona.
También es el único proyecto Apache-2.0 de esta lista en vez de MIT, una distinción sin mucha diferencia práctica —ambos son permisivos— pero a veces importa en una revisión legal con preferencia.
DSPy: Una Idea Genuinamente Distinta
La alternativa más interesante, y la que no es una variación de las demás.
La premisa de DSPy es que los prompts escritos a mano son la abstracción equivocada. Declaras lo que un módulo debe hacer en términos de entradas y salidas, y el framework optimiza los prompts —incluidos ejemplos few-shot— contra una métrica que tú defines.
La consecuencia es un bucle de desarrollo distinto. En vez de iterar el texto del prompt a mano, construyes un conjunto de evaluación, defines una métrica y dejas que el optimizador busque. Eso convierte la ingeniería de prompts de un oficio en algo más cercano a un procedimiento de entrenamiento.
Elígelo cuando tienes una tarea con calidad medible, un conjunto de evaluación y volumen suficiente para que la optimización sistemática merezca la pena. Encajan la clasificación, la extracción y el razonamiento estructurado.
No lo elijas cuando no puedes definir una métrica, o cuando la tarea es puntual. Todo el enfoque se sostiene en poder puntuar salidas de forma automática, y construir ese conjunto de evaluación es el trabajo de verdad.
Con 37.000 stars y desarrollo activo, ya pasó de largo la etapa experimental, pero te pide más por adelantado que cualquier otra opción de aquí.
Pydantic AI e Instructor: Estrechos a Propósito
Dos proyectos que resuelven menos, a propósito.
Instructor hace una cosa: salidas estructuradas. Defines un modelo Pydantic y se ocupa del schema, la validación y el bucle de reintento si es inválido. Esa es toda la biblioteca.
Una parte enorme del código de aplicaciones LLM es "sacar JSON válido con esta forma de un modelo", e Instructor es una respuesta completa a eso en unas pocas líneas, con prácticamente ningún overhead de framework. Si ese es tu requisito, adoptar un framework general para obtenerlo es un mal intercambio.
Pydantic AI es más amplio: un framework de agents "the Pydantic way", que lleva type safety, inyección de dependencias y salidas estructuradas a la construcción de agents. Es más joven que los demás y crece rápido, y atrae sobre todo a equipos ya invertidos en Pydantic y type checking.
Elige estos cuando el problema está bien definido y preferirías una biblioteca a un framework. La distinción importa: una biblioteca es algo que llamas, un framework es algo que te llama a ti, y lo segundo es mucho más difícil de dejar.
Semantic Kernel: Empresa y Multilenguaje
El framework de Microsoft, y el que hay que considerar cuando Python no es toda la historia.
Sus rasgos distintivos son el soporte de primera clase en .NET, Python y Java, y una arquitectura construida en torno a plugins y planners que se mapea a patrones de integración empresarial.
Elígelo cuando estás en un equipo .NET, cuando necesitas los mismos conceptos en varios lenguajes, o cuando las decisiones de plataforma de tu organización apuntan en esa dirección. Son restricciones reales y a menudo decisivas con independencia del mérito técnico.
Para un proyecto solo en Python sin esa restricción, las opciones nativas de Python suelen tener más momentum en el ecosistema.
LangGraph: La Alternativa Dentro de LangChain
Conviene separarlo, porque a menudo es lo que la gente realmente quiere cuando dice que quiere una alternativa.
LangGraph —del mismo equipo, licencia MIT, en 1.2.11— se describe como para "building stateful, multi-actor applications with LLMs". Es un modelo de ejecución en grafo con estado explícito, no una abstracción de chain.
La distinción importa porque la mayoría de las quejas sobre LangChain tienen que ver con el flujo de control oculto. LangGraph convierte el flujo de control en lo que escribes: nodos, aristas, transiciones condicionales y un objeto de estado que defines. Eso es bastante más legible cuando algo falla a las tres de la madrugada.
Elígelo cuando tu aplicación tiene estado de verdad, ramificaciones o ciclos: un agent que hace bucles, un flujo con pasos de aprobación, cualquier cosa en la que "qué pasa después" dependa de lo que pasó antes. Se puede usar sin adoptar el resto de LangChain.
Sin Framework: El Caso a Favor
La opción que omiten la mayoría de los artículos de comparación, y la respuesta correcta para una parte sustancial de las aplicaciones.
Los SDK de los proveedores de modelos ya son buenos. Llamar a uno directamente son unas pocas líneas, y es completamente transparente:
response = client.messages.create(
model=MODEL,
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
A lo que renuncias: abstracción de proveedor, integraciones prefabricadas, componentes de recuperación listos y el bucle de agent.
Lo que ganas: puedes leer tu propio código. El prompt enviado es el prompt del archivo. Depurar es leer una request y una response en vez de rastrear capas de framework. Tu árbol de dependencias es un SDK. Y las actualizaciones son las release notes del proveedor, no una guía de migración del framework.
Una posición intermedia razonable: usa bibliotecas estrechas para problemas concretos —Instructor para salidas estructuradas, un client de base de datos vectorial para recuperación, un client HTTP para tool calls— y escribe tú la orquestación. La orquestación suele ser cincuenta líneas, y cincuenta líneas que escribiste son más fáciles de mantener que un framework que no escribiste.
Cuándo un framework gana de verdad su sitio: cuando necesitas muchas integraciones de proveedor, cuando construyes agents con uso complejo de tools y quieres el bucle resuelto, cuando un equipo se beneficia de convenciones compartidas, o cuando la velocidad de prototipado importa más que la legibilidad en producción. Son razones reales y se aplican a proyectos reales.
El modo de fallo que hay que evitar es adoptar un framework por la demo y descubrir en producción que no puedes ver lo que hace.
Migrar Fuera de un Framework
Si ya tienes una aplicación LangChain y estás considerando el cambio, el trabajo es más predecible de lo que parece, y el orden importa.
Averigua primero qué está enviando de verdad. Antes de cambiar nada, captura los prompts y parámetros reales. La mayoría de los frameworks exponen un callback o un flag de debug para esto, y activarlo produce el artefacto más útil de todo el ejercicio: un registro de lo que hace tu aplicación, expresado como HTTP requests en vez de method calls. La mitad de las veces eso solo revela que el framework está haciendo algo que no pretendías.
Mueve un componente cada vez, no toda la aplicación. Las piezas se pueden separar. Sustituye el paso de recuperación por llamadas directas al client de la base de datos vectorial y deja el resto; confirma que la calidad de la salida no cambia; luego mueve la siguiente pieza. Un rewrite de un golpe mezcla "el código nuevo está mal" con "el código nuevo es distinto", y pierdes la capacidad de distinguir.
Mantén un harness de comparación de salidas. Ejecuta ambas implementaciones contra las mismas entradas y haz diff de los resultados. La recuperación y la generación son lo bastante no deterministas como para que "se ve bien" no sea evidencia, y cien salidas emparejadas te mostrarán una regresión que el spot-check no muestra.
Espera que las plantillas de prompt sean la parte difícil. Las plantillas de prompt de framework suelen incluir boilerplate que no escribiste y quizá no hayas leído: instrucciones de formato, output parsers, scaffolding few-shot. Reproducir el comportamiento implica reproducir eso, por eso capturar los prompts realmente enviados va primero.
Y sé honesto sobre si merece la pena. Una aplicación que funciona y te parece un poco opaca no es obviamente peor que una reescrita que entiendes y que tiene bugs nuevos. El caso para migrar es fuerte cuando el framework te está costando de forma activa —tiempo de debug, churn de actualizaciones, conflictos de dependencias— y débil cuando el motivo es estético. Los rewrites justificados por el gusto tienen un mal historial.
El camino intermedio realista para la mayoría de los equipos es dejar de añadir superficie nueva de framework en vez de quitar la existente. Componentes nuevos escritos directo; los viejos, en paz hasta que haya que cambiarlos de todos modos.
Cómo Elegir
Un procedimiento corto que resuelve la mayoría de los casos.
Anota lo que realmente necesitas. ¿Salidas estructuradas? ¿Recuperación? ¿Agents de varios pasos con tools? ¿Cambio de proveedor? La mayoría de los proyectos necesitan uno o dos de estos. Adoptar un framework general por uno solo es de donde viene el arrepentimiento.
Pruébalo primero sin framework. Medio día escribiendo directo contra un SDK te dice cuál es de verdad la parte difícil de tu problema, y esa respuesta suele apuntar a una biblioteca concreta, no a un framework general.
Empareja la herramienta con la parte difícil. La calidad de recuperación apunta a LlamaIndex. La calidad medible de la tarea con un conjunto de evaluación apunta a DSPy. La extracción estructurada apunta a Instructor o Pydantic AI. Los flujos stateful de varios pasos apuntan a LangGraph o Haystack. Empresa y multilenguaje apuntan a Semantic Kernel.
Sopesa el coste de salida. ¿Cuánto de tu código cambiaría si lo quitaras? Una biblioteca que llamas es barata de dejar; un framework dueño de tu flujo de control no lo es. Esa pregunta conviene hacerla antes de adoptar, no después.
Y no elijas solo por popularidad. Todas las opciones de aquí se mantienen activamente y tienen licencia permisiva. El tamaño del ecosistema importa para encontrar ejemplos, y no es lo mismo que el encaje con tu problema.
Preguntas Frecuentes
¿Cuál es la mejor alternativa a LangChain?
Depende de qué parte necesites. LlamaIndex para aplicaciones densas en recuperación, Haystack para pipelines de producción inspeccionables, DSPy para tareas con calidad medible, Instructor o Pydantic AI para salidas estructuradas, LangGraph para flujos stateful. Para muchas aplicaciones, llamar al SDK del proveedor directamente es la mejor opción.
¿Se sigue manteniendo LangChain?
Mucho. langchain estaba en 1.3.18 y langchain-core en 1.6.1 a finales de agosto de 2026, ambos con licencia MIT, y el repositorio está entre los más activos de la categoría. Gran parte de la crítica que circula describe versiones anteriores.
¿Necesito un framework para construir con LLMs?
No. Los SDK de los proveedores son directos, y una llamada directa son unas pocas líneas con transparencia total sobre lo que se envía. Los frameworks ganan su sitio con muchas integraciones, bucles de agent complejos o convenciones compartidas de equipo, y te cuestan la capacidad de ver qué está pasando.
¿LangChain o LlamaIndex?
LlamaIndex si la recuperación es la parte difícil: sus document loaders, estrategias de chunking y abstracciones de índice están más desarrollados. LangChain si necesitas composición amplia entre muchos proveedores y tools. Ambos han crecido hasta ser frameworks generales, así que la distinción es menor de lo que era.
¿Qué es DSPy y en qué se diferencia?
Trata los prompts como parámetros a optimizar, no como texto a escribir. Declaras entradas y salidas, defines una métrica, y el framework optimiza prompts y ejemplos few-shot contra tu conjunto de evaluación. Requiere un conjunto de evaluación, que es el coste real y también el beneficio real.
¿Es LangGraph una alternativa a LangChain?
Es del mismo equipo y se puede usar de forma independiente. Sustituye las abstracciones de chain por un grafo explícito de nodos, aristas y estado, lo que responde a la queja más común sobre LangChain: que el flujo de control está oculto. Para aplicaciones stateful o con ramificaciones, a menudo es lo que la gente realmente quería.
¿Qué framework de LLM es mejor para producción?
Haystack es el más explícitamente orientado a producción, con pipelines serializables que puedes versionar y revisar. LangGraph encaja en flujos stateful. Pero la opción más amable con la producción suele ser la de menos framework: código que puedes leer a las tres de la madrugada gana a abstracciones que tienes que rastrear.
¿Estos frameworks son gratis y open source?
Todos. LangChain, LangGraph, LlamaIndex, DSPy, Semantic Kernel, Pydantic AI e Instructor tienen licencia MIT; Haystack es Apache-2.0. Todos son permisivos, sin restricciones copyleft, y todos estaban en desarrollo activo en septiembre de 2026.
Conclusión
La pregunta del framework es en realidad una pregunta de alcance. Cada proyecto de aquí está bien mantenido y con licencia permisiva, así que la decisión no es de calidad: es de cuánto del flujo de control de tu aplicación quieres ceder.
Cede mucho y ganas velocidad hasta la primera versión que funciona, integraciones que no escribiste y un bucle de agent en el que no tuviste que pensar. Cede poco y ganas código que puedes leer, un árbol de dependencias que puedes auditar y un debug que consiste en mirar una request y una response.
El hábito que merece la pena es pasar primero medio día sin framework. Eso te dice cuál es de verdad la parte difícil de tu problema —y suele ser la calidad de recuperación, la validez de la salida estructurada o la evaluación, ninguna de las cuales un framework general resuelve mejor que una biblioteca enfocada.
Luego elige para ese problema concreto. LlamaIndex para recuperación, DSPy donde puedas medir calidad, Instructor o Pydantic AI para salidas estructuradas, LangGraph o Haystack donde importen el estado y la inspeccionabilidad, Semantic Kernel donde la decisión de plataforma ya esté tomada. Y mantén a la vista el coste de salida, porque la diferencia entre una biblioteca y un framework no es lo que hace por ti: es cuánto de tu código tiene que cambiar cuando dejas de usarla.
