Publicado el Actualizado el 6 min de lectura

Construir Aplicaciones LLM Fácilmente con el Lenguaje de Expresión LangChain (LCEL)

En esta página

Imagina un mundo donde tu aplicación pueda entender el lenguaje tan fluidamente como un humano e incluso traducirlo a otro idioma al instante. ¿Suena futurista? Gracias a LangChain y su elegante Lenguaje de Expresión LangChain (LCEL), esto es totalmente posible hoy en día.

Este post explorará cómo construir una aplicación LLM (Modelo de Lenguaje Grande) simple y modular usando LCEL, específicamente para traducir de inglés a japonés. No es solo una app de traducción; es un modelo para cualquier flujo de trabajo de IA que involucre modelos de lenguaje. Si tienes curiosidad sobre cómo construir tu primera aplicación potenciada por LLM usando LCEL, estás en el lugar correcto.

Entendiendo LCEL: El Corazón del Flujo de Trabajo

El Lenguaje de Expresión LangChain (LCEL) es la innovación clave que hace que nuestra app LLM sea tanto simple como poderosa. A diferencia del código procedimental tradicional, LCEL utiliza un enfoque de tubería donde cada componente pasa su resultado al siguiente usando el operador | (pipe).

Así es como LCEL mejora el desarrollo:

  • Modular por Defecto: Cada componente (prompt, modelo, parser) es independiente y reemplazable.
  • Combinable: Puedes mezclar y combinar componentes para crear nuevas cadenas rápidamente.
  • Flujo Lógico Legible: Refleja el lenguaje natural: “Usa este prompt → procésalo con el modelo → analiza el resultado.”
  • Mejor Prueba: Los componentes pueden probarse individualmente, facilitando la depuración.

Este enfoque es especialmente poderoso en aplicaciones LLM, donde la secuencia de formato de entrada, inferencia del modelo y manejo de salida determina la precisión y utilidad de tu app.

Componentes Clave de una Aplicación LLM Simple

Estructura de la Aplicación LLM

Antes de profundizar en el código, es importante entender la estructura básica de cualquier aplicación LLM construida con LCEL. Aquí están los bloques de construcción principales:

  1. Plantilla de Prompt: Define cómo deseas comunicarte con el modelo de lenguaje. Puede ser dinámica (con entrada del usuario) o estática. En nuestro caso, es una plantilla para traducir texto de inglés a japonés.
  2. Modelo de Lenguaje Grande (LLM): Es el motor que procesa el prompt y genera la salida. Usamos GPT-4 de OpenAI por sus avanzadas capacidades multilingües.
  3. Parser de Salida: Dado que los LLM pueden devolver metadatos o formatos complejos, el parser de salida ayuda a extraer solo la parte que te interesa—generalmente texto plano.
  4. Cadena LCEL: Es donde ocurre la magia. LCEL te permite combinar los componentes anteriores en una sola tubería optimizada que maneja todo, desde la entrada hasta la salida.

Al separar estas preocupaciones, tu aplicación se mantiene simple, comprobable y escalable—perfecta tanto para la creación de prototipos como para la producción.

Guía Paso a Paso para Construir un Traductor de Inglés a Japonés con LCEL

Este post guiará a través de todo el proceso:

  1. Instalar dependencias
  2. Configurar el modelo GPT
  3. Crear un prompt estructurado
  4. Analizar las salidas del modelo
  5. Encadenar todo usando LCEL
  6. Desplegar con LangServe
  7. Interactuar con tu API

Paso 1: Instalar las Bibliotecas Necesarias

Comienza por instalar las bibliotecas que impulsarán tu aplicación.

pip install langchain langchain-openai fastapi uvicorn langserve[all]

Asegúrate de tener una cuenta de OpenAI y una clave de API lista.

Paso 2: Autenticar e Inicializar el LLM

En lugar de usar prompts en bruto, vamos a configurar nuestro entorno de manera segura y crear una instancia reutilizable de LLM.

import os
from langchain_openai import ChatOpenAI

# Almacena tu clave API de manera segura
os.environ["OPENAI_API_KEY"] = "tu_clave_openai_aquí"

