一. 概述
Chromadb是比較年輕的向量資料庫,也是LangChain預設使用的向量資料庫,使用簡單,上手很容易。
官網地址:https://docs.trychroma.com/
Github:https://github.com/chroma-core/chroma
二. 安裝
官網的指南:https://docs.trychroma.com/getting-started
三. 使用模式
- 記憶體模式
該模式下,資料不會被持久化。
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極簡教程(含案例)