chromadb向量数据库使用 (2)

目录

    • 代码
    • 代码解释
      • **1. 导入 chatGLM 嵌入函数**
      • **2. 创建 ChromaDB 客户端和集合**
      • **3. 查询集合中的数据数量**
      • **4. 添加数据到集合**
      • **5. 获取已存储的文档**
      • **6. 更新文档**
      • **7. 再次获取数据,验证更新结果**
      • **8. 删除某个文档**
      • **9. 获取已删除的文档**
      • **总结**

代码

import chromadb.utils.embedding_functions as embedding_functionsopenai_ef = embedding_functions.OpenAIEmbeddingFunction(api_key="your api key",api_base="https://open.bigmodel.cn/api/paas/v4",model_name="embedding-3")
import chromadb
client = chromadb.Client()
collection = client.get_or_create_collection(name="my_collection", embedding_function=openai_ef)
collection.count() 
0
collection.add(documents=["lorem ipsum...", "doc2", "doc3"],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],ids=["id1", "id2", "id3"]
)
collection.get(ids=["id1", "id2", "id3"]
)
{'ids': ['id1', 'id2', 'id3'],'embeddings': None,'documents': ['lorem ipsum...', 'doc2', 'doc3'],'uris': None,'data': None,'metadatas': [{'chapter': '3', 'verse': '16'},{'chapter': '3', 'verse': '5'},{'chapter': '29', 'verse': '11'}],'included': [<IncludeEnum.documents: 'documents'>,<IncludeEnum.metadatas: 'metadatas'>]}
collection.update(ids=["id1", "id2", "id3"],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],documents=["doc1", "doc2", "doc3"]
)
collection.get(ids=["id1", "id2", "id3"]
)
{'ids': ['id1', 'id2', 'id3'],'embeddings': None,'documents': ['doc1', 'doc2', 'doc3'],'uris': None,'data': None,'metadatas': [{'chapter': '3', 'verse': '16'},{'chapter': '3', 'verse': '5'},{'chapter': '29', 'verse': '11'}],'included': [<IncludeEnum.documents: 'documents'>,<IncludeEnum.metadatas: 'metadatas'>]}
collection.delete(ids=["id1"]
)
collection.get(ids=["id1"]
)
{'ids': [],'embeddings': None,'documents': [],'uris': None,'data': None,'metadatas': [],'included': [<IncludeEnum.documents: 'documents'>,<IncludeEnum.metadatas: 'metadatas'>]}

代码解释

1. 导入 chatGLM 嵌入函数

import chromadb.utils.embedding_functions as embedding_functionsopenai_ef = embedding_functions.OpenAIEmbeddingFunction(api_key="your api key",api_base="https://open.bigmodel.cn/api/paas/v4",model_name="embedding-3")

解释:

  • embedding_functions.OpenAIEmbeddingFunction 用于创建 chatGLM 的文本嵌入函数,API 请求会发送到 https://open.bigmodel.cn/api/paas/v4,使用 embedding-3 作为嵌入模型。
  • 这里的 api_key 需要替换为你的实际 API 密钥。

2. 创建 ChromaDB 客户端和集合

import chromadb
client = chromadb.Client()
collection = client.get_or_create_collection(name="my_collection", embedding_function=openai_ef)

解释:

  • chromadb.Client() 创建一个 ChromaDB 客户端。
  • client.get_or_create_collection() 用于获取或创建一个名为 "my_collection" 的集合,并使用 openai_ef 作为嵌入函数。

3. 查询集合中的数据数量

collection.count()

输出:

0

解释:

  • collection.count() 返回集合中的文档数量。
  • 由于此时还没有向集合添加任何数据,所以返回 0

4. 添加数据到集合

collection.add(documents=["lorem ipsum...", "doc2", "doc3"],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],ids=["id1", "id2", "id3"]
)

解释:

  • documents:存储要添加的文档内容,如 "lorem ipsum..."
  • metadatas:为每个文档添加元数据,例如 "chapter""verse"
  • ids:为每个文档指定唯一的 idid1id2id3)。

5. 获取已存储的文档

collection.get(ids=["id1", "id2", "id3"]
)

输出:

{'ids': ['id1', 'id2', 'id3'],'embeddings': None,'documents': ['lorem ipsum...', 'doc2', 'doc3'],'uris': None,'data': None,'metadatas': [{'chapter': '3', 'verse': '16'},{'chapter': '3', 'verse': '5'},{'chapter': '29', 'verse': '11'}],'included': ['documents', 'metadatas']
}

解释:

  • documents:返回存储的文档内容。
  • metadatas:返回对应的元数据。
  • ids:返回请求的 id
  • embeddings 为空,因为当前存储时没有计算嵌入(可能是 OpenAI API 限制或者设置问题)。

6. 更新文档

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

