1. 技术背景介绍
Chroma 是一个专注于开发者生产力和幸福感的 AI 原生开源向量数据库。它是 Apache 2.0 许可的,并且无缝集成了 LangChain,使得大规模文本处理和检索变得简单高效。无论是简单的文本嵌入还是复杂的检索任务,Chroma 都能轻松应对。本篇文章将带您从安装到高级使用,逐步了解如何利用 Chroma 启动并管理您的向量存储。
2. 核心原理解析
Chroma 的设计核心是向量化存储,它允许将文本数据转换为向量表示,以便更高效地进行相似性搜索和文档检索。通过与嵌入模型(如 OpenAI 和 HuggingFace)集成,Chroma 能够快速处理和存储大规模文本数据。我们将在本教程中演示如何初始化和管理 Chroma 向量存储,从而充分利用其强大的搜索能力。
3. 代码实现演示
安装和初始化
首先,您需要安装 LangChain 和 Chroma 的集成包:
pip install -qU "langchain-chroma>=0.1.2"
pip install -qU langchain-openai
pip install -qU langchain-huggingface
pip install -qU langchain-core
然后,我们可以初始化 Chroma 向量存储。以下是使用 OpenAI 和 HuggingFace 嵌入模型进行初始化的示例:
import os
import getpass
from langchain_openai import OpenAIEmbeddings
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_chroma import Chroma
# 使用 OpenAI 嵌入模型
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key:")
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
# 使用 HuggingFace 嵌入模型
embeddings = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")
vector_store = Chroma(
collection_name="example_collection",
embedding_function=embeddings,
persist_directory="./chroma_langchain_db", # 本地保存数据位置
)
管理向量存储
添加文档
from langchain_core.documents import Document
from uuid import uuid4
# 创建文档示例
documents = [
Document(page_content="Building an exciting new project with LangChain - come check it out!", metadata={"source": "tweet"}, id=1),
Document(page_content="Robbers broke into the city bank and stole $1 million in cash.", metadata={"source": "news"}, id=2),
# 添加更多文档...
]
# 生成 UUID 并添加到向量存储中
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
更新文档
# 更新现有文档
updated_document = Document(
page_content="I had chocolate chip pancakes and fried eggs for breakfast this morning.",
metadata={"source": "tweet"},
id=1,
)
vector_store.update_document(document_id=uuids[0], document=updated_document)
删除文档
# 删除特定文档
vector_store.delete(ids=uuids[-1])
查询向量存储
相似性搜索
# 执行相似性搜索
results = vector_store.similarity_search(
"LangChain provides abstractions to make working with LLMs easy",
k=2,
filter={"source": "tweet"},
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
4. 应用场景分析
Chroma 的向量存储适用于各种大规模文本处理任务,例如问答系统、推荐系统及搜索引擎优化等场景。通过将文本数据转化为向量形式,可以快速有效地进行相似性匹配和信息检索,极大提升应用的智能程度和响应速度。
5. 实践建议
- 合理选择嵌入模型:根据实际需求选择合适的嵌入模型,以平衡性能和精度。
- 定期更新和管理数据:确保向量存储中的数据是最新的,以提高检索结果的相关性。
- 利用高级搜索功能:尝试不同的搜索策略(如 MMR 搜索),以优化检索效果。
如果遇到问题欢迎在评论区交流。
—END—