Los LLM han revolucionado nuestra forma de interactuar con las tecnologías de procesamiento del lenguaje natural (PLN). Gracias a estos avances, han surgido herramientas innovadoras que facilitan tareas complejas y permiten una interacción más fluida e intuitiva con los sistemas.
1. Q\A Agente LLM
Cuando se trata de documentos largos, como informes o artículos de investigación, la tarea de encontrar información precisa puede ser larga y tediosa.
¿Qué opinas de un LLM que pueda responder a cualquier tipo de pregunta sobre un corpus de texto dado?
Tomemos como ejemplo una carta escrita por el Presidente de la República Francesa Emmanuel Macron dirigiéndose a sus conciudadanos. Supongamos que desea buscar una información específica en este informe, ¡el uso de un Q\A le ahorraría mucho tiempo!
Pasemos a la implementación en Python: (Para el buen funcionamiento del caso de uso, no olvide importar las librerías necesarias e instalarlas si es necesario )
Puedes descargar la carta
Antes de empezar, no olvides conseguir tu clave openAI, disponible en el siguiente enlace
import os
from langchain import OpenAI
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.document_loaders import TextLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
# import your_openai_key
llm = OpenAI(temperature=0, openai_api_key = your_openai_api_key)
file_path = os.path.join(your_parent_directory, 'MacronLetter.txt')
if os.path.exists(file_path):
loader = TextLoader(file_path)
doc = loader.load()
print(f"You've {len(doc[0].page_content.split())} words in that letter and {len(doc[0].page_content)} characters .")
# Optimize performance
text_splitter = RecursiveCharacterTextSplitter(chunk_size=3000, chunk_overlap=350)
docs = text_splitter.split_documents(doc)
print("Number of docs : ", len(docs))
# Create Embedding vector
embeddings_vector = OpenAIEmbeddings(openai_api_key = your_openai_api_key)
search_vector = FAISS.from_documents(docs, embeddings_vector)
qa = RetrievalQA.from_chain_type(llm=llm, chain_type='stuff', retriever = search_vector.as_retriever())
query = "What is the third theme that president whanted to share ?"
print(query.upper() )
print(f"RESPONSE : {qa.run(query)}")
SOLUCIÓN:
You've 2352 words in that letter and 15003 characters .
Number of docs : 6
WHAT IS THE THIRD THEME THAT PRESIDENT WHANTED TO SHARE ?
RESPONSE : The third theme that the president wanted to share was the transition écologique, or ecological transition.
Genial, ¡funciona!
Las ventajas de este caso de uso son numerosas: mejora la productividad, permite acceder rápidamente a la información e incluso puede ayudar a resumir secciones enteras de un texto. Sin embargo, ¿cómo saber si nuestro LLM es fiable? ¡Evaluémoslo!
2. Evalúe su LLM con langchain
Evaluar el rendimiento de un modelo lingüístico es crucial para garantizar su pertinencia y eficacia en tareas específicas. Las herramientas de evaluación de LLM permiten probar y analizar el rendimiento de estos modelos utilizando varios criterios y puntos de referencia.
Estas herramientas proporcionan métricas detalladas sobre la coherencia y la relevancia contextual de la información.
Tomemos el texto de Emmanuel Macron y supongamos que usted (un Humano) ha leído el texto y que responde a 3 preguntas :
from langchain.evaluation.qa import QAEvalChain
chain = RetrievalQA.from_chain_type(llm=llm, chain_type='stuff', retriever = search_vector.as_retriever(), input_key = "question")
#Questions asked to Human
question_answer = [
{'question' : "How many major themes cover the issues in the national debate ?",
'answer' : "six"}, # Incorect
{'question' : "When will the national debate end ?",
'answer' : "March 15"} , # correct
{'question' : "Who has an essential role in the national debate ?",
'answer' : "the prime minister"} # Incorrect
]
Como corrector humano, hay dos respuestas incorrectas y una correcta.
Ahora, vamos a hacer la autoevaluación y mostrar las respuestas :
predictions = chain.apply(question_answer)
eval = QAEvalChain.from_llm(llm)
graded = eval.evaluate(question_answer,predictions, question_key='question', prediction_key='result',answer_key='answer')
for i, evaluation in enumerate(graded) :
print(f"Question {i+1} : {evaluation}")
SOLUCIÓN:
# Answers
Question 1 : {'results': ' INCORRECT'}
Question 2 : {'results': ' CORRECT'}
Question 3 : {'results': ' INCORRECT'}
¡Impresionante! Ahora sabemos implementar un Agente Q/A y probar su eficacia. Pasemos al último caso de uso.
3. Crear un Chatbot
Los chatbots se han convertido en herramientas esenciales para el compromiso del cliente, soporte en línea, y mucho más. Construir un chatbot simple pero efectivo es ahora más accesible con langchain.
Los chatbots son uno de los casos de uso más populares para los LLM. Las principales características de los chatbots son que pueden mantener conversaciones de larga duración y responder a las preguntas de los usuarios utilizando información relevante.
Si tu quieres aprender a como crear un chatbot con langchain te dejo el curso AQUI.
# Add a context
from langchain.prompts.prompt import PromptTemplate
from langchain.chains.llm import LLMChain
from langchain.llms import OpenAI
# Store history in memory
from langchain.memory import ConversationBufferMemory
# Simple template
template = """ You are a chatbot designed to answer general questions and provide information on a variety of topics.
{chat_history}
Human : {human_input}
chatbot : """
prompt = PromptTemplate(input_variables=['chat_history','human_input'], template= template)
memory = ConversationBufferMemory(memory_key='chat_history')
llm_chain = LLMChain(llm = llm, prompt = prompt, memory=memory, verbose=False)
llm_chain.predict(human_input = "Who discovered America ?")
SOLUCIÓN
"America was discovered by Christopher Columbus in 1492."
Estos chatbots pueden integrarse en sitios web, aplicaciones móviles o incluso plataformas de mensajería.
Observación : Puede añadir el parámetroverbose=True en LLMChain()
para mostrar el hilo con el historial.
llm_chain = LLMChain(llm = llm, prompt = prompt, memory=memory, verbose=True)
llm_chain.predict(human_input = "Who discovered America ?")
# > Entering new LLMChain chain...
# Prompt after formatting:
# You are a chatbot designed to answer general questions and provide information on a variety of topics.
# Human : Who discovered America ?
# chatbot :
# > Finished chain.
...
llm_chain.predict(human_input = "Who was Alfred Dreyfus ?")
# ...
# 'Alfred Dreyfus was a French military officer who was wrongly convicted of treason in 1894 ...
llm_chain.predict(human_input = "What was my first question ?")
# > Entering new LLMChain chain...
# Prompt after formatting:
# You are a chatbot designed to answer general questions and provide information on a variety of topics.
# Human: Who was Columbus Christophe?
# AI: Christopher Columbus was an Italian explorer who is credited with discovering the New World in 1492. He was sponsored by the Spanish monarchs, King Ferdinand and Queen Isabella, and his voyage led to the colonization of the Americas by Europeans. However, his actions also had a negative impact on the indigenous peoples of the Americas.
# Human : What was my first question ?
# chatbot :
'Your first question was "Who discovered America"'
Conclusión
El auge de las LLM ha allanado el camino a herramientas potentes e innovadoras, transformando nuestra interacción con la tecnología. Las tres herramientas que hemos destacado están ahí para facilitar tus tareas diarias y mejorar tu productividad. ¡Depende de ti utilizarlas según tus necesidades y sabiamente !