inteligencia_artificial:langchain:documentos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previa | |||
| inteligencia_artificial:langchain:documentos [2025/01/31 00:33] – [Base de datos vectorial] alberto | inteligencia_artificial:langchain:documentos [2025/01/31 00:44] (actual) – [Base de datos vectorial] alberto | ||
|---|---|---|---|
| Línea 206: | Línea 206: | ||
| En langchain existen más de 30 tipos de base de datos vectoriales diferentes que pueden [[https:// | En langchain existen más de 30 tipos de base de datos vectoriales diferentes que pueden [[https:// | ||
| - | En el siguiente ejemplo cargamos el texto de varios PDFs, dividimos la información en partes, usando los embeddings de Llama 3.2 pasamos las partes a vectores, y finalmente los guardamos en una base de datos vectorial de tipo Chroma por su simplicidad: | + | En el siguiente ejemplo cargamos el texto de varios PDFs, dividimos la información en partes, usando los embeddings de Llama 3.1 pasamos las partes a vectores, y finalmente los guardamos en una base de datos vectorial de tipo Chroma por su simplicidad: |
| <code python> | <code python> | ||
| + | from langchain_community.document_loaders import PyPDFLoader | ||
| + | # Cargamos los documentos | ||
| + | loaders = [ | ||
| + | PyPDFLoader(" | ||
| + | PyPDFLoader(" | ||
| + | PyPDFLoader(" | ||
| + | PyPDFLoader(" | ||
| + | PyPDFLoader(" | ||
| + | ] | ||
| + | |||
| + | docs = [] | ||
| + | for loader in loaders: | ||
| + | docs.extend(loader.load()) | ||
| + | |||
| + | # Troceamos los documentos | ||
| + | from langchain.text_splitter import RecursiveCharacterTextSplitter | ||
| + | text_splitter = RecursiveCharacterTextSplitter( | ||
| + | chunk_size = 500, | ||
| + | chunk_overlap = 50 | ||
| + | ) | ||
| + | |||
| + | splits = text_splitter.split_documents(docs) | ||
| + | |||
| + | # Definimos el modelo de embeddings | ||
| + | from langchain_ollama import OllamaEmbeddings | ||
| + | |||
| + | embedding = OllamaEmbeddings(model=" | ||
| + | |||
| + | # Guardamos los datos en una base de datos vectorial | ||
| + | from langchain_community.vectorstores import Chroma | ||
| + | |||
| + | # Definimos el directorio donde se guardará la base de datos vectorial | ||
| + | persist_directory = ' | ||
| + | |||
| + | # Eliminamos el directorio si ya existe, es decir, borramos la base de datos anterior antes de volver a lanzar el sript | ||
| + | import shutil | ||
| + | |||
| + | path = " | ||
| + | |||
| + | try: | ||
| + | shutil.rmtree(path) | ||
| + | print(f" | ||
| + | |||
| + | except FileNotFoundError: | ||
| + | print(f" | ||
| + | |||
| + | except Exception as e: | ||
| + | print(f" | ||
| + | |||
| + | # Creamos la base de datos vectorial | ||
| + | vectordb = Chroma.from_documents( | ||
| + | documents = splits, | ||
| + | embedding = embedding, | ||
| + | persist_directory = persist_directory | ||
| + | ) | ||
| + | |||
| + | # Vamos a realizar una consulta | ||
| + | question = "¿En qué parte de la península hay seres fantásticos como hadas y gnomos?" | ||
| + | docus = vectordb.similarity_search(question, | ||
| + | print(f" | ||
| + | |||
| + | print(f" | ||
| + | print(f" | ||
| + | print(f" | ||
| </ | </ | ||
| + | |||
| + | Al final del ejemplo anterior realizamos una búsqueda en la base de datos. | ||
| + | Al haber documentos duplicados, podemos obtener diferentes respuestas prácticamente iguales. | ||
| + | También puede ocurrir que se obtenga la información de algunos documentos (vectores), cuando hay otros más idóneos para la consulta realizada. | ||
| + | Veremos en el siguiente apartado // | ||
| ===== Métodos de extracción de información ===== | ===== Métodos de extracción de información ===== | ||
| Hay varios métodos a partir de los cuales se puede extraer la información más importante (la más similar vectorialmente) de las diferentes partes en que se dividió la información. | Hay varios métodos a partir de los cuales se puede extraer la información más importante (la más similar vectorialmente) de las diferentes partes en que se dividió la información. | ||
inteligencia_artificial/langchain/documentos.1738280028.txt.gz · Última modificación: por alberto
