Construir flujos de procesamiento de texto que combinen limpieza automática con modelos de lenguaje es una de las capacidades más prácticas que ofrece LangChain. Aquí se explica cómo crear una cadena secuencial que une dos cadenas fundacionales: una que limpia el texto y otra que lo parafrasea con un estilo personalizado.
¿Qué son las cadenas fundacionales y cómo se conectan?
Las cadenas fundacionales son los bloques básicos de LangChain. Cada eslabón de una secuencia es una cadena en sí misma, y al combinarlas se forma una cadena secuencial que procesa el texto paso a paso hasta obtener exactamente la respuesta deseada [0:08].
El ejemplo concreto trabaja con dos cadenas fundacionales:
- Una Transform Chain que limpia el texto de entrada.
- Una LLM Chain que parafrasea el texto limpio con un modelo de lenguaje.
¿Cómo funciona la Transform Chain para limpiar texto?
Antes de crear la cadena de transformación, se necesita una función de Python pura que reciba un diccionario y devuelva otro diccionario [1:05]. No hay inteligencia artificial en este paso, solo procesamiento con expresiones regulares.
La función limpiar_texto realiza dos operaciones principales:
- Eliminar emojis y símbolos: se usa la librería
re para definir un patrón regex que cubra un rango amplio de unicodes, y se sustituyen esas coincidencias por un espacio en blanco [1:30].
- Eliminar URLs: se quita todo lo que contenga
https o www, descartando cualquier enlace presente en el texto [2:02].
Al final, la función retorna un diccionario con la llave texto_limpio que contiene el resultado procesado.
¿Cómo se instancia la Transform Chain?
Se importa TransformChain desde la librería de chains de LangChain y se configura con tres parámetros [2:48]:
- input_variables: una lista con las variables de entrada, en este caso
["texto"].
- output_variables: una lista con las variables de salida, aquí
["texto_limpio"].
- transform: la función
limpiar_texto que acabamos de crear.
Al ejecutar .run() con un texto que incluye un URL y un emoji, el resultado es el texto sin enlaces ni emoticones [3:32].
¿Cómo se crea la LLM Chain que cambia estilo?
Para la segunda cadena se necesita un prompt template con dos variables de entrada: texto_limpio y estilo [4:01]. La instrucción le pide al modelo que parafrasee el texto con un estilo determinado, por ejemplo, como hablaría una persona de Perú.
Se importa LLMChain desde LangChain y se instancia con tres argumentos [4:40]:
- llm: el modelo de lenguaje, en este caso GPT-3.5 Turbo de OpenAI, aunque puede ser cualquier modelo compatible como uno de Hugging Face o Cohere.
- prompt: la plantilla creada previamente.
- output_key: el nombre de la variable de salida,
texto_final.
¿Cómo se unen las cadenas en una secuencia?
Se importa SequentialChain desde la librería de chains y se configura pasándole las cadenas en orden dentro del parámetro chains [5:28]. El argumento correcto es chains en plural, ya que se encadenan varias cadenas.
La configuración incluye:
- chains:
[cadena_que_limpia, cadena_que_cambia_estilo].
- input_variables:
["texto", "estilo"].
- output_variables:
["texto_final"].
El flujo de datos funciona así: la primera cadena recibe texto y produce texto_limpio. La segunda cadena toma texto_limpio —que coincide exactamente con el output de la anterior— más estilo, que viene directamente del usuario [6:17]. El resultado final es texto_final.
Al ingresar un texto sobre Monterrey con emojis de banderitas, caritas y URLs como visitaMonterrey.com, la cadena secuencial devuelve un texto sin emojis ni enlaces, parafraseado con el estilo seleccionado [7:05]. Por ejemplo, con estilo peruano el resultado incluye expresiones como "superchévere" y "bacán".
Las cadenas fundacionales son la base para construir cadenas de utilidad, que tienen un objetivo específico como limpiar y reformular texto. El reto propuesto es agregar una tercera cadena que genere un resumen del texto ya transformado, creando así una cadena secuencial de tres eslabones [7:55]. Comparte tu solución y cuéntanos qué caso de uso le encontraste.