向量資料庫Chromadb的入門資訊

网无忌發表於2024-07-06

一. 概述


Chromadb是比較年輕的向量資料庫,也是LangChain預設使用的向量資料庫,使用簡單,上手很容易。
官網地址:https://docs.trychroma.com/
Github:https://github.com/chroma-core/chroma

二. 安裝


官網的指南:https://docs.trychroma.com/getting-started

三. 使用模式

  1. 記憶體模式

    該模式下,資料不會被持久化。
import chromadb
# 建立客戶端
chroma_client = chromadb.Client()
# 建立集合
collection = chroma_client.create_collection(name="my_collection")
# 新增資料
collection.add(
  documents=["Document 1", "Document 2"],
  ids=["id1", "id2"]
)
# 查詢資料
results = collection.query(
  query_texts=["Document"],
  n_results=2
)
print(results)


2. 本地模式

該模式下,可在指定位置建立sqlite資料庫進行持久化。

import chromadb
client = chromadb.PersistentClient(path="/path/to/data")


3. 服務模式

首先啟動Chroma服務:

chroma run --path /db_path

之後在程式中連線該服務:

import chromadb
chroma_client = chromadb.HttpClient(host='localhost', port=8000)


使用服務模式時,客戶端不需要安裝全部的chromadb模組,只需要安裝chromadb-client即可:
pip install chromadb-client
此包是用於服務模式下的輕量級HTTP客戶機,具有最小的依賴佔用。

四. 建立和管理集合


集合(collection)是ChromaDB中儲存嵌入,文件和後設資料的地方,類似於關聯式資料庫中的表(table)。你可以用客戶端物件的create_collection方法建立一個集合,指定一個名稱:
collection = chroma_client.create_collection(name="my_collection")

還有一些其他常用的方法:

# 獲取一個存在的Collection物件
collection = chroma_client.get_collection("testname")

# 如果不存在就建立collection物件,一般用這個更多一點
collection = chroma_client.get_or_create_collection("testname")

# 檢視已有的集合
chroma_client.list_collections()

# 刪除集合
chroma_client.delete_collection(name="my_collection")

五. 向量模型


Chroma預設使用的是all-MiniLM-L6-v2模型來進行embeddings。
也可以直接使用官方預訓練的託管在Huggingface上的模型:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('model_name')

選擇非常多,可以點選官網檢視每種預訓練模型的詳細資訊:https://www.sbert.net/docs/sentence_transformer/pretrained_models.html


還可以使用其他第三方模型,包括第三方平臺,例如:

openai_ef = embedding_functions.OpenAIEmbeddingFunction(
    api_key="YOUR_API_KEY",
    model_name="text-embedding-ada-002"
)


比較吸引我的是,chromadb還支援整合Ollama中的模型進行embedding:

import chromadb.utils.embedding_functions as embedding_functions

ollama_ef = embedding_functions.OllamaEmbeddingFunction(
    url="http://localhost:11434/api/embeddings",
    model_name="llama2",
)

embeddings = ollama_ef(["This is my first text to embed",
                        "This is my second document"])


記錄一個適合中文向量化的模型:coROM中文通用文字表示模型
這是阿里旗下的Embedding模型,基於Pytorch的,等以後嘗試載入到Ollama,用起來就更方便了。

六. 連結


ChromaDB python 使用教程及記錄
向量資料庫Chroma極簡教程(含案例)

相關文章