Hemos corrido un script para descargar la documentación de Hugging Face desde Github, esto nos ha generado una base de datos gigante para investigar información. Lo siguiente será cargarla a través de LangChain y su formato de Documents. El fin de todo esto será tener un índice funcional con Chroma que podamos usar para hacer prompts mediante algún modelo de lenguaje.

Cargando documents

Crearemos un archivo ai_conversation.py dentro de la carpeta hashira, luego crearemos un entrypoint.

if __name__ == '__main__':
    main()

importaremos de LangChain→text_splitter el RecursiveCharacterTextSplitter, además, importaremos 2 funciones desde utils: DocsJSONLLoader y get_file_path.

from langchain.text_splitter import RecursiveCharacterTextSplitter

from utils import DocsJSONLLoader, get_file_path

Crearemos la función main, esta obtendrá el filepath de nuestra base de datos JSONL y cargaremos los documentos con la función load_documents que crearemos a continuación.

def main():
    path = get_file_path()
    documents = load_documents(path)

La función load_documents cargará a memoria el archivo JSONL en formato List[Document], luego crearemos un text splitter con una capacidad de 1600 caracteres y un chunk overlap de 160 (10% del tamaño original), finalmente retornaremos el nuevo split de documentos.

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)