储存向量数据库Chroma

Chroma是什么

Chroma(通常指 ChromaDB)是一款 开源、AI 原生的向量数据库,专为存储和检索 高维嵌入向量 而设计,目标是让开发者 5 分钟内在本地跑起一个语义搜索或 RAG 系统

极简安装pip install chromadb

双运行模式

  • 内存模式:调试/原型随意重启;
  • 持久化模式:指定 persist_directory 即可落盘,生产也不怕丢数据。

HNSW 索引:百万级向量也能 毫秒级 响应。

使用chroma存储

文档分块

1
2
3
4
5
6
7
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = PyPDFLoader("input/健康档案.pdf")
docs = loader.load()
#递归分块
text_splitter = RecursiveCharacterTextSplitter(chunk_siz

定义embedding模型与chroma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

from langchain.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
embedding = OpenAIEmbeddings(
api_key="sk-",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="text-embedding-v4",
check_embedding_ctx_length = False,
dimensions=1536
)
# 使用 Chroma 向量数据库存储文档 chunks
vectorstore = Chroma.from_documents(
documents=chunks, # 要存储的文档chunks列表(已处理好的文本片段)
embedding=embedding,
persist_directory="chromaDB", # 向量数据库的持久化存储目录路径
collection_name="demo001" # 集合名称,用于区分不同的文档集合
)
vectorstore.persist()

检索

这里采取直接检索进行测试

1
2
3
4
5
results = vectorstore.similarity_search(
"张三九的基本信息是什么",
k=2,
collection_name="demo001" # 指定检索的集合
)

重新加载

1
2
3
4
5
6
7
# 重新加载已存在的 Chroma 数据库
vectorstore = Chroma(
persist_directory="./chroma_db",
embedding_function=embedding
)

retriever = vectorstore.as_retriever()

参考资料

Chroma | 🦜️🔗 LangChain — Chroma | 🦜️🔗 LangChain