Dominando la Ingeniería de Prompt para Aplicaciones de LLM con LangChain

Dominando la Ingeniería de Prompt para Aplicaciones de LLM con LangChain' - 'Mastering Prompt Engineering for LLM Applications with LangChain

Introducción

En la era digital, las aplicaciones basadas en el lenguaje juegan un papel vital en nuestras vidas, impulsando diversas herramientas como chatbots y asistentes virtuales. Aprenda a dominar la ingeniería de indicaciones para aplicaciones de LLM con LangChain, un marco de trabajo de Python de código abierto que ha revolucionado la creación de aplicaciones de vanguardia impulsadas por LLM. Esta guía tiene como objetivo equipar a los lectores con los conocimientos y herramientas necesarios para crear aplicaciones de lenguaje dinámicas y contextuales utilizando LangChain. Exploraremos la gestión de indicaciones, aprovechando LLM adicionales y datos externos, y dominando el encadenamiento para aplicaciones de lenguaje sofisticadas. Ya sea que sea un desarrollador o un entusiasta de la IA, esta guía lo ayudará a desatar el poder del lenguaje y convertir sus ideas de aplicaciones LLM en realidad con LangChain.

Objetivos de aprendizaje

  • Comprender los fundamentos de LangChain y sus aplicaciones.
  • Aprender técnicas efectivas de ingeniería de indicaciones para mejorar las aplicaciones impulsadas por LLM.
  • Dominar el arte del encadenamiento para crear aplicaciones de lenguaje inteligentes y contextuales.
  • Crear aplicaciones de lenguaje del mundo real utilizando LangChain, aplicando los conocimientos adquiridos a lo largo de la guía.
  • Mantenerse actualizado con los últimos avances y desarrollos en ingeniería de indicaciones y aplicaciones de LLM.

Este artículo fue publicado como parte del Data Science Blogathon.

¿Qué son los Modelos de Lenguaje Grande (LLMs)?

Los Modelos de Lenguaje Grande son sistemas de IA robustos construidos sobre arquitecturas de aprendizaje profundo entrenados con grandes cantidades de datos. Estos modelos pueden comprender patrones de lenguaje complejos, matices y contexto, lo que los hace competentes en la traducción de idiomas, generación de texto, resumen y más. Un ejemplo destacado de un LLM es el modelo GPT (Generative Pre-trained Transformer) de OpenAI.

¿Qué es LangChain?

LangChain es una plataforma integral de código abierto que ofrece una suite de herramientas, componentes e interfaces para simplificar el proceso de construcción de aplicaciones impulsadas por modelos de lenguaje grandes. El objetivo principal de la plataforma es permitir a los desarrolladores integrar de manera fluida capacidades de procesamiento de lenguaje en sus aplicaciones sin tener que empezar desde cero. LangChain proporciona un enfoque fácil de usar y eficiente para gestionar las interacciones con LLMs, vinculando de manera fluida diferentes componentes e incorporando recursos como APIs y bases de datos.

Aplicaciones de LangChain

LangChain, un marco de trabajo de código abierto diseñado para facilitar el desarrollo de aplicaciones impulsadas por modelos de lenguaje grandes (LLMs), ofrece muchas aplicaciones potenciales en procesamiento de lenguaje natural (PLN) y más allá. Aquí se presentan algunas de las aplicaciones clave de LangChain:

  1. Chatbots y Asistentes Virtuales: LangChain permite a los desarrolladores crear chatbots inteligentes y asistentes virtuales para mantener conversaciones en lenguaje natural con los usuarios. Estos chatbots pueden ayudar a los usuarios en diversas tareas, responder preguntas, brindar soporte al cliente y ofrecer recomendaciones personalizadas.
  2. Utilidades de Traducción de Idiomas: Con LangChain, los desarrolladores pueden construir herramientas de traducción de idiomas que facilitan la comunicación fluida entre diferentes idiomas. Los usuarios pueden ingresar texto en un idioma y la aplicación puede generar traducciones precisas en el idioma objetivo deseado.
  3. Herramientas de Análisis de Sentimiento: LangChain se puede utilizar para desarrollar aplicaciones de análisis de sentimiento que evalúen las emociones y opiniones expresadas en el texto. Las empresas pueden utilizar estas herramientas para comprender las opiniones de los clientes, analizar el sentimiento en las redes sociales y monitorear la reputación de la marca.
  4. Resumen de Texto: Los desarrolladores pueden aprovechar LangChain para crear aplicaciones de resumen de texto que generen automáticamente resúmenes concisos de textos más largos. Estas herramientas de resumen son valiosas para extraer rápidamente información clave de grandes volúmenes de texto.
  5. Generación de Contenido: LangChain permite desarrollar aplicaciones de generación de contenido para producir textos creativos y coherentes basados en indicaciones predefinidas. Esto puede ser útil en marketing de contenido, escritura creativa y generación de mensajes personalizados.

