Por qué una llamada a un LLM no es una aplicación: dónde encaja LangChain en una pipeline RAG
Aprenda qué hace realmente LangChain siguiendo el proceso de una aplicación de respuesta a preguntas en documentos, desde la carga del PDF hasta obtener una respuesta fundamentada, y descubra cuándo un marco alternativo es más adecuado.
Llamar a un modelo de lenguaje grande es sencillo: se envía una instrucción y se recibe texto como respuesta. Sin embargo, crear algo útil a partir de esa llamada no lo es tanto. Una aplicación real debe poder procesar documentos, identificar los pasajes relevantes, llevar un registro de la conversación, compilar instrucciones y presentar todo ello a través de una interfaz; el modelo es solo una de las partes que intervienen en este proceso. Este artículo explica qué es LangChain analizando precisamente toda esa maquinaria de soporte, utilizando como ejemplo práctico a un asistente para leer documentos. Después de leerlo, deberías poder describir cada etapa de un pipeline de recuperación de información, indicar qué tareas un framework como LangChain asume por ti y determinar si este o alguna de sus alternativas es adecuado para tu proyecto.
Qué es LangChain, en un párrafo
LangChain es un framework de código abierto para desarrollar aplicaciones basadas en modelos LLM. En lugar de proporcionarte un modelo directamente, te ofrece bloques modulares y herramientas integrales para todos los componentes relacionados con un modelo: plantillas de prompts, analizadores de salida, cargadores de documentos, recuperadores de información, sistemas de memoria, herramientas y los elementos que conectan todo ello. Funciona con los principales proveedores de modelos, se integra con una amplia gama de herramientas de terceros, es gratuito y está en desarrollo activo. Las aplicaciones típicas que se crean con él incluyen chatbots, sistemas de respuesta a preguntas, generación mejorada por recuperación de información (RAG) y agentes autónomos.
El cambio mental clave es que LangChain no es el LLM. Es la capa que permite al LLM trabajar junto con tus datos, tus prompts y tus usuarios. Si solo envías un prompt e imprimes la respuesta, no lo necesitas. En el momento en que tu aplicación tenga varios pasos, comenzarás a utilizar los mecanismos que ya ofrece LangChain.
Un mapa del territorio
Es útil ver todo el panorama antes de acercarse a los detalles. Aprender LangChain generalmente se divide en tres áreas, cada una basada en la anterior.
Conceptos básicos
Estas son las partes con las que interactúa toda aplicación de LangChain:
- el modelo general de componentes
- los modelos, es decir, los envoltorios alrededor de las APIs de chat y completación
- los prompts y plantillas de prompt
- el análisis de salida, para que el texto libre se convierta en datos estructurados
Generación mejorada por recuperación de información
RAG es la forma en que se permite a un modelo responder a partir de los propios documentos. Los componentes relevantes son:
- cargadores de documentos
- divisores de texto
- embeddings
- almacenes vectoriales
- recuperadores
- combinar todo lo anterior en una aplicación RAG funcional
Agentes
Los agentes permiten que el modelo decida qué acciones tomar. Los temas aquí abordados son:
- Herramientas y kits de herramientas
- Llamadas a herramientas
- Creación de un agente que las utilice
El resto de este artículo se centra en las dos primeras áreas, ya que explican por qué existe el framework en primer lugar.
El problema que resuelve LangChain
Un sistema LLM de producción rara vez se compone de una sola solicitud. Observe lo que incluso un asistente sencillo debe manejar:
- ingerir documentos
- ejecutar búsquedas semánticas
- generar y almacenar embeddings
- realizar generación mejorada mediante recuperación de información
- gestionar el contexto y el estado de la conversación
- orquestar una o más llamadas a LLM
- proporcionar una interfaz de chat
Cada uno de estos elementos se puede gestionar por separado. Cuando se conectan manualmente, se convierten en un laberinto de código personalizado donde cambiar el modelo, el almacén de vectores o el formato del prompt implica modificar varios archivos. El valor de LangChain radica en ofrecer una interfaz estándar y un conjunto de abstracciones reutilizables para cada tarea, de modo que las partes se integran fácilmente en una pipeline y pueden intercambiarse de forma independiente.
Ejemplo práctico: un lector de libros con IA
Imaginemos una aplicación en la que los usuarios suben libros o archivos PDF, los leen con un lector integrado y hacen preguntas a un asistente sobre lo que están leyendo. Piense en un libro de texto de aprendizaje automático: un estudiante podría preguntar sobre el equilibrio entre sesgo y varianza, cómo está estructurada una arquitectura específica de CNN, qué hace la retropropagación, cómo funcionan los mecanismos de atención o qué algoritmo de optimización es adecuado para un problema.
El asistente solo podrá responder correctamente si ve las páginas adecuadas. Ese único requisito implica toda una cadena de tareas: cargar el archivo subido, encontrar los pasajes relevantes para la pregunta, mantener coherente el historial de chat, crear una instrucción que combine la pregunta con esos pasajes y enviarla al modelo.
En esta aplicación, LangChain se encargaría de:
- cargar y analizar los documentos subidos
- conectar la interfaz de chat con el LLM
Esta es la ilustración más clara de por qué un LLM por sí solo no constituye una aplicación. El modelo proporciona la capacidad lingüística; todo lo que hace que la respuesta sea sobre este libro en particular proviene de los componentes que lo rodean.
Búsqueda semántica: encontrar texto por significado
El núcleo del lector de libros es la capacidad de extraer los pasajes adecuados de una gran colección. La búsqueda por palabras clave tiene dificultades aquí, ya que la pregunta de un estudiante rara vez utiliza las mismas palabras que el libro de texto. La búsqueda semántica resuelve esto mediante embeddings: vectores numéricos que colocan cerca en un espacio de alta dimensión a los fragmentos de texto con significados similares. La búsqueda entonces consiste en encontrar los vectores almacenados más cercanos al vector de la pregunta.
Un ejemplo sencillo
Supongamos que la consulta es “¿Cuál es la capital de Francia?”. Un sistema de búsqueda semántica no busca documentos que solo compartan tokens con la pregunta. Busca el pasaje cuyo significado sea el más cercano, que es un párrafo sobre París, en lugar de pasajes sobre Berlín o Madrid, aunque estos también traten sobre capitales europeas y podrían obtener buenas puntuaciones por palabras en común.
Esa es la diferencia práctica. Un motor de palabras clave clasifica según los términos coincidentes; un motor semántico clasifica según cuán cercanos estén los significados. En la práctica, muchos sistemas en producción combinan ambos, porque términos exactos como códigos de producto o mensajes de error siguen beneficiándose de la coincidencia de palabras clave.
Por qué es importante para las aplicaciones de LLM
Los modelos responden mucho mejor cuando reciben contexto relevante. Por lo tanto, una buena recuperación de información conduce directamente a:
- mejor recuperación de documentos
LangChain no implementa la búsqueda vectorial por sí mismo. Se integra con las partes necesarias para ello: modelos de embedding, bases de datos vectoriales, recuperadores y búsqueda de similitud, todo ello a través de interfaces consistentes.
De la pregunta a la respuesta fundamentada en seis pasos
Una vez que los documentos son buscables, responder a una pregunta sigue una secuencia predecible:
- El usuario hace la pregunta. La pregunta llega en lenguaje natural.
- La pregunta se convierte en vector. Se transforma en un vector para que pueda compararse por su significado y no solo por palabras exactas.
- Se recuperan los textos relevantes. El sistema obtiene los fragmentos o páginas cuyos vectores son los más similares.
- Se reúne la información de entrada. Los fragmentos recuperados y la pregunta original se combinan para formar la instrucción que se enviará al modelo.
- El modelo la procesa. La instrucción completa, con el contexto y la pregunta, se envía al LLM.
- Se obtiene una respuesta fundamentada. Dado que el modelo razona a partir del texto proporcionado en lugar de solo de su memoria, la respuesta es más precisa y más fácil de rastrear hasta su origen.
Cada flecha en esa lista representa una transferencia de datos entre componentes, y eso es exactamente lo que está diseñado para gestionar LangChain. Simplifica el proceso de recuperación, conecta los pasos de las instrucciones entre sí, maneja la memoria, inserta contexto en las instrucciones y coordina las llamadas al modelo. Este flujo de seis pasos constituye la base de cualquier sistema RAG. Si desea conocer más en profundidad sobre el proceso de recuperación en sí, nuestro artículo que explica cómo RAG recupera conocimiento actualizado bajo demanda lo aborda con más detalle.
La arquitectura completa de RAG
Los seis pasos mencionados anteriormente suponen que los documentos ya están indexados. Un sistema completo cuenta con dos pipelines: uno que prepara los documentos con antelación y otro que responde a las consultas según sea necesario.
Preparación de documentos para la búsqueda
Antes de que alguien pueda hacer una pregunta, cada documento debe convertirse en algo buscable:
- Cargar. El PDF se almacena, por ejemplo, en un bucket de AWS S3.
- Leer. Un cargador de documentos lee el archivo y extrae su texto para incluirlo en el proceso.
- Dividir. Un divisor de texto divide el texto en fragmentos o páginas más pequeñas. Esto es importante porque incluir todo un libro como un único vector mezclaría todos sus temas, y además los modelos tienen ventanas de contexto limitadas.
- Incluir en vector. Cada fragmento pasa por un modelo de inclusión en vector y se convierte en uno.
- Almacenar. Los vectores, junto con el texto que representan, se guardan en una base de datos de vectores.
Al final de esta etapa, el documento está listo para ser consultado. Por lo general, este proceso se ejecuta una vez por carga, no con cada pregunta.
Responder a una consulta
Cuando llega una pregunta, se ejecuta el segundo proceso:
- Incluir la consulta. La pregunta se convierte en un vector utilizando el mismo modelo de incrustación, de modo que queda en el mismo espacio que los fragmentos almacenados.
- Búsqueda. Una búsqueda de similitud encuentra los fragmentos más cercanos a la pregunta.
- Obtener contexto. Esos fragmentos se recuperan de la base de datos vectorial.
- Crear el prompt. El texto recuperado y la pregunta del usuario se combinan para formar un prompt del sistema.
- Llamar al modelo. El prompt final se envía a la API del LLM.
- Responder. El modelo devuelve una respuesta basada en el material recuperado.
Un detalle que confunde a los principiantes: la consulta y los documentos deben estar incrustados con el mismo modelo. Los vectores de dos modelos de incrustación diferentes no son comparables, y mezclarlos sin más arruina la calidad de la recuperación.
Lo que escribirías tú mismo de otra manera
Sin un framework, un equipo que desarrollara esto tendría que gestionar manualmente la creación de prompts, la lógica de recuperación, la inyección de contexto, las cadenas de múltiples pasos, la memoria, las integraciones con herramientas y la orquestación que los conecta. Nada de esto es conceptualmente difícil, pero todo eso suma, y tiende a vincular tu código estrechamente a un modelo y una base de datos específicos. Las abstracciones reutilizables de LangChain para cada uno de estos elementos te permiten desarrollar más rápido y cambiar componentes posteriormente con menos reescritura.
Lo que aporta el framework
Hay cuatro beneficios que se mencionan una y otra vez.
Cadenas como modelo de composición
Una cadena de enlaces conecta pasos como una plantilla de prompt, una llamada al modelo y un analizador de resultados en un único flujo de trabajo que se puede ejecutar, probar y reutilizar. En las versiones actuales esto se logra a través de Runnables y LCEL, que permiten conectar los componentes entre sí.
Código agnóstico al modelo
Dado que LangChain admite a los principales proveedores de LLM a través de una interfaz común, su aplicación no está atada a un solo proveedor. Cambiar de modelo se convierte en un cambio de configuración en lugar de una reescritura, lo cual es útil tanto para controlar costos como para probar modelos más recientes.
Un ecosistema amplio
El framework incluye o se conecta a un gran conjunto de componentes e integraciones: cargadores para muchos tipos de archivos, múltiples almacenes vectoriales, proveedores y herramientas de incrustación. Lo que probablemente necesite ya existe como una integración.
Memoria y estado
Las aplicaciones de conversación necesitan recordar lo que se dijo anteriormente. LangChain ofrece formas de gestionar el contexto, la memoria y el estado de las conversaciones a lo largo de las interacciones. El enfoque recomendado ha ido cambiando con las nuevas versiones, ya que las guías más recientes prefieren utilizar LangGraph para flujos de trabajo con estado; por lo tanto, consulte la documentación actual correspondiente a su versión.
Qué se puede crear con él
Los tipos de aplicaciones comunes incluyen:
- Chatbots conversacionales, donde los usuarios hablan con una IA en lenguaje natural.
- Asistentes de conocimiento, que ayudan a las personas a encontrar y comprender información en sus propios documentos o bases de conocimiento.
- Agentes de IA, que realizan tareas en múltiples pasos y deciden qué herramientas utilizar en cada etapa.
- Automatización de flujos de trabajo, donde un LLM es solo uno de los pasos de un proceso automatizado más amplio.
Cuándo considerar una alternativa
LangChain es una de las opciones entre varias, y cada alternativa tiene su propio enfoque:
- LlamaIndex se centra principalmente en conectar los LLM con datos externos y crear aplicaciones basadas en datos y RAG.
- Haystack está orientado a búsquedas, respuesta a preguntas, RAG y aplicaciones de tipo agente.
- Semantic Kernel es un SDK de código abierto de Microsoft que integra modelos de IA en software existente y coordina flujos de trabajo de IA de múltiples pasos.
- DSPy trata los sistemas de LLM como programas que deben optimizarse, en lugar de pedirte que elabores cada prompt manualmente.
- AutoGen está diseñado para aplicaciones en las que varios agentes colaboran y se comunican entre sí.
- CrewAI está diseñado para coordinar equipos de agentes que trabajan juntos en tareas.
- PydanticAI es un framework de Python para aplicaciones en producción y agentes que generan resultados estructurados y seguros desde el punto de vista tipológico.
Una regla práctica: si su aplicación se basa principalmente en la recuperación de datos propios, vale la pena comparar LlamaIndex o Haystack. Si lo que más le importa son los resultados con tipos definidos, considere PydanticAI. Si la colaboración entre múltiples agentes es el concepto central, AutoGen o CrewAI se adaptan a ese enfoque. La ventaja de LangChain radica en su amplitud, lo que lo convierte en una opción razonable por defecto cuando aún no está seguro de la forma que adoptará su aplicación. Para una comparación directa de las dos opciones más comunes, consulte nuestra comparación entre LangChain y LlamaIndex.
También es útil saber cuándo no recurrir a ningún framework. Una función que funciona con una sola solicitud, o un script pequeño que utiliza una única llamada al modelo junto con un prompt escrito a mano, suele ser más clara sin una capa de abstracción. Los frameworks resultan útiles a medida que aumenta el número de pasos y los componentes intercambiables.
Los elementos básicos que aprender a continuación
Una vez entendida la visión general, el siguiente paso lógico son los componentes individuales con los que se construye toda aplicación LangChain:
- Modelos, las interfaces para comunicarse con diferentes modelos de IA.
- Prompts, que determinan cómo el modelo responde a sus entradas.
- Cadenas, que conectan los componentes en flujos de trabajo.
- Índices, que vinculan las aplicaciones con conocimientos externos. La documentación más reciente tiende a describir esta área en términos de cargadores, almacenes vectoriales y recuperadores.
Entender de qué se encarga cada uno facilita mucho la lectura del código de LangChain y la decisión sobre qué componentes realmente necesita su propia aplicación.
Puntos clave
- Un LLM es solo un componente de una aplicación; la carga de datos, la recuperación, la elaboración de prompts, la memoria y la interfaz son todo lo demás, y es precisamente en construir todo eso donde LangChain le ayuda.
- La búsqueda semántica clasifica el texto por su significado mediante embeddings, y por eso encuentra el párrafo sobre París cuando se hace una pregunta sobre la capital de Francia.
- Un sistema RAG consta de dos pipelines: uno offline que carga, divide, incrusta y almacena documentos, y otro online que incrusta la consulta, obtiene el contexto, construye el prompt y llama al modelo.
- Siempre incruste las consultas y los documentos con el mismo modelo, de lo contrario la calidad de la recuperación disminuirá drásticamente.
- Las principales ventajas de LangChain son la composición basada en cadenas, la independencia de los proveedores, un amplio ecosistema de integración y herramientas para el estado y la memoria.
- Otras alternativas como LlamaIndex, Haystack, Semantic Kernel, DSPy, AutoGen, CrewAI y PydanticAI destacan aspectos diferentes; además, una función muy sencilla podría no requerir ningún framework en absoluto.
Lecturas relacionadas
- Mapeo RAG: Etapas del pipeline, componentes esenciales y el panorama de variantes — Entienda cómo funciona la generación mejorada por recuperación de información de principio a fin, qué componentes necesita un sistema RAG y cómo encajan las numerosas variantes de RAG en un mismo mapa.
- RAG explicado: Cómo los sistemas de IA recuperan conocimiento nuevo bajo demanda — Aprenda cómo funciona la generación mejorada por recuperación de información, desde el procesamiento en fragmentos y las embeddings hasta la búsqueda vectorial, para que los modelos de IA puedan responder preguntas sin necesidad de reentrenamiento.