欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > ChromaDB 向量库优化技巧实战

ChromaDB 向量库优化技巧实战

2025/5/20 16:43:30 来源:https://blog.csdn.net/ngadminq/article/details/147979736  浏览:    关键词:ChromaDB 向量库优化技巧实战

chroma 一步步使用

安装

# 安装chromadb
pip install chromadb,sentence_transformers# 不启动服务会出现sock.connect(sa)TimeoutError: timed out
chroma run

服务启动后,您将看到类似以下输出:
在这里插入图片描述

建立连接

部署完成后,需要建立与Chroma服务的连接:

import chromadb# 创建了临时客户端。程序终止时,您提取的任何数据都会丢失
client = chromadb.Client()

创建向量集合

chroma连接若直接创建集合(“Collection”(集合)是存储向量的基本单位,类似于关系型数据库中的表),会使用内置的嵌入模型all-MiniLM-L6-v2

# 首先导入embedding模型
from chromadb.utils import embedding_functionscollection = chroma_client.create_collection(name="my_collection")
collection.add(documents=["关于深度学习技术的文档","关于的爱情小说文档"],ids=["id1", "id2"]
)
print(collection)

chroma默认使用欧氏距离计算向量相似度

查询文档

Chroma提供多种查询方式,满足不同场景需求:

1. 基于ID查询

当你知道确切的文档ID时,可以直接查询:

# 根据ID获取文档
result = collection.get(ids=["id1"]
)
2. 语义向量检索

RAG系统的核心功能是语义检索,基于查询与文档的语义相似度:

# 语义检索
# Chroma 默认会返回 10 条结果。这里我们只添加了 2 个文档,因此我们设置n_results=2
results = collection.query(query_texts=["如何使用向量数据库?"],n_results=2
)
print(results)

工程中优化

混合检索

Chroma还支持将全文匹配与向量检索结合:

# 全文匹配 + 向量检索
results = collection.query(query_texts=["检索技术的应用"],n_results=2,where_document={"$contains": "检索"},  # 文档必须包含"检索"一词include=["documents", "metadatas"]
)

Chroma支持将向量检索与元数据过滤结合,实现更精准的查询:

# 元数据过滤 + 向量检索
results = collection.query(query_texts=["大语言模型的应用"],n_results=2,where={"topic": "llm"},  # 仅检索topic为llm的文档include=["documents", "metadatas"]
)

元数据过滤支持多种操作符:

  • 相等:{"field": value}
  • 不等:{"field": {"$ne": value}}
  • 大于/小于:{"field": {"$gt": value}}{"field": {"$lt": value}}
  • 范围:{"field": {"$gte": min_value, "$lte": max_value}}
  • 复合条件:{"$and": [condition1, condition2]}
调参:索引与性能优化

Chroma默认使用HNSW(分层可导航小世界图)作为向量索引算法,无需手动创建索引。但你可以通过元数据调整索引参数:

# 创建集合时设置HNSW参数
collection = client.create_collection(name="optimized_collection",embedding_function=embedding_func,metadata={"hnsw:space": "cosine",       # 相似度度量方式"hnsw:M": 16,                 # 每个节点的最大连接数"hnsw:ef_construction": 200,  # 构建索引时的搜索宽度"hnsw:ef": 100                # 查询时的搜索宽度}
)

关键参数解释:

  • M:控制图的连接度,值越大精度越高但内存消耗也越大
  • ef_construction:影响索引质量,值越大精度越高但构建速度越慢
  • ef:影响查询精度和速度,值越大召回率越高但查询速度越慢

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词