向量数据库chroma

news/2025/10/29 15:14:07/文章来源:https://www.cnblogs.com/gaoyanbing/p/19174498

概述#

Chroma 是向量数据库,存向量用的。拥有针对向量的查询能力,根据向量的距离远近查询,这一点和传统数据库不一样。

安装与简单使用#

用 pip install chromadb 命令安装。

为了创建数据库实例,先要创建一个 client。

import chromadb
chroma_client = chromadb.Client()

借助 client 创建一个 collection。这个 collection 就是实际的数据库对象了。

collection = chroma_client.create_collection(name="my_collection")

数据库的每项数据包含以下要素:

  • ids,独一无二的标识
  • documents,数据本体。通常是文本
  • metadatas(可选),数据的额外描述
  • embeddings(可选),
  • uris(可选),指向
  • data(可选)

可以这样向 collection 添加内容:

collection.add(documents=["This is a document about pineapple", "This is a document about oranges"],ids=["id1", "id2"],
)

查询:

results = collection.query(query_texts=["This is a query document about hawaii"],  # Chroma will embed this for youn_results=2,  # how many results to return
)

results 会是一个字典:

{'documents': [['This is a document about pineapple','This is a document about oranges']],'ids': [['id1', 'id2']],'distances': [[1.0404009819030762, 1.243080496788025]],'uris': None,'data': None,'metadatas': [[None, None]],'embeddings': None,
}

数据库实例化#

import chromadb

client#

为了创建数据库实例,先要创建一个 client。

chroma_client = chromadb.Client()

除了 Client(),也可以用 PersistentClient() 创建一个指定了持久化存储位置的 client。指定位置已有文件时 client 会自动从其加载。

client = chromadb.PersistentClient(path="/path/to/save/to")

创建好 client 后,可以用其自带的方法:

client.heartbeat() # 返回纳秒 heartbeat。用于确认 client 的连接状态
client.reset() # 清空并重置。不可逆

以上是直接创建 client 的方法。还有 server mode,可以让数据库服务独立于 python 脚本运行。以下的第一条命令在终端中运行。

chroma run --path /db_path
import chromadb
chroma_client = chromadb.HttpClient(host='localhost', port=8000)

若某个机器上只运行 server 而不涉及用 chromadb 开发,那台机器可以只安装 chromadb-client 包。

chromadb-client 没有默认的 embedding 生成方法。必须手动传入。

collection#

collection 的实例化#

借助 client 创建一个 collection。这个 collection 就是实际的数据库对象了。

collection = chroma_client.create_collection(name="my_collection")

由于 chroma 会用 name 生成 url,这个 name 有以下限制:

  • 长度 3 到 63 个字符
  • 开头和结尾只能是小写字母或数字
  • 不能包含两个连续的点
  • 不能是有效的 IP 地址

毕竟是向量数据库,在创建 collection 时可以指定自己的 embedding 方法。若不指定,默认使用 all-minilm-l6-v2 模型。

client.create_collection(name="my_collection")

可额外传入 embedding_function 指定自己的 embedding 方法,若不指定则会使用默认的 all-minilm-l6-v2 模型。获取已有 collection 时必须传入与创建时相同的 embedding_function。也可以不用管这个 embedding_function,在存数据时把 embedding 一并传入就行。

可额外传入 metadata 参数指定其他设置。需要传入一个字典,

  • "hnsw:space",这个键可自定义 embedding 距离的计算方法。例如 "cosine" 指定为余弦相似度,默认的 "L2" 是欧氏距离

client 里与 collection 相关的方法:

  • create_collection(name),创建新 collection,并返回对象
  • get_collection(name),获取已有的 collection,并返回对象
  • get_or_create_collection(name),有则获取,没有则创建,并返回对象
  • delete_collection(name),删除已有的 collection

collection 的方法:

  • peek(),返回该 collection 中头 10 个数据。通常用于预览 collection 内容
  • count(),返回 collection 的数据条目数
  • modify(name),重命名

collection 添加数据#

collection.add(ids=["id1", "id2", "id3", ...]documents=["doc1", "doc2", "doc3", ...],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],embeddings=[[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2], ...],
)
  • ids,必须传入的、独一无二标识。若出现重复,会导致新数据不被存入
  • documents,数据本体。若没提供 embeddings 则会自动用 documents 生成
  • metadatas,给一条数据标记一个字典,可以用于条件过滤
  • embeddings,手动传入的 embedding

可以选择不传入 documents,而是传入 ids metadatas embeddings 这样的组合。

