chroma的作用

在 LangChain 中,Chroma 是一个向量存储(Vector Store)的实现,用于高效地存储和检索嵌入向量(embeddings)。当你执行:

1
from langchain_community.vectorstores import Chroma

你实际上是导入了 LangChain 对 Chroma 向量数据库的封装接口。

Chroma 的主要作用包括:

  1. 存储嵌入向量(Embeddings)
    将文本(如文档、段落、句子)通过嵌入模型(如 OpenAI Embeddings、Sentence Transformers 等)转换为高维向量,并将这些向量连同原始文本一起存入 Chroma 数据库。

  2. 支持语义相似性搜索(Semantic Search)
    给定一个查询(query),将其也转换为嵌入向量,然后在 Chroma 中查找与之最相似的向量(通常使用余弦相似度或 L2 距离),从而返回语义上最相关的文本片段。

  3. 与 LangChain 无缝集成
    在 RAG(Retrieval-Augmented Generation)等应用中,Chroma 常被用作检索器(Retriever),为大语言模型(LLM)提供上下文信息。例如:

    1
    2
    retriever = vectorstore.as_retriever()
    docs = retriever.invoke("你的问题")
  4. 支持元数据过滤
    除了向量本身,Chroma 还允许为每个文档附加元数据(如来源、时间、类别等),并在检索时按条件过滤。

  5. 本地/内存/持久化支持
    Chroma 可以运行在内存中(用于测试),也可以持久化到磁盘,甚至支持客户端-服务器模式(通过 Chroma Server)。


简单示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings

# 准备文档
texts = ["猫喜欢睡觉", "狗喜欢跑步", "鱼生活在水中"]

# 创建嵌入模型
embedding = HuggingFaceEmbeddings()

# 构建 Chroma 向量库
vectorstore = Chroma.from_texts(texts, embedding)

# 进行相似性搜索
results = vectorstore.similarity_search("哪种动物生活在水里?")
print(results[0].page_content) # 输出:鱼生活在水中

总结:

Chroma 在 LangChain 中的作用是作为一个轻量级、易用、高效的向量数据库,用于存储文本的嵌入表示,并支持基于语义的快速检索,是构建 RAG 应用、问答系统、智能搜索等场景的核心组件之一。