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

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de LangChain

Curso de LangChain

Omar Espejel

Omar Espejel

Proyecto de Chatbot: ingesta de documents en Chroma

24/37
Recursos

Aportes 3

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Si alguien es usuario gratuito de OpenAI no podrá cargar los datos desde la API dado el rate limit que tiene la plataforma (3 query por minuto y 200 por día). Intenté por cielo y tierra slicear los documentos, reducir el dataset y todo lo demás, pero no funcionó, se satura con 3 Documents a la vez (y el dataset genera más de 1000).

La solución será cargar el JSONL a una instancia de Colab y usar el embedding Instructor para inscrustar el dataset entero desde allí, luego lo persistiremos y descargaremos el contenido del folder a nuestro repo local.

Dejo mi código con algunas mejoras. Para filtrar a que documentos tiene acceso el retriver y como eliminar archivos para hacer un pipeline de carga de datos al agregar archivos o actualizarlos ```python from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma # Create an OpenAI embedding model to generate vector embeddings from text embeddings = OpenAIEmbeddings(model="text-embedding-3-small") vs_path = "vector_store" if not os.path.isdir(vs_path): # Create a Chroma vectorstore from a list of documents and embeddings vs = Chroma.from_documents( documents=documents, embedding=embeddings, persist_directory=vs_path ) else: vs = Chroma( embedding_function=embeddings, persist_directory=vs_path ) # Define metadata to search (filter by the field 'id') metadata_filter = {'id': 2} docs = vs.similarity_search("doc", k=3, filter=metadata_filter) docs # Convert the vectorstore into a retriever metadata_filter = {'id': 4} retriever = vs.as_retriever(search_kwargs={"k": 3, "filter": metadata_filter}) retriever.invoke("documentos") # Access the documents and metadata from the vectorstore all_data = vs._collection.get() # Extract the IDs and metadata ids = all_data['ids'] metadatas = all_data['metadatas'] # Function to filter metadata using a dictionary of attributes def filter_by_metadata(metadata, filter_dict): """ Check if all key-value pairs in the filter_dict match the metadata. If all conditions are met, return True. """ return all( metadata.get(key) == value for key, value in filter_dict.items() ) # Dictionary with the filters to apply (multiple attributes) filter_dict = { "source": '/content/documents.jsonl', "seq_num": 1 } # Filter the IDs based on the filter dictionary attributes filtered_ids = [ doc_id for doc_id, meta in zip(ids, metadatas) if filter_by_metadata(meta, filter_dict) ] # Delete the filtered IDs vs.delete(filtered_ids) print('documents:', len(vs._collection.get()['documents'])) print('metadatas:', len(vs._collection.get()['metadatas'])) print('ids:', len(vs._collection.get()['ids'])) ```from langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Chroma \# Create an OpenAI embedding model to generate vector embeddings from textembeddings = OpenAIEmbeddings(model="text-embedding-3-small")vs\_path = "vector\_store" if not os.path.isdir(vs\_path):    # Create a Chroma vectorstore from a list of documents and embeddings    vs = Chroma.from\_documents(        documents=documents,        embedding=embeddings,        persist\_directory=vs\_path    )else:    vs = Chroma(        embedding\_function=embeddings,        persist\_directory=vs\_path    )
**a Jan 2025:** Algunas librerías fueron deprecadas con este comando las pueden actualizar: `%%capture` `!pip install -U langchain-chroma langchain-openai langchain_community` Este es el código actualizado con estas nuevas librerías: ```js from utils import DocsJSONLLoader, get_file_path, get_openai_api_key from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings # Updated import from langchain_chroma import Chroma # Updated import for Chroma from rich.console import Console console = Console() recreate_chroma_db = False def load_documents(file_path: str): loader = DocsJSONLLoader(file_path) data = loader.load() text_splitter = RecursiveCharacterTextSplitter( chunk_size=1600, length_function=len, chunk_overlap=160 ) return text_splitter.split_documents(data) def get_chroma_db(embeddings, documents, path): if recreate_chroma_db: console.print("Recreando Chroma DB") return Chroma.from_documents( documents=documents, embedding=embeddings, persist_directory=path ) else: console.print("Cargando Chroma Existente") return Chroma(persist_directory=path, embedding_function=embeddings) def main(): documents = load_documents(get_file_path()) get_openai_api_key() embeddings = OpenAIEmbeddings(model='text-embedding-ada-002') vectorstore_chroma = get_chroma_db(embeddings, documents, "chroma_docs") console.print(f"[green]Documentos {len(documents)} cargados .[/green]") if __name__ == "__main__": main() ``` Happy Coding!!