ChromaDB

ChromaDB 是一个开源的向量数据库,专为AI应用(尤其是大语言模型)设计,用于高效地存储和检索向量数据。

简单理解:传统数据库擅长存"张三,25岁"这样的结构化数据,但当你问"哪些商品和我刚才看的这个很像",传统数据库就无能为力了。ChromaDB能理解这种"语义上的相似",并快速找到答案。

向量数据库为什么重要?
想象你有一个包含5000篇论文的知识库。用户问"关于神经网络训练效率的论文",传统关键词搜索只能匹配包含这些词的文档,可能漏掉"模型优化""梯度下降"等语义相关的内容。

向量数据库先把所有文档转换成高维向量(比如768个浮点数组成的数组),用户的查询也被转换成向量,然后通过计算向量之间的"距离"来找到语义最接近的内容。

如果换成暴力搜索:5000篇论文时还能接受,但到50000篇时查询会明显变慢,到500000篇时基本不可用。向量数据库通过专门的索引结构(如HNSW算法),即使在海量数据中也能实现毫秒级查询。

ChromaDB的核心特点
特点 说明
轻量易用 pip install chromadb即可安装,无需复杂配置
开箱即用 5分钟内就能搭建起可用的向量存储
开源免费 与Pinecone等商业服务相比,无需付费
与LangChain深度集成 主流RAG框架的首选搭配
支持元数据过滤 可以在语义搜索的同时加上条件,如"只返回2023年之后的文档"
二、核心概念
用"仓库管理"来类比,会更容易理解:

概念 类比 说明
向量 每个商品的"特征标签" 一段文本/图片被转换成的数字数组,代表其语义特征
Collection(集合) 整个仓库 存储同一类向量的地方,类似传统数据库的"表"
Metadata(元数据) 贴在商品上的"信息卡片" 附在向量旁边的结构化信息,如"品类、价格、日期",可用于过滤
Embedding(嵌入) 给商品贴标签的过程 把文本变成向量的技术,通常借助专门的嵌入模型(如sentence-transformers)
三、ChromaDB能做什么?
以下是ChromaDB的典型应用场景:

应用场景 具体说明
智能客服知识库 用户提问后,检索最相关的FAQ文档,让大模型基于这些内容回答,准确率可从68%提升至92%
代码辅助生成 输入"实现一个快速排序算法",从百万行代码库中检索语义相似的代码片段
个性化推荐 根据用户行为向量和商品特征向量做匹配,推荐相似商品
企业知识问答 将内部Wiki/手册导入ChromaDB,检索响应比传统搜索引擎快40%
四、快速上手代码示例
python

1. 安装(在Conda环境中)

pip install chromadb sentence-transformers

import chromadb
from sentence_transformers import SentenceTransformer

2. 初始化客户端(持久化到本地)

client = chromadb.PersistentClient(path="./my_chroma_db")

3. 创建一个集合(相当于表)

collection = client.create_collection(
name="my_knowledge",
metadata={"hnsw:space": "cosine"} # 用余弦相似度计算距离
)

4. 准备数据

documents = [
"RAG技术通过检索外部知识来增强大模型回答",
"ChromaDB是一个轻量级的向量数据库",
"向量数据库把文本转换成高维向量进行语义搜索"
]

5. 生成向量(也可以用Chroma内置的嵌入函数)

model = SentenceTransformer('all-MiniLM-L6-v2')
embeddings = model.encode(documents).tolist()

6. 存入ChromaDB

collection.add(
ids=["doc1", "doc2", "doc3"],
embeddings=embeddings,
documents=documents,
metadatas=[{"source": "blog"} for _ in documents]
)

7. 查询

query = "什么是向量数据库?"
query_embedding = model.encode([query]).tolist()

results = collection.query(
query_embeddings=query_embedding,
n_results=2
)

print(results["documents"][0]) # 输出最相似的文档

posted @ 2026-05-23 10:53  Lomook  阅读(38)  评论(0)    收藏  举报