当前位置: 首页 > ai >正文

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:影响查询精度和速度,值越大召回率越高但查询速度越慢
http://www.xdnf.cn/news/6385.html

相关文章:

  • 如何在夸克浏览器里-安装梦精灵AI提示词管理工具
  • Apollo学习——planning模块(2)之planning_component
  • 《山东欧曼谛:美业梦想的启航港》
  • [Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化
  • 【steganalysis】Enhancing practicality and efficiency of deepfake detection
  • 【Linux专栏】Linux进程间关系和守护进程
  • 【Docker】Docker安装Redis
  • Claude官方63组提示词模板全解析:从工作到生活的AI应用指南
  • Mac 环境下 JDK 版本切换全指南
  • HDMI信号采集器连OBS没有声音的问题
  • 导入了lombok但是却不起作用,显示实际参数列表和形式参数列表的长度不同或者无法将类的构造器给到给定的类型
  • C# 实现雪花算法(Snowflake Algorithm)详解与应用
  • Redis(2):Redis + Lua为什么可以实现原子性
  • Linux系统——进程结束时退出的分析与总结(关于wait与waitpid函数)
  • 红黑树解析
  • CyberDuckai入门笔记
  • 使用 GitDiagram 快速将 GitHub 仓库转换为交互式图表
  • 信奥赛CSP-J复赛集训(图和树专题)(9):P2171 Hz吐泡泡
  • 【ALINX 实战笔记】FPGA 大神 Adam Taylor 使用 ChipScope 调试 AMD Versal 设计
  • 电力电容器故障利用沃伦森(WARENSEN)工业设备智能运维系统解决方案
  • SaaS基于云计算、大数据的Java云HIS平台信息化系统源码
  • 【Linux】Linux安装mysql
  • 2035.5.15 并查集
  • C#中BackgroundWorker的概念与用法详解
  • uniapp中vue3和pinia安装依赖npm install失败
  • calico排错思路
  • WebSocket:实时通信(如聊天应用)从零到一的深度解析
  • 养生:打造健康生活的四大支柱
  • 自用Vscode 配置c++ debug环境
  • 国产化Word处理控件Spire.Doc教程:通过C# 删除 Word 文档中的超链接