1. 一段话总结

langchain_chroma.vectorstores.Chroma是LangChain与Chroma向量数据库的集成类,用于实现文档的向量存储与检索。使用前需安装chromadblangchain-chroma依赖包,初始化时需配置核心参数(如collection_name默认值为langchain、必选的embedding_function嵌入函数,以及本地持久化persist_directory或远程/云端连接参数如host/port(默认8000)、chroma_cloud_api_key);支持添加/更新/删除文档(如add_documents/update_documents/delete)、多类型搜索检索(相似性搜索similarity_search、MMR搜索max_marginal_relevance_search、带过滤/得分的搜索),且提供完整的同步/异步方法(异步方法前缀为a,如aadd_documents/asimilarity_search),还可通过as_retriever方法转换为检索器,适配LangChain的检索增强流程。

2. 详细总结

1. 类定位与安装
  • 定位langchain_chroma.vectorstores.Chroma是LangChain框架与Chroma向量数据库的集成类,用于实现文档的向量化存储、管理与相似性检索,支持本地、远程服务器及Chroma Cloud三种部署模式。
  • 安装命令:需安装两个核心依赖包,命令如下:
    pip install -qU chromadb langchain-chroma
    
2. 初始化参数(核心配置)

下表汇总初始化时的关键参数,按功能分类:

参数类别 参数名 类型 说明 默认值
索引参数 collection_name str 向量集合的名称,用于区分不同数据集 'langchain'
embedding_function Embeddings | None 文档嵌入函数(如OpenAIEmbeddings),必选,用于将文本转为向量 None(需手动指定)
客户端参数 client ClientAPI | None 已初始化的Chroma客户端,可选(若不指定则自动创建) None
client_settings Settings | None Chroma客户端配置(如超时、日志) None
persist_directory str | None 本地持久化目录,指定后向量数据会存储到该目录(避免内存丢失) None(内存模式)
host str | None 远程Chroma服务器地址(如部署在云服务器的Chroma服务) None
port int | None 远程Chroma服务器端口 8000
ssl bool 是否通过SSL加密连接远程服务器 False
headers dict[str, str] | None 发送给远程服务器的HTTP请求头(如认证信息) None
chroma_cloud_api_key str | None 连接Chroma Cloud的API密钥,云端连接必填 None
tenant str | None Chroma Cloud的租户ID,云端必填;本地默认租户 'default_tenant'
database str | None Chroma Cloud的数据库名,云端必填;本地默认数据库 'default_database'
其他参数 relevance_score_fn Callable[[float], float] | None 从距离计算相关度得分的函数,仅用于similarity_search_with_relevance_scores None
create_collection_if_not_exists bool | None 若指定集合不存在,是否自动创建 True
collection_metadata dict | None 集合的元数据配置(如描述) None
collection_configuration CreateCollectionConfiguration | None 集合的索引配置(如向量维度) None
3. 核心属性
  • embeddings:用于获取当前向量存储使用的嵌入函数对象,可通过vector_store.embeddings访问,便于后续复用或修改嵌入逻辑。