解释:

  • 更新 id1 对应的 document"lorem ipsum..." 变为 "doc1"
  • 其他 id 保持不变。

7. 再次获取数据,验证更新结果

collection.get(ids=["id1", "id2", "id3"]
)

输出:

{'ids': ['id1', 'id2', 'id3'],'embeddings': None,'documents': ['doc1', 'doc2', 'doc3'],'uris': None,'data': None,'metadatas': [{'chapter': '3', 'verse': '16'},{'chapter': '3', 'verse': '5'},{'chapter': '29', 'verse': '11'}],'included': ['documents', 'metadatas']
}

解释:

  • id1document 成功更新为 "doc1",其他数据未改变。

8. 删除某个文档

collection.delete(ids=["id1"]
)

解释:

  • 删除 id1 对应的文档。

9. 获取已删除的文档

collection.get(ids=["id1"]
)

输出:

{'ids': [],'embeddings': None,'documents': [],'uris': None,'data': None,'metadatas': [],'included': ['documents', 'metadatas']
}

解释:

  • id1 的数据已经被删除,因此返回空列表。

总结

本代码展示了如何使用 ChromaDB 进行以下操作:

  1. 创建集合,并使用 OpenAI 生成嵌入。
  2. 添加文档 到集合。
  3. 查询文档数量获取文档
  4. 更新文档内容
  5. 删除文档 并验证删除结果。

这样,你可以使用 ChromaDB 作为一个轻量级的向量数据库,结合 chatGLM 的嵌入模型进行信息存储和查询。

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

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

相关文章

我的世界1.20.1forge模组开发进阶物品(7)——具有动画、3D立体效果的物品

基础的物品大家都会做了对吧?包括武器的释放技能,这次来点难度,让物品的贴图呈现动画效果和扔出后显示3D立体效果,这个3D立体效果需要先学习blockbench,学习如何制作贴图。 Blockbench Blockbench是一个用于创建和编辑三维模型的免费软件,特别适用于Minecraft模型的设计…

大模型在败血症预测及围手术期管理中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、败血症概述 2.1 定义与流行病学 2.2 病因与发病机制 2.3 临床表现与诊断标准 2.4 并发症与危害 三、大模型技术原理及在医疗领域的应用 3.1 大模型技术概述 3.2 大模型在医疗领…

SpringBoot接口自动化测试实战:从OpenAPI到压力测试全解析

引言&#xff1a;接口测试的必要性 在微服务架构盛行的今天&#xff0c;SpringBoot项目的接口质量直接影响着系统稳定性。本文将分享如何通过自动化工具链实现接口的功能验证与性能压测&#xff0c;使用OpenAPI规范打通测试全流程&#xff0c;让您的接口质量保障体系更加完备。…

微软具身智能感知交互多面手!Magma:基于基础模型的多模态AI智能体

作者&#xff1a; Jianwei Yang, Reuben Tan, Qianhui Wu, Ruijie Zheng, Baolin Peng, Yongyuan Liang, Yu Gu, MuCai, SeonghyeonYe, JoelJang, Yuquan Deng, Lars Liden, Jianfeng Gao 单位&#xff1a;微软研究院&#xff0c;马里兰大学&#xff0c;威斯康星大学麦迪逊分校…

Linux中jdk-8u291-linux-x64 中jdk工具包

jdk-8u291-linux-x64 指的是适用于 64 位 Linux 系统的 Java 开发工具包&#xff08;JDK&#xff09;8 更新 291 版本。这是 JDK 的一个特定版本&#xff0c;用于开发 Java 应用程序和小程序。 jdk-8u291-linux-x64 网盘下载链接&#xff1a;夸克网盘分享

Baklib云内容中台的核心架构是什么?

云内容中台分层架构解析 现代企业内容管理系统的核心在于构建动态聚合与智能分发的云端中枢。以Baklib为代表的云内容中台采用三层架构设计&#xff0c;其基础层为数据汇聚工具集&#xff0c;通过标准化接口实现多源异构数据的实时采集与清洗&#xff0c;支持从CRM、ERP等业务…

17.3 LangSmith Evaluation 深度解析:构建数据驱动的模型优化体系

LangSmith Evaluation 深度解析:构建数据驱动的模型优化体系 关键词:模型评估体系、自动化测试框架、业务指标对齐、A/B测试集成、生产级质量监控 1. Evaluation 核心功能全景 1.1 评估维度矩阵 维度评估指标示例采集方式质量评估准确率、相关性评分、事实性检查人工标注+A…

华为 VRP 系统简介配置SSH,TELNET远程登录

华为 VRP 系统简介&配置TELNET远程登录 1.华为 VRP 系统概述 1.1 什么是 VRP VRP&#xff08;Versatile Routing Platform 华为数通设备操作系统&#xff09;是华为公司数据通信产品的通用操作系统平台&#xff0c;从低端到核心的全系列路由器、以太网交换机、业务网关等…

