logo

LangChain - Parte5

Chains

Esta vez he estado viendo Chains o cadenas. Se trata de utilizar un prompt como cadena del siguiente.

Para utilizar cadenas debemos utilizar LLMChain de manera que :

from langchain.chains import LLMChain

prompt = ('Eres un asistente virtual experto en {tema} y respondes con una lista de 3 conceptos clave '
          'sobre el mismo. Solo enumeras los tres conceptos.')

template = PromptTemplate.from_template(prompt)

cadena_LLM = LLMChain(llm=llm, prompt=template)

response = cadena_LLM.predict(tema='backend php')

Realiza una respuesta recuperando tres conceptos del tema que hayamos pasado como parámetro.

Utilizando SequentialChain podemos recuperar la salida anterior, y utilizar como entrada para la siguiente cadena tal que así:

prompt = ('Eres un asistente virtual que recibe una lista de conceptos de una area de conocimiento y debe devolver '
          'cual de esos conceptos es mejor aprender primero. La lista de conceptos son : {lista_conceptos}')

template = PromptTemplate.from_template(prompt)
cadena_inicio = LLMChain(llm=llm, prompt=template, output_key='donde_iniciar')

cadenas = SequentialChain(
    chains=[cadena_lista, cadena_inicio],
    input_variables=["tema"],
    output_variables=["lista_conceptos", "donde_iniciar"],
    verbose=True)

response = cadenas({'tema': 'economia'})

Esto es particularmente útil ya que podemos perfeccionar nuestros prompts y darle mayor potencia y versatilidad.

La diferencia con SimpleSequentialChain es que no devuelve un array, con las variables {lista_conceptos} y {donde_iniciar} embebidas, sino el texto como respuesta.

Por último, he estado utilizando LLMMathChain para operaciones matemáticas. He estado jugando con valores en texto, cambiando numerales por números y viceversa y cruzando los tipos de números, y el resultado es bastante acertado. He tenido que instalar un módulo para python con el siguiente comando:

pip install numexpr

cadena_mate = LLMMathChain(llm=llm, verbose=True) response = cadena_mate.run('cuánto es doscientos por 10 entre mil') print(response)

El último ejemplo visto ha sido TransformChain que tiene la peculiaridad de no utilizar un LLM sino que puede utilizarse para procesar un prompt, por ejemplo para limpiar o parsear un texto:

def eliminar_brincos(input):
    texto = input['texto']
    return {'texto_limpio': texto.replace('\n', '')}


cadena_transformacion = TransformChain(
    input_variables=['texto'],
    output_variables=['texto_limpio'],
    transform=eliminar_brincos
)

prompt = '\n este es un texto con \n saltos de linea \n\n que son un poco molestos\n'

response = cadena_transformacion.run(prompt)

print(response)