El primer paso para indexar los documentos a nuestro LLM será la carga desde diferentes fuentes hacia el formato Document.

Dividiremos el total del contenido de un pdf en un grupo de Documents con su respectiva content y metadata. Encontraremos decenas de document transformers según la fuente del documento y su formato, algunos son Airtable, Csv, Email, EPub, Microsoft Excel, Facebook chat, Pdf, Pandas Dataframe, entre muchísimos otros. Podemos leer sobre los Document loaders y Document transformers aquí.

Para cargar datos desectructurados haremos uso de la librería unstructed (fijada a 0.7.12 por un bug reciente a la hora de cargar el documento).

%%capture
!pip install langchain unstructured==0.7.12

Ahora usaremos la librería requests para descargar un paper y guardarlo en disco.

import requests

url = "<https://www.cs.virginia.edu/~evans/greatworks/diffie.pdf>"
response = requests.get(url)

with open("public_key_cryptography.pdf", "wb") as f:
  f.write(response.content)

Lo siguiente será cargar en memoria el pdf como Document, para esto usaremos la clase UnstructuredFileLoader desde langchain→document_loaders.

from langchain.document_loaders import UnstructuredFileLoader

Crearemos un objeto loader dando el path del documento y lo cargaremos con el método load, con esto estará en memoria.

loader = UnstructuredFileLoader(file_path="./public_key_cryptography.pdf")
data = loader.load()