3. 核心方法(按功能分类)
4.1 数据操作方法(增删改查)
方法类型 方法名 功能描述 关键参数 返回值
同步新增 add_documents 新增文档到向量存储(需传入Document对象列表) documents(list[Document],必选)、ids(list[str],可选,文档ID) list[str](新增文档的ID列表)
同步新增 add_texts 新增原始文本到向量存储(自动转为Document) texts(Iterable[str],必选)、metadatas(list[dict],可选)、ids list[str](新增文本的ID列表)
同步新增 add_images 新增图像到向量存储(需传入图像URI,自动转为base64编码) uris(list[str],必选,图像路径/URL)、metadatasids list[str](新增图像的ID列表)
同步更新 update_document 按ID更新单个文档(覆盖原有内容和向量) document_id(str,必选,待更新文档ID)、document(Document,必选) None
同步更新 update_documents 批量更新文档(ID与文档列表需一一对应) ids(list[str],必选)、documents(list[Document],必选) None
同步删除 delete 按ID删除文档(支持批量) ids(list[str] | None,可选,为None时删除所有) None
同步删除 delete_collection 删除整个向量集合(不可逆,需谨慎) None
同步重置 reset_collection 重置集合(删除所有数据并重建空集合) None
同步查询 get 按条件查询文档(支持元数据过滤、内容过滤、分页) ids(可选)、where(元数据过滤,如{“baz”: “bar”})、limit(分页) dict[str, Any](含ids/metadatas/documents)
同步查询 get_by_ids 按ID批量查询文档(ID不存在时不报错,仅返回存在的文档) ids(Sequence[str],必选) list[Document]
异步新增 aadd_documents 异步版add_documents,需用await调用 add_documents list[str]
异步删除 adelete 异步版delete,需用await调用 delete bool | None(删除结果)
异步查询 aget_by_ids 异步版get_by_ids,需用await调用 get_by_ids list[Document]
4.2 搜索检索方法
方法类型 方法名 功能描述 关键参数 返回值
同步相似搜 similarity_search 按查询文本搜索最相似的文档 query(str,必选)、k(int,默认4,返回文档数)、filter(元数据过滤) list[Document]
同步相似搜 similarity_search_with_score 搜索相似文档并返回距离得分(得分越低相似度越高 similarity_searchwhere_document(内容过滤,如{“$contains”: “thud”}) list[tuple[Document, float]]
同步相似搜 similarity_search_by_image 按图像URI搜索相似图像(需嵌入函数支持图像嵌入) uri(str,必选,图像路径/URL)、k(默认4)、filter list[Document](page_content为base64图像)
同步MMR搜 max_marginal_relevance_search 平衡相似性与多样性的搜索(MMR算法) queryk(默认4)、fetch_k(默认20,候选文档数)、lambda_mult(默认0.5,多样性系数:0=最大多样性,1=最小多样性) list[Document]
同步向量搜 similarity_search_by_vector 按预计算的嵌入向量搜索相似文档 embedding(list[float],必选)、kfilter list[Document]
异步相似搜 asimilarity_search 异步版similarity_search,需用await调用 similarity_search list[Document]
异步MMR搜 amax_marginal_relevance_search 异步版max_marginal_relevance_search,需用await调用 max_marginal_relevance_search list[Document]
通用搜索 search 指定搜索类型的通用方法 querysearch_type(必选:“similarity”/“mmr”/“similarity_score_threshold”) list[Document]
4.3 初始化与工具方法
方法类型 方法名 功能描述 关键参数 返回值
类方法 from_documents 从Document列表创建向量存储 documents(list[Document],必选)、embedding(必选)、persist_directory等初始化参数 Chroma(向量存储实例)
类方法 from_texts 从原始文本列表创建向量存储 texts(list[str],必选)、embeddingmetadatas(可选)、ids Chroma(向量存储实例)
异步类方法 afrom_documents 异步版from_documents,需用await调用 from_documents Chroma
工具方法 fork 复制当前向量存储到新集合 new_name(str,必选,新集合名称) Chroma(新向量存储实例)
工具方法 encode_image 将图像URI转为base64字符串(静态方法) uri(str,必选) str(base64编码字符串)
4. 作为Retriever使用

通过as_retriever()方法可将Chroma向量存储转为LangChain的VectorStoreRetriever,支持三种检索策略,配置示例如下:

# 1. MMR检索(高多样性)
retriever = vector_store.as_retriever(
    search_type="mmr",
    search_kwargs={"k": 6, "fetch_k": 50, "lambda_mult": 0.25}  # k=返回6个,fetch_k=候选50个,低多样性系数
)
# 2. 得分阈值检索(仅返回高相关文档)
retriever = vector_store.as_retriever(
    search_type="similarity_score_threshold",
    search_kwargs={"score_threshold": 0.8}  # 相关度得分≥0.8才返回
)
# 3. 带过滤的相似性检索
retriever = vector_store.as_retriever(
    search_kwargs={"k": 1, "filter": {"paper_title": "GPT-4 Technical Report"}}  # 仅检索指定论文文档
)
# 调用检索
results = retriever.invoke("thud")

4. 关键问题

问题1:Chroma向量存储在本地持久化、远程服务器、Chroma Cloud三种部署模式下,核心配置参数有何区别?如何选择部署模式?

答案

  • 本地持久化模式:核心参数为persist_directory(指定本地目录,如"./chroma_db"),无需网络,适合小规模数据、开发测试场景;无需host/chroma_cloud_api_key等参数,tenant默认'default_tenant'database默认'default_database'
  • 远程服务器模式:核心参数为host(服务器IP/域名)、port(默认8000)、ssl(是否SSL连接,默认False),可选headers(认证头),适合团队共享、中规模数据场景;无需chroma_cloud_api_key,但需确保服务器可访问。
  • Chroma Cloud模式:核心参数为chroma_cloud_api_key(API密钥,从Chroma Cloud控制台获取)、tenant(租户ID)、database(数据库名),无需persist_directory/host,适合大规模数据、无需自建服务器的场景。
    选择依据:开发测试用本地模式,团队内部共享用远程模式,无运维能力、需弹性扩展用云端模式。
问题2:Chroma的相似性搜索(similarity_search)与MMR搜索(max_marginal_relevance_search)核心差异是什么?分别适用于哪些业务场景?

答案
核心差异体现在结果筛选逻辑参数配置

  1. 相似性搜索:仅按“与查询的相似度”排序,返回Top-k最相似文档,核心参数为k(默认4)、filter(元数据过滤);优点是速度快、聚焦相似性,缺点是可能返回重复/高度相似的文档。
    适用场景:需快速获取“最相关”文档的场景,如精准问答(如“查询某技术的核心原理”)、单主题信息检索。
  2. MMR搜索:通过fetch_k(默认20)先获取更多候选文档,再用lambda_mult(默认0.5,多样性系数)平衡“相似性”与“多样性”,避免结果冗余;核心参数多了fetch_k(候选数)和lambda_mult(0=最大多样性,1=最小多样性)。
    适用场景:需避免重复、覆盖多维度信息的场景,如文献综述(需多视角观点)、创意生成(需多样化素材)、长文档分段检索(避免同一段落重复返回)。
问题3:Chroma的异步方法(如aadd_documents、asimilarity_search)与同步方法相比,使用时需注意哪些细节?异步方法的核心价值是什么?

答案
使用细节:

  1. 调用方式:所有异步方法需用await关键字调用(需在async def定义的异步函数中执行),如await vector_store.aadd_documents(documents),不可直接同步调用。
  2. 功能一致性:异步方法的参数与返回值格式和同步方法完全一致(如aadd_documentsadd_documents参数相同,均返回文档ID列表),仅执行方式为异步,无需修改业务逻辑。
  3. 初始化差异:异步初始化需用afrom_documents/afrom_texts类方法(如vector_store = await Chroma.afrom_documents(documents, embedding)),而非同步的from_documents

核心价值:
异步方法支持非阻塞IO操作,在高并发场景(如批量添加万级文档、同时处理多个检索请求)中,可避免线程阻塞,提升系统吞吐量;尤其适合Web服务(如FastAPI接口)、多任务并行处理场景,减少整体响应时间。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