算法基础 -- 字符串哈希的基本概念和数学原理分析

字符串哈希的基本概念和数学原理分析 1. 字符串哈希的定义和基本概念 哈希函数的定义 哈希函数&#xff08;Hash Function&#xff09;是一种将任意长度的输入映射为固定长度输出的函数。对于字符串而言&#xff0c;哈希函数通过某种算法将字符串转换成一个整数&#xff0c;…

从新加坡《Companion Guide on Securing AI Systems 》看可信AI全生命周期防护框架构建

从新加坡《AI系统安全指南配套手册》看可信AI全生命周期防护框架构建 一、引言 1.1 研究背景与意义 近年来,人工智能(AI)技术以前所未有的速度蓬勃发展,已然成为推动各行业变革与创新的核心驱动力。从医疗领域辅助疾病诊断,到金融行业的风险预测与智能投顾,再到交通领…

C++学习之C++初识、C++对C语言增强、对C语言扩展

一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 &#xff0c;理解为打开一个房间&#xff0c;房间里有我们所需…

HTMLS基本结构及标签

HTML5是目前制作网页的核心技术&#xff0c;有叫超文本标记语言。 基本结构 声明部分位于文档的最前面&#xff0c;用于向浏览器说明当前文档使用HTML标准规范。 根部标签位于声明部分后&#xff0c;用于告知浏览器这是一个HTML文档。< html>表示文档开始&#xff0c;&l…

eMMC存储器详解(存储区域结构、EXT_CSD[179]、各分区介绍、主要引脚、命令格式与类型等)

读本篇博文所需要的先行知识 关于芯片内部的ROM的作用、工作原理的介绍&#xff0c;链接如下&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/145969584 eMMC的物理结构、特点、用途 这个标题的相关内容见我的另一篇博文&#xff0c;博文链接如下&#xff1a…

分布式锁—2.Redisson的可重入锁一

大纲 1.Redisson可重入锁RedissonLock概述 2.可重入锁源码之创建RedissonClient实例 3.可重入锁源码之lua脚本加锁逻辑 4.可重入锁源码之WatchDog维持加锁逻辑 5.可重入锁源码之可重入加锁逻辑 6.可重入锁源码之锁的互斥阻塞逻辑 7.可重入锁源码之释放锁逻辑 8.可重入锁…

iOS实现一个强大的本地状态记录容器

我们开发中经常会遇到这样的场景&#xff0c;就是我们客户端用户进行了某个操作&#xff0c;这个操作影响了数据的状态&#xff0c;但是我们又不方便重新请求一次数据&#xff0c; 这个时候&#xff0c;就需要我们记录一下本地状态在内存中&#xff0c;随着业务越来越复杂&…

vue中带$的是什么

在Vue.js中&#xff0c;带的 $ 符号用于表示 Vue实例的属性和方法。 这些属性和方法是Vue框架内部定义的&#xff0c;主要用于方便开发者在组件内部访问和使用。 常见的带$的属性和方法: ‌$data‌&#xff1a;用于访问组件的内部数据对象&#xff0c;包含组件内定义的所有响…

杰和科技工业整机AF208|防尘+静音+全天候运行

在特殊的工业环境中&#xff0c;实现快速生产离不开各类工业计算机的强大支持。杰和科技工业计算机AF208&#xff0c;作为核心控制单元&#xff0c;凭借其坚固可靠的外壳、先进的散热技术以及紧凑灵活的部署特点&#xff0c;发挥着关键作用。 硬实力外壳&#xff0c;无惧尘埃 …

【django】模型部署过程

模型部署 示例&#xff1a;保存 Scikit-learn 模型myapp/views.py全局加载模型tasks.py&#xff08;Celery任务&#xff09;views.py 修改为异步调用views.py 准备工作 模型保存格式 确保你的模型已保存为可加载的格式&#xff1a; ● TensorFlow/Keras&#xff1a;.h5 或 Save…

一、计算机网络技术——概述、性能指标

网络技术发展历程 第一阶段 一九六九年美国国防部研制的ARPANET&#xff0c;采用“接口报文处理机”将四台独立的计算机主机互联在一起&#xff0c;实现数据的转发。 这一阶段的主要特点是TCP/IP协议初步成型 第二阶段&#xff1a; 采用三级结构&#xff0c;这一阶段的主要…

【向量数据库Weaviate】与ChromaDB的差异、优劣

以下是 Weaviate 和 ChromaDB 的详细对比&#xff0c;涵盖设计目标、核心功能、性能、适用场景及优劣势分析&#xff1a; 1. 核心定位与设计目标 维度WeaviateChromaDB类型向量数据库 图数据库&#xff08;支持混合搜索&#xff09;轻量级纯向量数据库&#xff08;专注嵌入存…