Configuración de LangChain y OpenAI en Python

Instalación con pip

pip install langchain
pip install openai

Instalación con conda

conda install langchain -c conda-forge
conda install -c conda-forge openai

Esto configurará los elementos necesarios de LangChain. Sin embargo, el verdadero poder y versatilidad de LangChain se hacen realidad cuando se integra de manera fluida con diversos proveedores de modelos, almacenes de datos y otros componentes esenciales.

Cómo construir una aplicación de modelo de lenguaje en LangChain?

LangChain proporciona una clase LLM para interactuar con varios proveedores de modelos de lenguaje, como OpenAI, Cohere y Hugging Face. La funcionalidad más básica de un LLM es generar texto.

import os
os.environ["OPENAI_API_KEY"] = ""
  • La clave de API de OpenAI es un código único que identifica tus solicitudes a la API de OpenAI. Se utiliza para autenticar tus solicitudes y controlar tu acceso a la API.
  • Para utilizar la API de OpenAI, debes crear una cuenta y generar una clave de API. Una vez que tengas tu clave de API, puedes comenzar a hacer solicitudes a la API.

Gestión de plantillas de indicación para LLMs en LangChain

El módulo OpenAI proporciona una clase que se puede utilizar para acceder a la API de OpenAI. El módulo LLMChain proporciona una clase que puede encadenar varios modelos de lenguaje.

El código crea entonces una instancia de la clase OpenAI y establece el parámetro de temperatura en 0.7. El parámetro de temperatura controla la creatividad del texto generado por la API de OpenAI. Una temperatura más alta producirá texto más creativo, mientras que una temperatura más baja producirá texto más predecible.

from langchain.llms import OpenAI
from langchain.chains import LLMChain

llm = OpenAI(temperature=0.7)

Un PromptTemplate en LangChain te permite utilizar plantillas para generar una indicación. Esto es útil cuando se utiliza el mismo esquema de indicación en varios lugares pero con ciertos valores cambiados.

from langchain import PromptTemplate

Plantilla de indicación 1: Actuar como un Rol

Hemos configurado un LLMChain que actúa como asesor financiero capaz de explicar los conceptos básicos del impuesto sobre la renta u otro concepto financiero especificado por el usuario. Cuando se ejecuta, la cadena explicará fácilmente el concepto financiero.

template1 = '''Quiero que actúes como un asesor financiero para las personas.
De manera sencilla, explica los conceptos básicos de {financial_concept}.'''

prompt1 = PromptTemplate(
    input_variables = ['financial_concept'],
    template = template1
)

prompt1.format(financial_concept='impuesto sobre la renta')

chain1 = LLMChain(llm=llm,prompt=prompt1)
chain1.run('impuesto sobre la renta')
Impuesto sobre la renta
chain1.run('PIB')
PIB

Plantilla de indicación 2: Traducción de lenguaje

Hemos configurado un LLMChain capaz de traducir una oración del inglés al hindi y francés. Cuando se ejecuta, la cadena tomará la oración “¿Cómo estás?” y el idioma objetivo ‘hindi’ y ‘francés’ como entradas, y el modelo de lenguaje generará la salida traducida en hindi y francés como respuesta.

template2='''De manera sencilla, traduce la siguiente oración '{sentence}' al {target_language}'''

language_prompt = PromptTemplate(
    input_variables = ["sentence","target_language"],
    template=template2
)

language_prompt.format(sentence="¿Cómo estás?",target_language='hindi')

chain2 = LLMChain(llm=llm,prompt=language_prompt)

data = chain2({
    'sentence':"¿Cuál es tu nombre?",
    'target_language':'hindi'
})

print("Oración en inglés:", data['sentence'])
print("Idioma objetivo:", data['target_language'])
print("Texto traducido:")
print(data['text'])
Hindi
data = chain2({
    'sentence':"Hola ¿Cómo estás?",
    'target_language':'francés'
})

print("Oración en inglés:", data['sentence'])
print("Idioma objetivo:", data['target_language'])
print("Texto traducido:")
print(data['text'])
Francés

Plantilla de Instrucciones 3: Guía de Viaje

Hemos creado una aplicación impulsada por un modelo de lenguaje que proporciona recomendaciones de viaje para India. El modelo de lenguaje responderá con tres puntos específicos de cosas que hacer mientras se viaja a India, basado en la información proporcionada en la plantilla de instrucciones.

template3 = """ Estoy viajando a {location}. ¿Cuáles son las 3 principales cosas que puedo hacer mientras estoy allí?
Sé muy específico y responde en forma de tres puntos """


travel_prompt = PromptTemplate(
    input_variables=["location"],
    template=template3,
)

travel_prompt = travel_prompt.format(location='París')

print(f"LLM Output: {llm(travel_prompt)}")
Viaje a India

