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

【自然语言处理与大模型】向量数据库:Chroma使用指南

        Chroma是一款功能强大的开源 AI 应用数据库,专为高效数据存储与检索而设计。它不仅支持 Embedding 和 Metadata 的存储,还集成了多项核心功能,包括向量搜索、全文搜索、Document 存储、Metadata 过滤以及多模态检索。此外,Chroma 还提供了便捷的客户端-服务器(CS)模式,满足多样化的应用场景需求。

安装

# 在服务器上安装
pip install chromadb# 在客户端上安装,仅支持 HTTP 的客户端
pip install chromadb-client

使用

# 导入chromadb
import chromadb# 导入embedding_functions,它可以自定义嵌入模型
from chromadb.utils import embedding_functionsmy_embedding_func = embedding_functions.OpenAIEmbeddingFunction(api_key="YOUR_API_KEY",model_name="<嵌入模型的名称>"
)# 下面三选一就行
# 创建一个临时客户端,存在内存中
chroma_client = chromadb.EphemeralClient()
chroma_client = chromadb.Client()  # 默认使用内存存储模式(非持久化)# 创建一个持久客户端,若不指定则存默认路径为 .chroma
chroma_client = chromadb.PersistantClient(path="<本地存储路径>")# 创建一个集合
"""
集合是您存储嵌入、文档和任何附加元数据的地方。集合索引您的嵌入和文档,并实现高效的检索和过滤。您可以使用名称创建一个集合。
"""
collection = chroma_client.create_collection(name="my_collection","embedding_function": my_embedding_func  # 指定向量模型)
collection = chroma_client.get_or_create_collection(name="my_collection")  # 该方法可以避免重复创建集合# collection的几个属性
print(collection.peek())  # 返回集合中前10项的列表
print(collection.count())  # 返回集合中项目的数量# 增:向集合中添加一些文本文件
"""
Chroma 将存储您的文本并自动处理嵌入和索引。您还可以自定义嵌入模型。您必须为您的文档提供唯一的字符串 ID
"""
collection.add(documents=["This is a document about pineapple","This is a document about oranges"],metadatas=[{"source": "pineapple"}, {"source": "oranges"}]ids=["id1", "id2"]
)# 查:查询集合
"""
您可以使用查询文本列表查询集合,Chroma 将返回 n 个最相似的结果。就是这么简单!如果未提供 n_results,Chroma 默认将返回 10 个结果。默认情况下,Chroma 使用 DefaultEmbeddingFunction,它是基于 Sentence Transformers 的 MiniLM-L6-v2 模型
"""
results = collection.query(query_texts=["This is a query document about hawaii"],  # Chroma会自动嵌入n_results=2  # 返回多少结果# where = {"source": "hawaii"}, # 按元数据过滤# where_document = {"$contains": "about hawaii"} # 按文档内容过滤
)# 改:如果重复执行,相同 ID 的文档会被更新
collection.upsert(documents=["This is a document about pineapple","This is a document about oranges"],ids=["id1", "id2"]
)# 删:删除某个文档,删除整个集合
collection.delete(ids=["id2"])  # 删除某个文档
client.delete_collection(name="my_collection")  # 删除整个集合

CS模式

服务器上运行这个命令:

# 运行chroma服务器
chroma run --path <本地持久化数据库的路径># 单独设置地址和端口
chroma run --path /db_path --host localhost --port 8000

客户端上运行这个代码:

import chromadb# 下面二选一就行
# 同步客户端连接方式(阻塞式)
client = chromadb.HttpClient(host='localhost', port=8000)# 异步客户端连接方式(非阻塞式)
async def main():client = await chromadb.AsyncHttpClient(host='localhost', port=8000)# 运行异步主函数
asyncio.run(main())

相关文章:

  • 医疗信息系统安全防护体系的深度构建与理论实践融合
  • 什么是 Flink Pattern
  • PDF批量合并拆分+加水印转换 编辑 加密 OCR 识别
  • C语言链表的操作
  • Office 中 VBE 的共同特点与区别
  • 【C++】unordered_map与set的模拟实现
  • Atcoder Beginner Contest 406
  • 【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化
  • 程序代码篇---数据包解析
  • 层次原理图
  • Android开发——原生渲染方案实现 PDF 预览功能
  • Elasticsearch 初步认识
  • C++控制结构详解:if-else、switch、循环(for/while/do-while)
  • MySQL事务的一些奇奇怪怪知识
  • React-Query使用react-testing-library进行测试
  • 【RabbitMQ】 RabbitMQ高级特性(二)
  • Python高级特性深度解析:从熟练到精通的跃迁之路
  • 【老马】离线版金融敏感信息加解密组件开源项目 encryption-local
  • 实战设计模式之状态模式
  • React 19中useContext不需要Provider了。
  • 复旦一校友捐赠1亿元,却不留名
  • 2025吉林市马拉松开跑,用赛道绘制“博物馆之城”动感地图
  • 商务部:对原产于美国、欧盟、台湾地区和日本的进口共聚聚甲醛征收反倾销税
  • 纽约市长称墨西哥海军帆船撞桥事故已致2人死亡
  • 多图|多款先进预警机亮相雷达展,专家:中国预警机已达世界先进水平
  • 定制基因编辑疗法治愈罕见遗传病患儿