Ir al contenido principal
Versión: 1.0.0

Base de conocimientos a partir de pares fuente / resumen

En esta sección, analizaremos cómo crear una instantánea de colección de vectores para una recuperación óptima de documentos de texto largos. El método consiste en crear dos columnas de texto en un archivo CSV.

  • La primera columna es el texto fuente largo del documento de conocimiento, como el capítulo de un libro o una sección de markdown.
  • El texto fuente largo es difícil de buscar. La segunda columna es un resumen "fácil de buscar" del texto fuente. Podría contener una lista de preguntas que pueden responderse con el texto fuente de la primera columna.

Crearemos una instantánea vectorial en la que cada vector se calcula a partir del texto resumido (segunda columna), pero el texto fuente recuperado para ese vector es de la primera columna. A continuación, un nodo Gaia puede cargar el archivo de instantáneas como su base de conocimientos.

Disponemos de un sencillo script en Python para crear archivos CSV con el formato adecuado a partir de un conjunto de artículos o capítulos. Vea cómo funciona.

Requisitos previos

Instale WasmEdge Runtime, el tiempo de ejecución LLM multiplataforma.

curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s

Descargar un modelo de incrustación.

curl -LO https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf

El modelo de incrustación es un tipo especial de LLM que convierte las frases en vectores. Los vectores pueden almacenarse en una base de datos vectorial y consultarse posteriormente. Cuando las frases proceden de un cuerpo de texto que representa un dominio de conocimiento, esa base de datos vectorial se convierte en nuestra base de conocimiento RAG.

Iniciar una base de datos vectorial

Por defecto, utilizamos Qdrant como base de datos vectorial. Puede iniciar una instancia Qdrant iniciando un nodo Gaia con una instantánea de conocimiento.

nota

O, puede iniciar un servidor Qdrant usando Docker. El siguiente comando lo inicia en segundo plano.

mkdir qdrant_storage
mkdir qdrant_snapshots

nohup docker run -d -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
-v $(pwd)/qdrant_snapshots:/qdrant/snapshots:z \
qdrant/qdrant

Crear la instantánea de la colección de vectores

Elimina la colección por defecto si existe.

curl -X DELETE 'http://localhost:6333/collections/default'

Crea una nueva colección llamada default. Observa que tiene 768 dimensiones. Ese es el tamaño del vector de salida del modelo de incrustación nomic-embed-text-v1.5. Si utiliza un modelo de incrustación diferente, deberá utilizar una dimensión que se ajuste al modelo.

curl -X PUT 'http://localhost:6333/collections/default' \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 768,
"distance": "Cosine",
"on_disk": true
}
}'

Descargue un programa para crear incrustaciones a partir del archivo CSV.

curl -LO https://github.com/GaiaNet-AI/embedding-tools/raw/main/csv_embed/csv_embed.wasm

Puedes consultar el código fuente de Rust aquí y modificarlo si necesitas utilizar un diseño CSV diferente.

A continuación, puede ejecutar el programa pasando un nombre de colección, una dimensión vectorial y el documento CSV. La página --tamaño_ctx coincide con el tamaño de la ventana de contexto del modelo de incrustación, que en este caso es de 8192 tokens, lo que le permite procesar largas secciones de texto. Asegúrese de que Qdrant se está ejecutando en su máquina local. El modelo está precargado con el nombre embedding. A continuación, la aplicación wasm utiliza el modelo de incrustación para crear los vectores de 768 dimensiones a partir de parís.csv y los guarda en la colección por defecto.

curl -LO https://huggingface.co/datasets/gaianet/paris/raw/main/paris.csv

wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
csv_embed.wasm incrustación por defecto 768 paris.csv --ctx_size 8192

Opciones

Puede pasar las siguientes opciones al programa.

  • Utilizando -c o --tamaño_ctx para especificar el tamaño de contexto de la entrada. El valor predeterminado es 512.
  • Utilizando -m o --longitud_máxima_del_contexto para especificar una longitud de contexto en el argumento CLI. Es decir, truncar y advertir por cada segmento de texto que supere la longitud de contexto.
  • Utilizando -s o --start_vector_id para especificar el ID del vector de inicio en el argumento CLI. Esto nos permitirá ejecutar esta aplicación varias veces en varios documentos de la misma colección de vectores.

Ejemplo: el ejemplo anterior pero para añadir la guía de Londres al final de una colección existente a partir del índice 42.

wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
csv_embed.wasm embedding default 768 london.csv -c 8192 -l 1 -s 42

Crear una instantánea vectorial

Puede crear una instantánea de la colección, que puede ser compartida y cargada en una base de datos Qdrant diferente. Puede encontrar el archivo de instantánea en el directorio qdrant_snapshots o el directorio ~/gaianet/qdrant/snapshots en el nodo Gaia.

curl -X POST 'http://localhost:6333/collections/default/snapshots'

También le recomendamos que comprima el archivo de instantáneas.

tar czvf mi.snapshot.tar.gz mi.snapshot

Por último, cargue el mi.instantanea.tar.gz a Huggingface para que el El nodo Gaia puede descargarlo y utilizarlo.

Próximos pasos

¡Que te diviertas!