# Inicializa el modelo de lenguaje (GPT-4 o GPT-3.5)
llm = ChatOpenAI(model="gpt-4")

Paso 3: Crear un Prompt Estructurado

Para hacer la aplicación flexible, utilizaremos una plantilla de prompt dinámica.

from langchain_core.prompts import ChatPromptTemplate

prompt_template = ChatPromptTemplate.from_messages([
    ("system", "Eres un traductor. Convierte la entrada del usuario de inglés a japonés."),
    ("user", "{input_text}")
])

Esta plantilla te permite cambiar fácilmente la entrada en inglés sin modificar la estructura.

Paso 4: Analizar la Salida

Los modelos de lenguaje devuelven más que solo cadenas simples. Vamos a centrarnos únicamente en la traducción principal usando un parser:

from langchain_core.output_parsers import StrOutputParser

parser = StrOutputParser()

Asegura que cualquier formato o metadato sea eliminado, dándote solo el resultado limpio.

Paso 5: Encadenar Todo Usando LCEL

LCEL hace que la encadenación de estos componentes sea tanto elegante como legible:

# Componer el flujo de trabajo completo usando LCEL
translation_chain = prompt_template | llm | parser

# Probar la cadena con una entrada de muestra
output = translation_chain.invoke({"input_text": "Good morning! Have a great day."})
print("Traducción al Japonés:", output)

Esta tubería es combinable, reutilizable y fácil de escalar. Puedes añadir pasos adicionales como validación o registro sin romper el flujo.

Paso 6: Añadir Depuración con LangSmith

LangSmith te ayuda a rastrear tu cadena paso a paso. Aquí te mostramos cómo habilitarlo:

import getpass

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass("Introduce la clave API de LangSmith: ")

Ahora, cada paso de tu flujo de trabajo LCEL se registra y visualiza a través de la interfaz de LangSmith.

Paso 7: Desplegar la Aplicación Usando FastAPI y LangServe

Tienes una aplicación funcional—pero ¿qué tal si quieres que otros la usen? Despleguémosla como una API REST.

Crea un archivo llamado translator_api.py:

from fastapi import FastAPI
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langserve import add_routes
import os

# Carga tu clave API
os.environ["OPENAI_API_KEY"] = "tu_clave_openai_aquí"

# Configura los componentes de LangChain
llm = ChatOpenAI()
parser = StrOutputParser()
prompt = ChatPromptTemplate.from_messages([
    ("system", "Traduce el siguiente texto en inglés a japonés."),
    ("user", "{input_text}")
])

# Componer la cadena de traducción
translation_chain = prompt | llm | parser

# Configura FastAPI con LangServe
app = FastAPI(title="Traductor de Inglés a Japonés", version="1.0")
add_routes(app, translation_chain, path="/translate")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Paso 8: Ejecutar el Servidor de API

Ahora lanza tu aplicación:

python translator_api.py

Navega a http://localhost:8000/translate/playground para probar tu aplicación usando el playground visual de LangServe.

Paso 9: Interactuar Programáticamente con Tu API

Interactuar con API

Una vez desplegada, puedes interactuar con ella desde otra aplicación o script:

from langserve import RemoteRunnable

# Conectar con tu API localmente en ejecución
api = RemoteRunnable("http://localhost:8000/translate/")
result = api.invoke({"input_text": "How are you today?"})
print("Resultado API:", result)

Hace que sea fácil integrar tu traductor en sistemas más grandes como chatbots, CRM o aplicaciones móviles.

Conclusión

Construir una aplicación LLM simple con LCEL abre emocionantes posibilidades para crear herramientas inteligentes y conscientes del lenguaje con mínima complejidad. Al encadenar prompts, modelos y parsers, los desarrolladores pueden diseñar flujos de trabajo limpios, modulares y que sean tanto poderosos como fáciles de mantener. Este post te guió a través de la creación de un traductor de inglés a japonés, pero los mismos principios aplican a innumerables otras aplicaciones. Con LangChain y LCEL, puedes escalar tus ideas desde un simple script hasta una API completamente desplegada en poco tiempo.

Artículos relacionados

Últimos artículos