Introducci贸n a LangChain

1

Desarrollo de aplicaciones con LLM utilizando LangChain

2

Estructura y m贸dulos de LangChain

3

Uso de modelos Open Source de Hugging Face

4

Uso de modelos de OpenAI API

5

Prompt templates de LangChain

6

Cadenas en LangChain

7

Utility chains

8

RetrievalQA chain

9

Foundational chains

Quiz: Introducci贸n a LangChain

Casos de uso de LangChain

10

Casos de uso de LangChain

11

驴C贸mo utilizar LangChain en mi equipo?

Quiz: Casos de uso de LangChain

Manejo de documentos con 铆ndices

12

驴C贸mo manejar documentos con 铆ndices en LangChain?

13

La clase Document

14

Document Loaders: PDF

15

Document Loaders: CSV con Pandas DataFrames

16

Document Loaders: JSONL

17

Document Transformers: TextSplitters

18

Proyecto de Chatbot: configuraci贸n de entorno para LangChain y obtenci贸n de datos

19

Proyecto de Chatbot: creaci贸n de documents de Hugging Face

Quiz: Manejo de documentos con 铆ndices

Embeddings y bases de datos vectoriales

20

Uso de embeddings y bases de datos vectoriales con LangChain

21

驴C贸mo usar embeddings de OpenAI en LangChain?

22

驴C贸mo usar embeddings de Hugging Face en LangChaing?

23

Chroma vector store en LangChain

24

Proyecto de Chatbot: ingesta de documents en Chroma

25

RetrievalQA: cadena para preguntar

26

Proyecto de Chatbot: cadena de conversaci贸n

27

Proyecto de Chatbot: RetrievalQA chain

Quiz: Embeddings y bases de datos vectoriales

Chats y memoria con LangChain

28

驴Para qu茅 sirve la memoria en cadenas y chats?

29

Uso de modelos de chat con LangChain

30

Chat prompt templates

31

ConversationBufferMemory

32

ConversationBufferWindowMemory

33

ConversationSummaryMemory

34

ConversationSummaryBufferMemory

35

Entity memory

36

Proyecto de Chatbot: chat history con ConversationalRetrievalChain

Quiz: Chats y memoria con LangChain

Evoluci贸n del uso de LLM

37

LangChain y LLM en evoluci贸n constante

Desarrollo de aplicaciones con LLM utilizando LangChain

1/37
Recursos
Transcripci贸n

Aportes 16

Preguntas 10

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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 馃憦馃徑

He hecho un Notion con apuntes del curso entero, lo pueden encontrar aqu铆. El curso es oro puro, de lo mejor que he visto en la plataforma. Saquenle provecho, tomen los scripts, 煤senlo con toda libertad. 隆Nunca paren de aprender!

Para quienes no lo saben, la API KEY de openai la pueden generar en https://platform.openai.com/account/api-keys, logeanose con su usuario

Hola comunidad.

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

Majestuoso este curso e iniciando con todo

Buen inicio de curso, grandes expectativas鈥

Tremendo inicio del curso, grandes expectativas, buen contenido.

Hola, 驴Soy el 煤nico que no puede cargar los Recursos del curso?
Hola, el c贸digo en los recursos de la clase.

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 ???

Empezamos a todo vapor con el mejor Profesor de PLATZI !!!

Empez贸 con todo esto!

ya quiero saber mas al respecto de este tema 馃槷

Wow este curso empieza directo en la acci贸n 馃敟

A despatar una habilidad nueva en la Vida!!