Ir al contenido principal
Versión: 2.0.0

Base de conocimientos a partir de un archivo markdown

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

El archivo markdown está segmentado en varias secciones por encabezados. Véase un ejemplo. Cada sección se convierte en un vector y, cuando se recupera, se añade al contexto 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 segmentar el documento markdown y crear incrustaciones.

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

Trocea el documento basándose en secciones Markdown. Puedes consultar el código fuente de Rust aquí y modificarlo si necesitas utilizar una estrategia de fragmentación diferente.

A continuación, puede ejecutar el programa pasando un nombre de colección, una dimensión vectorial y el documento fuente. Puede pasar el nivel de encabezado de marcado deseado para la fragmentación utilizando la opción --nivel_de_encabezamiento opción. En --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 paris.md y los guarda en la colección por defecto.

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

wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
markdown_embed.wasm incrustación por defecto 768 paris.md --heading_level 1 --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 -l o --nivel_de_encabezamiento para especificar el nivel de encabezado de marcado para cada vector. El valor predeterminado es 1.
  • 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 \
markdown_embed.wasm embedding default 768 london.md -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.

Guía en vídeo

Próximos pasos