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

Base de conhecimentos a partir de pares fonte/resumo

Nesta secção, discutiremos como criar um instantâneo de coleção de vectores para otimizar a recuperação de documentos de texto de formato longo. A abordagem consiste em criar duas colunas de texto num ficheiro CSV.

  • A primeira coluna é o texto de origem de formato longo do documento de conhecimento, como um capítulo de livro ou uma secção de markdown.
  • O texto-fonte longo é difícil de pesquisar. A segunda coluna é um resumo do texto de partida "fácil de pesquisar". Pode conter uma lista de perguntas que podem ser respondidas pelo texto-fonte da primeira coluna.

Vamos criar um instantâneo de vetor em que cada vetor é calculado a partir do texto de resumo (segunda coluna), mas o texto de origem recuperado para esse vetor é o da primeira coluna. O ficheiro de instantâneo pode então ser carregado por um nó Gaia como a sua base de conhecimentos.

Temos um script Python simples para criar ficheiros CSV devidamente formatados a partir de um conjunto de artigos ou capítulos. Veja como funciona.

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 criar embeddings a partir do ficheiro CSV.

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

Pode consultar o código-fonte do Rust aqui e modificá-lo se precisar de utilizar um esquema CSV diferente.

Em seguida, pode executar o programa passando o nome da coleção, a dimensão do vetor e o documento CSV. 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.csv e guarda-os na coleção predefinida.

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 embedding default 768 paris.csv --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 -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 \
csv_embed.wasm embedding default 768 londres.csv -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!