ChromaDB 向量库优化技巧实战

chroma 一步步使用

安装

bash 复制代码
# 安装chromadb
pip install chromadb,sentence_transformers

# 不启动服务会出现sock.connect(sa)TimeoutError: timed out
chroma run

服务启动后,您将看到类似以下输出:

建立连接

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

python 复制代码
import chromadb

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

创建向量集合

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

python 复制代码
# 首先导入embedding模型
from chromadb.utils import embedding_functions



collection = chroma_client.create_collection(name="my_collection")
collection.add(
    documents=[
        "关于深度学习技术的文档",
        "关于的爱情小说文档"
    ],
    ids=["id1", "id2"]
)
print(collection)

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

查询文档

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

1. 基于ID查询

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

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

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

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

工程中优化

混合检索

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

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

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

python 复制代码
# 元数据过滤 + 向量检索
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(分层可导航小世界图)作为向量索引算法,无需手动创建索引。但你可以通过元数据调整索引参数:

python 复制代码
# 创建集合时设置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:影响查询精度和速度,值越大召回率越高但查询速度越慢
相关推荐
mennekes9 小时前
数据中心安全配电设备如何选择?
运维·人工智能·科技·安全·制造
IT_陈寒9 小时前
Vue的响应式什么时候会失灵?这个坑我踩了
前端·人工智能·后端
Mark-Wang10 小时前
2026大厂AI Agent高频面试题Top50:题目+参考答案+追问陷阱
人工智能
五度易链-区域产业数字化管理平台10 小时前
WorkBuddy 实战:将带 MD5 签名的第三方 API 封装为 MCP 服务(企业模糊搜索接口案例)
大数据·人工智能·mcp
怪奇云呼军10 小时前
知识库也会注入指令?闪电智能VoiceAgent 如何防住 Prompt Injection
人工智能·python·算法·云计算·音视频
xushichang123_10 小时前
企业降本刚需下,云上模型蒸馏与轻量化部署怎么选?AWS“大模型教研+小模型推理” 路径
大数据·人工智能
EasyDSS10 小时前
开会不用装App:私有化音视频系统EasyDSS即时视频会议,浏览器点开就能聊,AI帮你写纪要
人工智能·音视频
阿里云大数据AI技术11 小时前
基于 EMR Serverless Ray 实现 Qwen 模型批量推理实践
人工智能·算法·agent
ZJU_统一阿萨姆11 小时前
【算子开发】环境搭建与第一个CUDA程序
开发语言·人工智能·系统架构
老登为啥喜欢吹AI11 小时前
继DSH之后!Codex Harness 也开源了!Rust 核心、三层架构、人机协作
人工智能