langchain-chroma使用教程
LangChain-Chroma 向量存储核心方法总结 langchain_chroma.vectorstores.Chroma提供完整的文档管理功能: 1. 数据操作 增:add_documents(文档列表)、add_texts(文本列表)、add_images(图像URI列表) 删:delete(按ID列表删除) 改:update_document(单文档更新)、update_documen
1. 一段话总结
langchain_chroma.vectorstores.Chroma
是LangChain与Chroma向量数据库的集成类,用于实现文档的向量存储与检索。使用前需安装chromadb和langchain-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)、metadatas 、ids |
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_search 、where_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算法) | query 、k (默认4)、fetch_k (默认20,候选文档数)、lambda_mult (默认0.5,多样性系数:0=最大多样性,1=最小多样性) |
list[Document] |
同步向量搜 | similarity_search_by_vector |
按预计算的嵌入向量搜索相似文档 | embedding (list[float],必选)、k 、filter |
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 |
指定搜索类型的通用方法 | query 、search_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],必选)、embedding 、metadatas (可选)、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)核心差异是什么?分别适用于哪些业务场景?
答案:
核心差异体现在结果筛选逻辑与参数配置:
- 相似性搜索:仅按“与查询的相似度”排序,返回Top-k最相似文档,核心参数为
k
(默认4)、filter
(元数据过滤);优点是速度快、聚焦相似性,缺点是可能返回重复/高度相似的文档。
适用场景:需快速获取“最相关”文档的场景,如精准问答(如“查询某技术的核心原理”)、单主题信息检索。 - MMR搜索:通过
fetch_k
(默认20)先获取更多候选文档,再用lambda_mult
(默认0.5,多样性系数)平衡“相似性”与“多样性”,避免结果冗余;核心参数多了fetch_k
(候选数)和lambda_mult
(0=最大多样性,1=最小多样性)。
适用场景:需避免重复、覆盖多维度信息的场景,如文献综述(需多视角观点)、创意生成(需多样化素材)、长文档分段检索(避免同一段落重复返回)。
问题3:Chroma的异步方法(如aadd_documents、asimilarity_search)与同步方法相比,使用时需注意哪些细节?异步方法的核心价值是什么?
答案:
使用细节:
- 调用方式:所有异步方法需用
await
关键字调用(需在async def
定义的异步函数中执行),如await vector_store.aadd_documents(documents)
,不可直接同步调用。 - 功能一致性:异步方法的参数与返回值格式和同步方法完全一致(如
aadd_documents
与add_documents
参数相同,均返回文档ID列表),仅执行方式为异步,无需修改业务逻辑。 - 初始化差异:异步初始化需用
afrom_documents
/afrom_texts
类方法(如vector_store = await Chroma.afrom_documents(documents, embedding)
),而非同步的from_documents
。
核心价值:
异步方法支持非阻塞IO操作,在高并发场景(如批量添加万级文档、同时处理多个检索请求)中,可避免线程阻塞,提升系统吞吐量;尤其适合Web服务(如FastAPI接口)、多任务并行处理场景,减少整体响应时间。
更多推荐
所有评论(0)