Introducción a LangChain
Creación de un sistema de preguntas y respuestas con LangChain
Estructura y Uso de Langchain en Python
Carga de Modelos Open Source con Lanchain y Hugging Face
Uso de Modelos OpenAI con LangChain: Guía Práctica para Principiantes
Creación de Prompts Dinámicos con LangChain
Uso de Cadenas en Modelos de Lenguaje con Language Chain
Procesamiento de PDFs y creación de resúmenes con LangChain
Creación de Cadenas de Preguntas y Respuestas con Modelos de Lenguaje
Creación de cadenas secuenciales en Python para procesamiento de texto
Quiz: Introducción a LangChain
Casos de uso de LangChain
Aplicaciones y Beneficios de Lancheng en el Manejo de LLMs
Implementación de Lanchain y LLMs: Costos, Privacidad y Buenas Prácticas
Quiz: Casos de uso de LangChain
Manejo de documentos con índices
Carga de Documentos en Langchain para Creación de Índices
Fundamentos de la Clase Document en Langchain
Carga y Transformación de Documentos No Estructurados con Landship
Lectura de CSV y conversión a DataFrame de Pandas y LangChain
Creación de un Cargador de JSON-Lines Personalizado en Python
Fragmentación de Documentos con TextSplitter en Langsteam
Creación de un Chatbot con Documentación de Hugging Face
Creación de Índice Vectorial con Langchain y Embeddings
Quiz: Manejo de documentos con índices
Embeddings y bases de datos vectoriales
Creación de Índices con Embeddings y Bases de Datos Vectoriales
Creación y uso de embeddings con OpenAI y Lanchain
Modelos de Embeddings Open Source en Español con Sentence Transformers
Creación y Gestión de Bases de Datos Vectoriales con Chroma
Creación y manejo de bases de datos vectoriales con OpenAI Embeddings
Creación y Uso de un Retriever en Chroma para Consultas Avanzadas
Modelo de Chat para Preguntas y Respuestas con LangChain y Chroma
Creación de un Chatbot para Preguntas con Bases de Datos Vectoriales
Quiz: Embeddings y bases de datos vectoriales
Chats y memoria con LangChain
Memoria de Corto Plazo en Chatbots: Implementación y Optimización
Creación y Uso de Modelos de Chat con OpenAI y LangChain
Creación de Plantillas Dinámicas para Prompts de Chat en Langstead
Memoria en chatbots: Implementación con ConversationBufferMemory
Configuración de ConversationBufferWindowMemory en Chatbots
Memoria de Resumen de Conversaciones con Chat GPT-3.5
Gestión de Memoria en Chatbots con ConversationSummaryBufferMemory
Memoria de Entidades en Chatbots para Soporte de Ventas
Implementación de Chatbot con Memoria en Python usando Langchain
Quiz: Chats y memoria con LangChain
Evolución del uso de LLM
Creación de Chatbots con Modelos de Lenguaje y Bases de Datos Vectoriales
Aportes 34
Preguntas 17
Wow 🤯. Veo mucho campo de aplicación de LangChain para desarrollar aplicaciones muy útiles. Muy buen nivel de explicación por parte de Omar, felicidades 👏🏽
Les comparto mi código con leves modificaciones y con comentarios pertinentes.
# --- Carga de documents
import os
import requests
from dotenv import load_dotenv
from langchain.document_loaders import PyPDFLoader
# leo el archivo keys.env y obtengo mi Api KEY de OpenAI
load_dotenv("../secret/keys.env")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# Es importante que quede seteado como una variable de entorno porque será utilizado más adelante
os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY
urls = [
'https://arxiv.org/pdf/2306.06031v1.pdf',
'https://arxiv.org/pdf/2306.12156v1.pdf',
'https://arxiv.org/pdf/2306.14289v1.pdf',
'https://arxiv.org/pdf/2305.10973v1.pdf',
'https://arxiv.org/pdf/2306.13643v1.pdf'
]
ml_papers = []
for i, url in enumerate(urls):
filename = f'paper{i+1}.pdf'
# Verifico si el archivo no ha sido descargado previamente
if not os.path.exists(filename):
response = requests.get(url)
with open(filename, 'wb') as f:
f.write(response.content)
print(f'Descargado {filename}')
else:
print(f'{filename} ya existe, cargando desde el disco.')
loader = PyPDFLoader(filename)
data = loader.load()
ml_papers.extend(data)
# Utiliza la lista ml_papers para acceder a los elementos de todos los documentos descargados
print('Contenido de ml_papers:')
print()
print(type(ml_papers), len(ml_papers), ml_papers[3])
# --- Split de documents
# Los documentos NO pueden ser procesados directamente por LLMs porque contienen demasiado texto, sin embargo, podemos
# particionarlo en conjuntos de texto más pequeños para entonces poder acceder a su información.
from langchain.text_splitter import RecursiveCharacterTextSplitter
# Cada partición contendrá 1500 palabras, y tendrán una intersección de 200, de modo que la cadena 2 comparte 200
# palabras con la cadena 1 y con la cadena 3
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1500,
chunk_overlap=200,
length_function=len
)
documents = text_splitter.split_documents(ml_papers)
# Ahora podemos revisar de nuevo la cantidad de `documentos` y ver un ejemplo del mismo
print(len(documents), documents[10])
# --- Embeddings e ingesta a base de datos vectorial
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
# Crea un objeto capaz de convertir el texto a un vector utilizando como base el modelo de ADA-002 de OpenAI
# En este punto es importante que hayas seteado tu OPENAI API KEY como variable de entorno, para que puedas acceder
# a este servicio
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
# Con ayuda de Chroma, creamos un objeto vectorstore para almacenar las representaciones vectoriales de los textos
# contenidos en `documents` una cadena de texto previamente generada
vectorstore = Chroma.from_documents(
documents=documents,
embedding=embeddings
)
# Una vez que hayas creado la Base de datos vectorial, el parámetro search_kwargs `k` me permite definir hasta cuantos
# vectores similares voy a buscar al momento de encontrar información para una pregunta. `retriever` será entonces
# nuestra base de datos de vectores que servirá para añadir información reciente a los LLMs con el fin de responder
# preguntas.
retriever = vectorstore.as_retriever(
search_kwargs={"k": 3}
)
# --- Modelos de Chat y cadenas para consulta de información
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
# Voy a crear un objeto `chat` de la clase ChatOpenAI indicando que el engine a utilizar será GPT 3.5 y cuya temperatura
# será 0 lo que signfica que tendrá respuestas muy restrictivas basadas únicamente en el texto que conoce y tendrá
# poca creatividad al momento de responder peticiones.
chat = ChatOpenAI(
openai_api_key=OPENAI_API_KEY,
model_name='gpt-3.5-turbo',
temperature=0.0
)
# Finalmente, creamos una cadena `chain` del tipo `Question Answer` pregunta-respuesta. Como LLM utilizará al objeto
# `chat` que es una instancia de ChatGPT 3.5, el tipo de cadena es `stuff` que significa que vamos a utilizar tanta
# información como quepa en el prompt, y finalmente el `retriever` será la base de datos vectoriales que hemos definido
# previamente.
qa_chain = RetrievalQA.from_chain_type(
llm=chat,
chain_type="stuff",
retriever=retriever
)
# Vamos a poner a prueba nuestra cadena de preguntas y respuestas:
query = "qué es fingpt?"
print(query)
print(qa_chain.run(query))
query = "qué hace complicado entrenar un modelo como el fingpt?"
print(query)
print(qa_chain.run(query))
query = "qué es fast segment?"
print(query)
print(qa_chain.run(query))
query = "cuál es la diferencia entre fast sam y mobile sam?"
print(query)
print(qa_chain.run(query))
Extremadamente útil considerando que Llama 2 acaba de salir esta semana. Así que obligado a probarlo con llama2
Primer video del curso, y ya llovieron golpes de todos lados 😅
Majestuoso este curso e iniciando con todo
A despatar una habilidad nueva en la Vida!!
Buen inicio de curso, grandes expectativas…
Tremendo inicio del curso, grandes expectativas, buen contenido.
Es interesante que los archivos pdf están en inglés y aún así la chain responde en español. Digo curioso porque al hacer los embeddings en la base de datos vectorial están en inglés los chunks, y la pregunta se hace en español, y dicha pregunta en español se convierte a embedding para hacer búsqueda por similaridad a los textos guardados previamente en inglés. Me hace pensar que los embeddings de text-embedding-ada-002 de OpenAI son entrenados en múltiples lenguajes y extraen el contexto y contenido semántico de las palabras sin importar el lenguaje
Empezamos a todo vapor con el mejor Profesor de PLATZI !!!
Wow este curso empieza directo en la acción 🔥
Y si yo quiero entrenar a mi modelo con la información de una sitio web, (texto) y no poseo esa información en PDF, como puedo hacerlo ???
A diciembre del 2023, esto responde chatGPT.
User
qué es fingpt?
ChatGPT
Hasta mi última actualización de conocimientos en enero de 2022, no tengo información específica sobre “fingpt”. Puede que sea un término específico o una referencia a un proyecto o tecnología que haya surgido después de esa fecha, o podría ser un error tipográfico.
Empezó con todo esto!
ya quiero saber mas al respecto de este tema 😮
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?