collection 查询数据#

collection.query(query_embeddings=[[11.1, 12.1, 13.1],[1.1, 2.3, 3.2], ...],n_results=10,where={"metadata_field": "is_equal_to_this"},where_document={"$contains":"search_string"}
)collection.get(ids=["id1", "id2", "id3", ...],where={"style": "style1"}
)
  • query_embeddings,用于查询的 embedding。可以一次查询多个 embedding
  • n_results,对每个查询 embedding 返回多少个查询结果
  • where 通过 metadatas 限制查询,where_document 通过 documents 限制查询
  • ids,通过独一无二的 id 获取数据

也可以不传入 query_embeddings 而是传入 query_texts 进行查询。Chroma 会用预先设定的方法将字符串转换为 embedding。

对于 collection.get(),若没有传入 ids 参数,就会只根据 where 进行查询。

返回值会是一个字典:

{'documents': [['This is a document about pineapple','This is a document about oranges']],'ids': [['id1', 'id2']],'distances': [[1.0404009819030762, 1.243080496788025]],'uris': None,'data': None,'metadatas': [[None, None]],'embeddings': None,
}

若只想要其中的一部分,可以在查询时传入 include 参数。

collection.query(query_embeddings=[[11.1, 12.1, 13.1],[1.1, 2.3, 3.2], ...],include=["documents"]
)

collection 更新数据#

collection.update(ids=["id1", "id2", "id3", ...],documents=["doc1", "doc2", "doc3", ...],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],embeddings=[[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2], ...],
)

使用 update() 更新不存在的 id 时会发生错误。可以用 upsert() 在 id 不存在时就插入新数据:

collection.upsert(ids=["id1", "id2", "id3", ...],embeddings=[[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2], ...],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],documents=["doc1", "doc2", "doc3", ...],
)

collection 删除数据#

collection.delete(ids=["id1", "id2", "id3",...],where={"chapter": "20"}
)

可以仅传入 where 而不传入 ids

作者:chirp

出处:https://www.cnblogs.com/chirp/p/18231671

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/949940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生向量数据库Milvus知识大全,看完这篇就够了[基本概念、系统架构、主要组件、应用场景]

1.Milvus简介 1.1什么是 Milvus Milvus 是一款云原生向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。 Milvus 基于 FAISS、Annoy、HNSW 等向量搜索库构建,核心是解决稠密向量相似度检…

测试数据准备难题?一个Dify工作流,让你告别“巧妇难为无米之炊”

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 在软件测试领域,我们经常面临“巧妇难为无米之炊”的困境——再完善的测试用例,没有合适的测试数据也是徒劳。据统计,测试工程师平均花费…

如何使用 vxe-table 展开行实现展开子表父子表格

如何使用 vxe-table 展开行实现展开子表父子表格 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:https://gitee.com/x-extends/vxe-table<template><div><vxe…

ubuntu操作系统增加swap内存 - Ladisson

检查当前 Swap 状态sudo swapon --show free -h关闭现有 Swapsudo swapoff /swapfile调整或创建 Swap 文件# 设置为16GB sudo fallocate -l 16G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile启用新 Swap…

2025年航空VR智慧教室定做厂家权威推荐榜单:幼儿保育实训室/家政实训室/航空VR实训室源头厂家精选

随着虚拟现实技术在航空培训领域的深度应用,VR智慧教室正成为培养航空人才的重要平台。据行业数据显示,2025年中国航空VR培训市场规模预计突破42亿元,年复合增长率达28.5%。 航空VR智慧教室通过高度仿真的虚拟环境,…

stash 的一些操作

git stash 作用是将当前分支改动的代码存放到暂存区中,还原当前分支的改动,可以成功切换到其他待改动分支;保存当前分支改动代码到暂存区,并备注 xxxxgit stash save "xxxx"查询当前git项目下所有在暂存…

Ubuntu Netplan

