Ir al contenido principal
Versión: 2.0.0

Base de conocimientos a partir de un archivo de texto sin formato

En esta sección, veremos cómo crear una instantánea de colección de vectores a partir de un archivo de texto plano. El archivo puede ser cargado por un nodo Gaia como su base de conocimiento.

El archivo de texto se segmenta en varios trozos mediante líneas en blanco. Véase un ejemplo. Cada trozo se convierte en un vector, y cuando se añade al contexto de consulta del LLM.

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
}
}'

Descarga un programa para trocear un documento y crear incrustaciones.

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

Segmenta el documento basándose en líneas vacías. Por lo tanto, DEBES preparar tu documento fuente de esta manera -- segmentar el documento en secciones de alrededor de 200 palabras con líneas vacías. Puedes consultar el código fuente de Rust aquí y modificarlo si necesitas utilizar una estrategia de fragmentación diferente.

En paragraph_embed.wasm NO rompería los listados de código incluso si hay líneas vacías en el listado.

A continuación, puede ejecutar el programa pasando un nombre de colección, una dimensión de vector y el documento fuente. Asegúrese de que Qdrant se está ejecutando en su máquina local. El modelo se carga previamente 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 paris_chunks.txt y los guarda en la colección predeterminada.

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

wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
paragraph_embed.wasm incrustación por defecto 768 paris_chunks.txt -c 8192

Opciones

Puede pasar las siguientes opciones al programa.

  • 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.
  • Utilizando -c o --tamaño_ctx para especificar el tamaño de contexto de la entrada. El valor predeterminado es 512.

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 \
paragraph_embed.wasm embedding default 768 london.txt -c 8192 -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.

Guía en vídeo

Próximos pasos