ChromaDB 是一个开源的向量数据库,专门设计用于存储和检索高维向量数据。它非常适合用于构建基于向量搜索的应用程序,如语义搜索、推荐系统或问答系统。ChromaDB 可以高效地处理大规模的数据集,并支持多种索引类型以优化查询性能。

ChromaDB 特点:
  • 高性能: ChromaDB 旨在提供快速的向量相似性搜索。
  • 易于使用: 提供了简单的 API 和多种语言的支持。
  • 可扩展性: 可以轻松扩展到更大的数据集。
  • 开源: 具有活跃的社区和持续的开发支持。
安装 ChromaDB:

要开始使用 ChromaDB,首先需要安装它。你可以通过 pip 安装 ChromaDB 的 Python 客户端:

pip install chromadb
  • 1.
使用示例:

下面是一个简单的使用 ChromaDB 的 Python 示例,我们将创建一个向量数据库,插入一些文档,并进行向量搜索。

步骤 1: 导入库

首先,导入必要的库:

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
import os
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
步骤 2: 加载文档

加载文档数据,并使用 CharacterTextSplitter 将大文档分割成较小的段落:

# 加载示例文档
loader = TextLoader("example.txt")
documents = loader.load()

# 将文档分割成小块
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
步骤 3: 创建向量数据库

使用 OpenAIEmbeddings 将文档转换为向量,并使用 Chroma 存储这些向量:

# 设置你的 OpenAI API 密钥
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"

# 创建向量数据库
embedding = OpenAIEmbeddings()
db = Chroma.from_documents(docs, embedding)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
步骤 4: 查询向量数据库

使用向量数据库进行查询,找到与给定查询最相关的文档:

# 查询向量数据库
query = "What's the capital of France?"
results = db.similarity_search(query, k=2)

for result in results:
    print(result.page_content)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
完整代码示例:

下面是完整的代码示例:

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
import os

# 设置你的 OpenAI API 密钥
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"

# 加载示例文档
loader = TextLoader("example.txt")
documents = loader.load()

# 将文档分割成小块
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# 创建向量数据库
embedding = OpenAIEmbeddings()
db = Chroma.from_documents(docs, embedding)

# 查询向量数据库
query = "What's the capital of France?"
results = db.similarity_search(query, k=2)

for result in results:
    print(result.page_content)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

这个示例展示了如何使用 ChromaDB 来构建一个简单的问答系统。在这个系统中,我们加载了一个文档,将其分割成较小的段落,并将每个段落转换为向量,然后存储在 ChromaDB 中。当我们提出一个问题时,ChromaDB 会返回与问题最相关的文档段落。

请注意,你需要确保 example.txt 文件存在于你的脚本所在目录下,并且替换 "your-openai-api-key" 为你的实际 OpenAI API 密钥。