Contenido del curso
Chat Models y Prompt templates
Cadenas en LangChain
- 10

Creación de Cadenas en LangChain con String Output Parser
04:53 min - 11

Gestión de Historial de Chat con LangChain
07:52 min - 12

Integración de Herramientas Claves en LangChain: Runnable, OutputParser, Streaming
Viendo ahora - 13

Creación de Chatbots Inteligentes con Memoria Conversacional
13:55 min - 14

Cadena de Procesos para Memoria Conversacional con GPT-3.5 Turbo
07:37 min
Carga de documentos en LangChain
Retrieval-augmented generation (RAG)
- 18

Gestión de Vectores de Texto con Chroma y LangChain
05:46 min - 19

Embeddings y su aplicación en modelos de lenguaje y RAG
08:19 min - 20

Pinecone: Implementación de Bases de Datos Vectoriales Escalables
14:16 min - 21

Creación de Chatbot RAG con LangChain y ChromaDB
12:52 min - 22

Construcción de un Asistente Conversacional con LangChain y RAG
13:44 min
Agentes en LangChain
Ecosistema de LangChain
Integración de Herramientas Claves en LangChain: Runnable, OutputParser, Streaming
Resumen
Construir agentes inteligentes que procesen datos de forma rápida y organizada requiere dominar cómo encadenar tareas, estructurar respuestas y mostrar resultados en tiempo real. Tres componentes de LangChain hacen esto posible: Runnable, Output Parser y Streaming. Comprender su integración te permitirá crear chatbots avanzados y escalables que manejan grandes volúmenes de información.
¿Qué es Runnable y cómo encadena tareas en LangChain?
Un Runnable es una unidad de trabajo que puede invocarse, transformarse y ejecutarse en secuencia o en paralelo [00:08]. En la práctica, funciona como una pieza de una cadena donde la salida de un paso se convierte en la entrada del siguiente.
Para comenzar, se instala el paquete principal con pip install langchain y se importan los módulos necesarios desde langchain_core:
python from langchain_core.runnables import RunnableLambda
El componente RunnableLambda permite envolver funciones lambda dentro de la cadena [01:12]. En LangChain Expression Language (LCEL), el símbolo pipe (|) conecta cada paso de la secuencia:
python sequence = RunnableLambda(lambda x: x + 1) | RunnableLambda(lambda x: x * 2) sequence.invoke(10)
Resultado: 22
- El primer lambda recibe
10, suma1y produce11. - El segundo lambda toma
11, multiplica por2y devuelve22.
¿Cómo guardar resultados intermedios con diccionarios?
Cuando necesitas conservar valores de pasos anteriores, puedes usar diccionarios dentro de la cadena [02:42]. Cada clave almacena el resultado de un proceso distinto:
python sequence = RunnableLambda(lambda x: x + 1) | { "index_1": RunnableLambda(lambda x: x), "index_2": RunnableLambda(lambda x: x * 5) } sequence.invoke(10)
{'index_1': 11, 'index_2': 55}
De esta forma, cada resultado queda accesible por su clave, lo que facilita la reutilización de datos dentro de flujos más complejos.
¿Cómo obtener respuestas en formato JSON con Output Parser?
Hasta ahora los resultados han sido strings o números simples. Sin embargo, en aplicaciones reales se necesitan formatos estructurados como JSON [03:31]. El JsonOutputParser transforma la salida del modelo en un objeto JSON válido.
Primero se importan los componentes necesarios:
python from langchain_core.output_parsers import JsonOutputParser from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI
Después se crea el modelo, el parser y el PromptTemplate [04:10]. Este último define el rol del modelo, cómo recibe la entrada del usuario y el formato de salida esperado:
python modelo = ChatOpenAI() parser = JsonOutputParser()
prompt = PromptTemplate( template="Answer the user query.\n{format_instructions}\n{query}", input_variables=["query"], partial_variables={"format_instructions": parser.get_format_instructions()} )
¿Cómo se construye la cadena completa?
Se encadenan los tres elementos con el operador pipe: prompt, modelo y parser [06:08].
python chain = prompt | modelo | parser response = chain.invoke({"query": joke_query})
El resultado es un diccionario con estructura JSON, no un texto plano. Esto es fundamental para integrar las respuestas en APIs o bases de datos.
¿Qué es Streaming y por qué mejora la experiencia del usuario?
Los modelos tardan en generar respuestas completas. La técnica de Streaming permite visualizar la construcción de la respuesta token por token, similar a como funciona ChatGPT [07:05].
Para implementarlo de forma síncrona se usa el método .stream() junto con la librería time:
python import time
s = chain.stream({"query": joke_query}) for chunk in s: print(chunk, end="", flush=True) time.sleep(0.3)
También existe la versión asíncrona con .astream() [08:00], que genera chunks progresivamente:
python chunks = [] async for chunk in chain.astream({"query": joke_query}): chunks.append(chunk) print(chunk, end="", flush=True) await asyncio.sleep(0.3)
- Cada chunk representa un fragmento parcial de la respuesta.
- El parámetro
flush=Truefuerza la impresión inmediata en pantalla. - El intervalo de
0.3segundos simula la generación progresiva.
Esta combinación de Runnable para orquestar flujos, Output Parser para estructurar datos y Streaming para entregar resultados en tiempo real forma la base para construir agentes conversacionales robustos. Ahora es tu turno: integra estos tres componentes para generar una conversación completa con un usuario y comparte tu solución en los comentarios.