Combinando LLMs y Plantillas en Flujos de Trabajo de Múltiples Pasos

Motor de Búsqueda de Celebridades

MS Dhoni

Los usuarios pueden ingresar el nombre de una celebridad y la aplicación proporcionará información detallada sobre la celebridad, incluida su fecha de nacimiento y eventos significativos que ocurrieron en ese día.

# Cadena 1: Cuéntame sobre la celebridad
first_input_prompt = PromptTemplate(
    input_variables = ['name'],
    template = "Cuéntame sobre la celebridad {name}"
)
chain1 = LLMChain(
    llm=llm,
    prompt=first_input_prompt,
    output_key='person'
)

# Cadena 2: fecha de nacimiento de la celebridad
second_input_prompt = PromptTemplate(
    input_variables = ['person'],
    template = "¿Cuándo nació {person}?"
)
chain2 = LLMChain(
    llm=llm,
    prompt=second_input_prompt,
    output_key='dob'
)

# Cadena 3: 5 eventos importantes en ese día
third_input_prompt = PromptTemplate(
    input_variables = ['dob'],
    template = "Menciona 5 eventos importantes que ocurrieron alrededor de {dob} en el mundo"
)
chain3 = LLMChain(
    llm=llm,
    prompt=third_input_prompt,
    output_key='description'
)

# Combinar cadenas
from langchain.chains import SequentialChain
celebrity_chain = SequentialChain(
    chains=[chain1,chain2,chain3],
    input_variables=['name'],
    output_variables=['person','dob','description']
)

data = celebrity_chain({'name':"MS Dhoni"})
print("Nombre:", data['name'])
print("Fecha de Nacimiento:", data['dob'])
print("Descripción:")
print(data['person'])
print("Eventos Históricos:")
print(data['description'])
Descripción
Eventos Históricos

Generador de Nombres de Restaurantes

Los usuarios pueden ingresar un tipo de cocina y la aplicación responderá con un nombre sugerido para un restaurante de esa cocina y una lista de platos del menú para el restaurante sugerido.

# Cadena 1: Nombre del Restaurante
prompt_template_name = PromptTemplate(
    input_variables=['cuisine'],
    template="Quiero abrir un restaurante de comida {cuisine}. Sugiere un nombre elegante para esto."
)

name_chain = LLMChain(llm=llm, prompt=prompt_template_name, output_key="restaurant_name")

# Cadena 2: Platos del Menú
prompt_template_items = PromptTemplate(
    input_variables=['restaurant_name'],
    template="""Sugiere algunos platos del menú para {restaurant_name}. Devuélvelos como una cadena separada por comas"""
)

food_items_chain = LLMChain(llm=llm, prompt=prompt_template_items, output_key="menu_items")

# Combinar cadenas
from langchain.chains import SequentialChain
restaurant_chain = SequentialChain(
    chains=[name_chain, food_items_chain],
    input_variables=['cuisine'],
    output_variables=['restaurant_name', "menu_items"]
)

data = restaurant_chain({'cuisine':'India'})
print("Cocina:", data['cuisine'])
print("Nombre del Restaurante:", data['restaurant_name'])
print("Platos del Menú:")
print(data['menu_items'])
Restaurante

Conclusión

En conclusión, LangChain ha revolucionado el mundo de los Modelos de Lenguaje, proporcionando a los desarrolladores un marco de trabajo de Python de código abierto para construir sin esfuerzo aplicaciones de vanguardia alimentadas por Modelos de Lenguaje Grandes (LLMs, por sus siglas en inglés). Su integración perfecta con modelos fundamentales y fuentes de datos externas, junto con el soporte para la gestión de indicaciones y plantillas, simplifica el proceso de desarrollo y fomenta la creatividad. Desde chatbots hasta asistentes virtuales y utilidades de traducción de idiomas, LangChain ofrece una plataforma robusta que acelera el desarrollo de proyectos y promueve la innovación en el campo del procesamiento del lenguaje natural.

Aspectos clave

  • LangChain, un marco de trabajo de Python de código abierto, permite a los desarrolladores construir aplicaciones de vanguardia alimentadas por Modelos de Lenguaje Grandes (LLMs).
  • La integración perfecta con modelos fundamentales y fuentes de datos externas mejora las capacidades de las aplicaciones de lenguaje.
  • Técnicas efectivas de ingeniería de indicaciones permiten a los desarrolladores adaptar los LLMs para tareas específicas, creando aplicaciones de lenguaje conscientes del contexto.
  • LangChain acelera el desarrollo de proyectos, impulsa la innovación en el procesamiento del lenguaje natural y abre infinitas posibilidades para las aplicaciones de lenguaje.

El código y la implementación se han subido a Github en el repositorio de Langchain.

Espero que hayas encontrado útil este artículo. Conéctate conmigo en LinkedIn.

Preguntas frecuentes

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.