Chroma向量数据库:简单易懂的基础介绍与实战示例

Chroma是一个专门用来存储和搜索"向量"的开源数据库。向量是机器学习模型把文字、图片等信息转换成的一串数字,代表它们的"意思"或"特征"。Chroma让我们可以用自然语言快速找到和查询内容相似的文档、图片等,特别适合做语义搜索、智能问答、推荐系统等AI应用。

什么是向量数据库?

  • 向量是什么?

    向量是机器学习模型把文本或图片等信息转换成的数字列表,比如一句话"我喜欢苹果"会变成一个长度为768的数字数组。这个数组捕捉了这句话的语义信息。

  • 向量数据库的作用

    传统数据库是通过关键词匹配来找数据,而向量数据库是通过"向量距离"来找相似内容。距离越小,内容越相似。

  • Chroma的特点

    • 开源免费,支持Python和JavaScript
    • API简单,只有4个核心接口,方便快速开发
    • 支持多种向量生成模型,如Sentence Transformers、OpenAI Embeddings等
    • 支持持久化存储和内存模式,适合开发和生产环境
    • 可以和主流AI框架如LangChain、LlamaIndex无缝集成

Chroma适合用在哪些场景?

  • 语义搜索:用自然语言查询,快速找到相关文档或图片
  • 知识库问答:把文档转成向量,结合大语言模型实现智能问答
  • 推荐系统:存储用户和物品的向量,实时计算相似度,推荐个性化内容
  • 图像检索:通过图像特征向量实现内容搜索
  • 异常检测:分析向量数据找异常,应用于安全和反欺诈
  • 医疗数据分析:辅助预测和决策

Chroma解决了什么问题?

  • 高效存储和检索高维向量
    传统数据库难处理高维向量,Chroma专为此设计,支持快速的近邻搜索,性能大幅提升。
  • 简化开发流程
    自动处理文本分词、向量生成和索引,开发者专注业务逻辑。
  • 统一API,方便开发和部署
    同一套API支持内存和持久化模式,开发测试到生产无缝切换。
  • 多语言多模型支持
    Python、JavaScript SDK都支持,兼容多种embedding模型,灵活适配需求。

Chroma快速入门示例(Python)

下面是一个简单的Python示例,展示如何用Chroma创建一个向量库,添加文档,进行相似度查询。

python 复制代码
import chromadb

# 创建客户端(内存模式,方便测试)
client = chromadb.Client()

# 创建一个集合(相当于数据库中的表)
collection = client.create_collection(name="my_collection")

# 添加文档,Chroma会自动生成向量
collection.add(
    documents=["这是一个关于工程师的文档", "这是一个关于牛排的文档"],
    metadatas=[{"source": "doc1"}, {"source": "doc2"}],
    ids=["id1", "id2"]
)

# 查询与"哪种食物最好?"语义最接近的两个文档
results = collection.query(
    query_texts=["哪种食物最好?"],
    n_results=2
)

print(results)

运行结果会返回与查询语义最接近的文档及相关信息。

使用自定义中文向量模型示例

如果你想用自己喜欢的中文模型生成向量,比如text2vec-base-chinese,可以这样做:

python 复制代码
import chromadb
from text2vec import SentenceModel
from chromadb import Documents, EmbeddingFunction, Embeddings

# 自定义embedding函数
class MyEmbeddingFunction(EmbeddingFunction):
    def __call__(self, texts: Documents) -> Embeddings:
        model = SentenceModel(model_name_or_path='text2vec-base-chinese')
        embeddings = [list(model.encode(text, normalize_embeddings=True).astype(float)) for text in texts]
        return embeddings

client = chromadb.Client()

# 创建集合时传入自定义embedding函数
collection = client.create_collection(name="my_collection", embedding_function=MyEmbeddingFunction())

collection.add(
    documents=["这是第一篇文档", "这是第二篇文档"],
    metadatas=[{"source": "source1"}, {"source": "source2"}],
    ids=["id1", "id2"]
)

results = collection.query(
    query_texts=["查询文档内容"],
    n_results=2
)

print(results)

结合LangChain构建知识库问答示例

下面是一个使用LangChain和Chroma构建本地中文知识库的示例:

python 复制代码
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma

# 加载中文embedding模型
embedding_function = HuggingFaceEmbeddings(model_name="shibing624/text2vec-base-chinese")

# 加载文档
loader = TextLoader("your_document.txt")
documents = loader.load()

# 文档切分,避免太长
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = text_splitter.split_documents(documents)

# 创建Chroma向量数据库并保存到本地
db = Chroma.from_documents(docs, embedding_function, persist_directory="./chroma_db")
db.persist()

# 查询示例
query = "什么是人工智能?"
results = db.similarity_search(query, k=3)

for doc in results:
    print(doc.page_content)
    print("-----")

重要指标和性能

  • 向量维度通常为128、256、512、768或更高,取决于embedding模型。
  • 查询速度:Chroma支持近似最近邻搜索(ANN),查询延迟通常在毫秒级,适合实时应用。
  • 存储容量:支持百万级别向量存储,且支持持久化到磁盘。
  • API简单,核心功能仅4个接口,快速上手。

总结

Chroma是一个为AI应用设计的开源向量数据库,专注存储和检索高维向量,支持中文和多种embedding模型。它简化了语义搜索、知识问答、推荐系统等场景的开发流程,性能优异且易于集成。通过简单的Python或JavaScript代码,就能快速搭建智能的带记忆功能的AI系统。

如果你想快速开始,推荐先用Chroma内置的embedding功能,熟悉API后,再尝试接入你喜欢的中文embedding模型,实现更精准的语义理解和搜索。

相关推荐
Darling噜啦啦6 小时前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
swipe6 小时前
正则表达式入门到进阶:从表单校验到手写模板引擎
前端·javascript·面试
只会cv的前端攻城狮7 小时前
DSL 领域模型架构设计:消灭 CRUD 重复工作
前端·架构
神奇小汤圆8 小时前
RAG大厂面试题汇总:向量检索、混合检索、Rerank、幻觉处理高频问题
面试
逛逛GitHub8 小时前
这个爆红的 GitHub 项目让 token 直接省 60–95%。
github
iccb10139 小时前
5年,一个程序员是如何把私有化在线客服系统做到第一名的
前端·后端·github
假如让我当三天老蒯9 小时前
回归基本功:Map/Set 与 WeakMap/WeakSet 的区别
前端·面试
蝎子莱莱爱打怪10 小时前
AI Agent 相关知识扫盲:16 个概念+11张图+38个开源项目推荐
人工智能·github·agent
禅思院11 小时前
路由性能优化终极指南:从懒加载漏洞到边缘渲染的架构跃迁
前端·架构·前端框架
怕浪猫12 小时前
Electron 系列文章封面图
算法·架构·前端框架