Saltar para o conteúdo principal
Versão: 1.0.0

Base de conhecimentos a partir de um ficheiro markdown

Nesta secção, discutiremos como criar um instantâneo de coleção de vectores a partir de um ficheiro markdown. O ficheiro pode então ser carregado por um nó Gaia como sua base de conhecimento.

O ficheiro markdown é segmentado em várias secções por títulos. Ver um exemplo. Cada secção é transformada num vetor e, quando recuperado, é adicionado ao contexto do prompt para o LLM.

Pré-requisitos

Instale o WasmEdge Runtime, o tempo de execução LLM multiplataforma.

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

Baixe um modelo de incorporação.

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

O modelo de incorporação é um tipo especial de LLM que transforma sentenças em vetores. Os vetores podem então ser armazenados em um banco de dados de vetores e pesquisados posteriormente. Quando as sentenças são de um corpo de texto que representa um domínio de conhecimento, esse banco de dados de vetores se torna nossa base de conhecimento RAG.

Iniciar um banco de dados vetorial

Por padrão, usamos Qdrant como o banco de dados de vetores. Você pode iniciar uma instância Qdrant iniciando um nó Gaia com um snapshot de conhecimento .

observação

Ou você pode iniciar um servidor Qdrant usando o Docker. O comando a seguir o inicia em 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

Crie o instantâneo da coleção de vetores

Exclua a coleção padrão, se ela existir.

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

Crie uma nova coleção chamada default. Observe que ela tem 768 dimensões. Esse é o tamanho do vetor de saída do modelo de incorporação nomic-embed-texto-v1.5. Se estiver usando um modelo de incorporação diferente, você deve usar uma dimensão que se ajuste ao modelo.

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

Descarregue um programa para segmentar o documento markdown e criar incorporações.

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

Ele divide o documento em pedaços com base em secções de markdown. Pode consultar o código-fonte do Rust aqui e modificá-lo se precisar de utilizar uma estratégia de fragmentação diferente.

Em seguida, pode executar o programa passando um nome de coleção, uma dimensão vetorial e o documento de origem. É possível passar o nível de título de remarcação para fragmentação desejado usando o parâmetro --nível_de_título opção. A opção --ctx_tamanho corresponde ao tamanho da janela de contexto do modelo de incorporação, que neste caso é de 8192 tokens, permitindo-lhe processar longas secções de texto. Certifique-se de que o Qdrant está a ser executado na sua máquina local. O modelo é pré-carregado com o nome embedding. A aplicação wasm utiliza então o modelo de incorporação para criar os vectores de 768 dimensões a partir de paris.md e guarda-os na coleção predefinida.

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 embedding default 768 paris.md --heading_level 1 --ctx_size 8192

Opções

Você pode passar as seguintes opções para o programa.

  • Usando -c ou --ctx_tamanho para especificar o tamanho do contexto da entrada. O padrão é 512.
  • Usando -l ou --nível_de_título para especificar o nível do título markdown para cada vetor. O valor predefinido é 1.
  • Usando -m ou --comprimento_máximo_do_contexto para especificar um comprimento de contexto no argumento CLI. Isto é para truncar e avisar para cada segmento de texto que ultrapassa o comprimento do contexto.
  • Usando -s ou --id_vetor_de_início para especificar o ID do vetor inicial no argumento CLI. Isso nos permitirá executar este aplicativo várias vezes em vários documentos na mesma coleção de vetores.

Exemplo: o exemplo acima, mas para anexar o guia de Londres ao final de uma coleção existente, começando no índice 42.

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

Crie um instantâneo vetorial

Você pode criar um snapshot da coleção, que pode ser compartilhado e carregado em um banco de dados Qdrant diferente. Você pode encontrar o arquivo snapshot no instantâneos do qdrant diretório, ou o ~/gaianet/qdrant/instantâneos diretório no nó Gaia.

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

Também recomendamos que você compacte o arquivo de instantâneo.

tar czvf meu.instantâneo.tar.gz meu.instantâneo

Por fim, carregue o meu.instantâneo.tar.gz arquivar para Huggingface para que o O nó Gaia pode ser baixado e usado.

Próximas etapas

Diverte-te!