Chroma é um aplicativo de banco de dados incorporado que é integrado ao nosso código na forma de um pacote. A vantagem do Chroma é a sua simplicidade. Se você precisa de um banco de dados de vetores para implementar a memória LLM no desenvolvimento de aplicativos LLM, ele suporta a pesquisa de linguagem de similaridade de texto e você não quer instalar um banco de dados de vetores independente, o Chroma é uma boa escolha. Atualmente, a biblioteca Chroma suporta duas linguagens: Python e JavaScript. Este tutorial é principalmente baseado em Python.

1. Instale o Chromadb

pip install chromadb

Nota: A versão atual do chromadb não é compatível com o Python 3.11. É recomendável fazer o downgrade da versão do Python.

2. Inicialize o cliente Chroma

import chromadb
chroma_client = chromadb.Client()

3. Crie uma coleção

Uma coleção é semelhante a uma tabela no banco de dados chroma, onde os dados vetoriais (incluindo documentos e outros dados de origem) são armazenados. Crie uma coleção da seguinte forma:

collection = chroma_client.create_collection(name="tizi365")

4. Adicione dados

Após definir uma coleção, adicione dados à coleção. O Chroma irá armazenar nossos dados e criar um índice vetorial especial com base no vetor dos dados de texto para facilitar consultas posteriores.

4.1. Calcular vetores usando o modelo de incorporação integrado

collection.add(
    documents=["Este é um documento", "Este é outro documento"],
    metadatas=[{"origem": "minha_origem"}, {"origem": "minha_origem"}],
    ids=["id1", "id2"]
)

4.2. Especificar valores vetoriais ao adicionar dados

collection.add(
    embeddings=[[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
    documents=["Este é um documento", "Este é outro documento"],
    metadatas=[{"origem": "minha_origem"}, {"origem": "minha_origem"}],
    ids=["id1", "id2"]
)

5. Consultar dados

Agora você pode consultar conteúdos de texto semelhantes, e o Chroma retornará "n" resultados mais similares. Abaixo está um exemplo de consulta de conteúdo de documento semelhante com base no parâmetro de consulta_texts:

results = collection.query(
    query_texts=["Este é um documento de consulta"],
    n_results=2
)

Por padrão, os dados no Chroma são armazenados na memória, portanto os dados são perdidos quando o programa é reiniciado. Claro, você pode configurar o Chroma para persistir os dados no disco rígido, para que o programa carregue os dados do disco ao iniciar.