什么是 Netplan? Netplan 是 Ubuntu 17.10 及更高版本中引入的网络配置工具,它使用 YAML 格式的配置文件来简化网络管理。 主要特点​​声明式配置​​ 使用易读的 YAML 格式 抽象底层网络守护进程(NetworkManager …

2025年成品岗亭供货厂家权威推荐榜单:成品门卫亭/小区保安亭/执法岗亭源头厂家精选

市场调研数据显示,2024年国内岗亭定制市场规模已突破80亿元,年增长率保持在15%以上,成品岗亭因其快速交付的优势备受市场青睐。 成品岗亭作为城市管理、社区安防和商业服务的基础设施,其市场需求随着城市化进程加速…

实时期货、黄金贵金属、外汇数据接口文档

StockTV 提供全面的期货、黄金贵金属和外汇市场数据接口,支持全球主要交易所的期货合约、贵金属现货及期货、全球外汇货币对等多种金融产品。所有接口返回数据均为 JSON 格式。 快速开始 1. 获取 API Key 请联系官方获…

python动态加载插件 - ling

获取当前脚本路径 根据当前位置获取绝对路径,区分打包后的可执行文件和开发环境 def get_plugins_dir(relative_path: str = "plugins") -> str:"""获取应用程序的插件目录如果是打包后的…

实用指南:C++设计模式_结构型模式_适配器模式Adapter

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年混凝土预制管桩设备定做厂家权威推荐榜单:PHC管桩生产设备/PHC管桩生产线/混凝土管桩生产设备源头厂家精选

在建筑工业化和基础建设持续发展的推动下,混凝土预制管桩设备的技术水平与定制化能力已成为衡量制造商实力的关键标尺。本文基于技术研发实力、设备性能参数、定制化解决方案及市场应用反馈,对行业内的专业设备制造企…

2025年微小流量质量流量计企业权威推荐榜单:差压质量流量计/液体质量流量计/数字式质量流量计源头厂家精选

在精密制造、生物医药和半导体等高端工业领域,微小流量质量流量计作为流体测控的核心设备,其测量精度与稳定性直接关系到生产工艺效率与产品质量。当前,随着生物制药向“高效发酵”升级、新能源储能进入“规模化并网…

2025年阻燃pp管厂商权威推荐榜单:阻燃pp管厂商/塑料pp管/pp化工管源头厂家精选

2025年阻燃PP管厂商权威推荐榜单:塑料PP管/PP化工管/FRPP管源头厂家精选 在化工、矿山、污水处理等行业,阻燃PP管以其卓越的耐腐蚀性和阻燃安全性,正成为工业流体输送系统的关键材料。 阻燃PP管作为工业流体输送系统…

ArkTS语言(六)

学习ArkTS语言 ArkTS是HarmonyOS的主要应用开发语言,在TypeScript基础上进行了扩展,保留了其基本风格,并通过增强静态检查和分析来提高程序的稳定性和性能。本教程将帮助开发者掌握ArkTS的核心功能、语法及最佳实践…

rbd元数据

rbd元数据https://cloud.tencent.com/developer/article/1006283 实际操作示例的 Ceph Pool → RBD → Object → OMAP 文档Ceph Pool / RBD / Object / OMAP 完整文档1️⃣ 关键概念说明概念说明Pool Ceph 的逻辑存储…

2025 年氧舱厂家最新推荐榜,聚焦企业技术创新、产品品质与市场口碑深度解析方圆组合式/减压/盾构气压/高原平衡/实验/软体氧舱公司推荐

引言 随着医疗健康与特殊环境保障需求的不断升级,氧舱市场规模持续扩大,但行业内企业资质、技术水平与产品质量差异显著。部分企业存在资质不全、技术滞后、产品类型单一等问题,导致采购方难以精准筛选符合需求的优…

2025年进口气动塑料球阀定制厂家权威推荐榜单:进口气动超低温球阀/进口气动三片式球阀/进口气动衬氟球阀源头厂家精选

2025年进口气动塑料球阀定制厂家权威推荐榜单:进口气动超低温球阀/进口气动三片式球阀/进口气动衬氟球阀源头厂家精选 在工业流体控制领域,进口气动塑料球阀以其独特的耐腐蚀性能和定制化服务,正成为化工、医药等特…

KL 散度

http://joschu.net/blog/kl-approx.htmlKL 散度定义标准的 k1 估计KL 散度, 方差大, 应为k1 有正有负k3 也是KL 散度的无偏估计, 但是元素都是正的, 方差小很多--- 她说, 她是仙,她不是神

2025年不锈钢编织绳网柔性加工厂权威推荐榜单:不锈钢编织绳网围网/不锈钢手工编织绳网/焊接不锈钢编织绳网源头厂家精选

随着建筑装饰与防护工程需求的升级,不锈钢编织绳网市场正以年均12.3%的速度增长,2025年全球市场规模预计突破58亿美元。 不锈钢编织绳网以其耐腐蚀、高强度、柔韧性好等特点,广泛应用于动物园围网、建筑装饰、体育场…