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

【自然语言处理与大模型】向量数据库: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())
http://www.lryc.cn/news/2379575.html

相关文章:

  • NSSCTF [GFCTF 2021]where_is_shell
  • WSL 安装 Debian 12 后,Linux 如何安装 vim ?
  • 电子数据取证(数字取证)技术全面指南:从基础到实践
  • Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
  • Spark SQL 之 Analyzer
  • c/c++数据类型转换.
  • Django 项目的 models 目录中,__init__.py 文件的作用
  • 实验六:FPGA序列检测器实验
  • 网络的知识的一些概念
  • 芋道项目,商城模块数据表结构
  • yarn任务筛选spark任务,判断内存/CPU使用超过限制任务
  • 【氮化镓】HfO2钝化优化GaN 器件性能
  • c#的内存指针操作(仅用于记录)
  • 常见机器学习算法简介:回归、分类与聚类
  • SpringBoot项目里面发起http请求的几种方法
  • Linux下Nginx源码安装步骤详解
  • SQLMesh 增量模型从入门到精通:5步实现高效数据处理
  • Zookeeper 入门(二)
  • 【架构篇】安全架构-双向认证
  • 负载均衡—会话保持技术详解
  • Flask快速入门和问答项目源码
  • go语法大赏
  • 软件工程各种图总结
  • R-tree详解
  • AAAI2024 | 基于特征多样性对抗扰动攻击 Transformer 模型
  • 关于数据湖和数据仓的一些概念
  • 鸿蒙OSUniApp制作自定义的下拉菜单组件(鸿蒙系统适配版)#三方框架 #Uniapp
  • C++面试2——C与C++的关系
  • 常用的Java工具库
  • 基于LabVIEW的双音多频系统设计