探索 Chroma:开发者友好型向量数据库的初步指南

142 阅读3分钟

探索 Chroma:开发者友好型向量数据库的初步指南

引言

Chroma 是一个 AI 原生的开源向量数据库,旨在提升开发者的生产力和幸福感。它致力于为需要处理大规模数据的开发者提供简单而有效的解决方案。在这篇文章中,我们将探索如何使用 Chroma 来实现向量存储与检索,并提供相关的代码示例和一些实用建议。

主要内容

什么是 Chroma?

Chroma 是一个特别为 AI 用途设计的向量数据库。它使用 Apache 2.0 许可,允许用户在开放和灵活的环境中进行开发。Chroma 的目的是简化向量数据的存储和检索过程,尤其是在构建大型语言模型(LLMs)应用时。

安装与初始化

首先,我们需要安装 langchain-chroma 集成包来访问 Chroma 的功能。您可以运行以下命令进行安装:

pip install -qU "langchain-chroma>=0.1.2"

安装完成后,您无需任何额外的凭证即可开始使用 Chroma。为了实现更为高级的功能,如自动追踪模型调用,您可以设置 LangSmithAPI 密钥:

import os
import getpass

# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"

初始化向量存储

Chroma 允许从多个方向对向量存储进行初始化。以下示例展示了如何使用本地目录进行基本初始化:

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

# 使用API代理服务提高访问稳定性
embedding_function = OpenAIEmbeddings(model="text-embedding-3-large")

vector_store = Chroma(
    collection_name="example_collection",
    embedding_function=embedding_function,
    persist_directory="./chroma_langchain_db",  # 数据存储路径
)

管理向量存储

在创建向量存储后,您可以通过添加、更新或删除文档来管理存储内容。

添加文档

以下代码示例展示了如何向向量存储中添加文档:

from langchain_core.documents import Document
from uuid import uuid4

documents = [Document(page_content="Sample content", metadata={"source": "example"}, id=i) for i in range(5)]
uuids = [str(uuid4()) for _ in documents]

vector_store.add_documents(documents=documents, ids=uuids)
删除文档

可以通过指定 ID 来删除文档:

vector_store.delete(ids=[uuids[-1]])

查询向量存储

Chroma 提供了强大的检索功能,支持多种查询方法,如相似度搜索:

results = vector_store.similarity_search(
    "Sample query text", k=2, filter={"source": "example"}
)

for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

代码示例

一个完整的代码示例展示了如何初始化 Chroma、添加文档,并执行相似度搜索:

import os
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain_core.documents import Document
from uuid import uuid4

# 初始化
embedding_function = OpenAIEmbeddings(model="text-embedding-3-large")
vector_store = Chroma(
    collection_name="example_collection",
    embedding_function=embedding_function
)

# 添加文档
documents = [Document(page_content=f"Document content {i}", metadata={"source": "example"}, id=i) for i in range(3)]
uuids = [str(uuid4()) for _ in documents]
vector_store.add_documents(documents=documents, ids=uuids)

# 相似度检索
results = vector_store.similarity_search(
    "Document content", k=2
)

for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

  1. 初始化失败: 请确保所有必要的 langchain 包已正确安装,并检查网络连接或使用API代理服务。

  2. 检索结果不准确: 确保传入查询的向量是正确嵌入的,并且检索参数如 k 设定合理。

总结和进一步学习资源

Chroma 提供了高效和灵活的向量存储及检索方案,对于需要管理大量数据的 AI 应用开发者来说,是一个强大的工具。通过简单的安装与设置,开发者能够快速上手并构建复杂的应用程序。

进一步学习资源

参考资料

  1. Chroma 开源库文档
  2. LangChain 集成指南

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

---END---