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.rhkb.cn/news/27544.html

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

相关文章

Free Auto Clicker - 在任意位置自动重复鼠标点击

“想让鼠标自己动起来&#xff0c;解放双手去做更有趣的事&#xff1f;”Free Auto Clicker 就像你的数字小助手&#xff0c;能在任意位置自动重复点击鼠标。从玩游戏到刷网页&#xff0c;这款免费工具让你告别枯燥的重复操作&#xff0c;效率瞬间起飞&#xff01; 你有没有想…

【SQL】MySQL中的字符串处理函数:concat 函数拼接字符串,COALESCE函数处理NULL字符串

MySQL中的字符串处理函数&#xff1a;concat 函数 一、concat &#xff08;&#xff09;函数 1.1、基本语法1.2、示例1.3、特殊用途 二、COALESCE&#xff08;&#xff09;函数 2.1、基本语法2.2、示例2.3、用途 三、进阶练习 3.1 条件和 SQL 语句3.2、解释 一、concat &…

蓝桥杯web第三天

展开扇子题目&#xff0c; #box:hover #item1 { transform:rotate(-60deg); } 当悬浮在父盒子&#xff0c;子元素旋转 webkit display: -webkit-box&#xff1a;将元素设置为弹性伸缩盒子模型。-webkit-box-orient: vertical&#xff1a;设置伸缩盒子的子元素排列方…

VSCode知名主题带毒 安装量900万次

目前微软已经从 Visual Studio Marketplace 中删除非常流行的主题扩展 Material Theme Free 和 Material Theme Icons&#xff0c;微软称这些主题扩展包含恶意代码。 统计显示这些扩展程序的安装总次数近 900 万次&#xff0c;在微软实施删除后现在已安装这些扩展的开发者也会…

离散傅里叶变换(Discrete Fourier Transform, DFT)及其在图像处理中的应用

离散傅里叶变换&#xff08;DFT&#xff09;及其在图像处理中的应用 什么是离散傅里叶变换&#xff1f; 离散傅里叶变换&#xff08;Discrete Fourier Transform, DFT&#xff09;是一种强大的数学工具&#xff0c;用于将离散信号从时域&#xff08;或空间域&#xff09;转换…

金融支付行业技术侧重点

1. 合规问题 第三方支付系统的平稳运营&#xff0c;严格遵循《非银行支付机构监督管理条例》的各项条款是基础与前提&#xff0c;其中第十八条的规定堪称重中之重&#xff0c;是支付机构必须牢牢把握的关键准则。 第十八条明确指出&#xff0c;非银行支付机构需构建起必要且独…

JavaWeb-jdk17安装

下载jdk17 地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#jdk17-windows 安装jdk 配置环境变量 右键点击我的电脑>属性>高级系统设置>环境变量 在系统变量Path变量中添加 测试 java -version javac -version

java后端开发day24--阶段项目(一)

&#xff08;以下内容全部来自上述课程&#xff09; GUI&#xff1a;Graphical User Interface 图形用户接口&#xff0c;采取图形化的方式显示操作界面 分为两套体系&#xff1a;AWT包&#xff08;有兼容问题&#xff09;和Swing包&#xff08;常用&#xff09; 拼图小游戏…

[Web 安全] PHP 反序列化漏洞 —— PHP 魔术方法

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 魔术方法 - 简介 - PHP 魔术方法 - 简单教程&#xff0c;简单编程PHP 中&#xff0c;以两个下划线 ( __ ) 开头方法称之为 「 魔术方法 」 这些 「 魔术方法 」 在 [PHP](/l/yufei/php…

【音视频】音频基础

一、音频基础 1.1 声音的物理性质 ——振动 声音是一种由物体振动引发的物理现象&#xff0c;如小提琴的弦声等。物体的振动使其四周空气的压强产生变化&#xff0c;这种忽强忽弱变化以波的形式向四周传播&#xff0c;当被人耳所接收时&#xff0c;我们就听见了声音。 1.2 声…

Hive-04之存储格式、SerDe、企业级调优

一、主题 hive表的数据压缩和文件存储格式hive的自定义UDF函数hive的JDBC代码操作hive的SerDe介绍和使用hive的优化 二、要点 1. hive表的文件存储格式 Hive支持的存储数的格式主要有&#xff1a;TEXTFILE&#xff08;行式存储&#xff09; 、SEQUENCEFILE(行式存储)、ORC&…

人工智能AI在汽车设计领域的应用探索

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

基于SpringBoot的“数据驱动的资产管理系统站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“数据驱动的资产管理系统站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统登录界…

矩阵压缩存储

矩阵压缩存储 特殊矩阵和稀疏矩阵 特殊矩阵:矩阵中很多值相同的元素并且分布具有一定规律。 稀疏矩阵:矩阵中有很多零元素。 压缩矩阵的基本思想&#xff1a; (1)为多个值相同的元素只分配一个存储空间&#xff1b; (2)对零元素不分配存储空间。 一.特殊矩阵的压缩存储 对…

算法系列之数据结构-二叉树

在计算机科学中&#xff0c;数据结构是组织和存储数据的方式&#xff0c;以便能够高效地访问和修改数据。树&#xff08;Tree&#xff09;是一种非常重要的非线性数据结构&#xff0c;广泛应用于各种算法和应用中。本文将详细介绍树的基本概念、常见类型以及用Java实现树的遍历…

Golang的数据库分库分表

# Golang的数据库分库分表 什么是数据库分库分表 数据库分库分表是指将单一的数据库拆分成多个库&#xff0c;每个库中包含多张表&#xff0c;以提高数据库的性能和可伸缩性。通常在大型应用中&#xff0c;单一的数据库往往无法满足高并发和海量数据的需求&#xff0c;因此需要…

FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…

探索Elasticsearch:文档的CRUD

在企业环境中&#xff0c;Elasticsearch对文档操作的支持不仅是实现高效搜索的关键&#xff0c;更是数据驱动决策的重要支柱。它通过强大的索引机制和灵活的查询语言&#xff0c;使企业能够实时处理和分析海量文档数据&#xff0c;迅速获取有价值的洞察&#xff0c;从而加速创新…

数组中的逆序对(C++)

目录 1 问题描述 1.1 输入描述&#xff1a; 1.2 示例1 1.3 示例2 2 解题思路 2.1 暴力解法 2.2 归并排序法 3 代码实现 3.1 暴力解法 3.2 归并排序法 4 代码解析 4.1 暴力解法 4.1.1 初始化 4.1.2 判断是否是逆序对 4.2 归并排序法 4.2.1 InversePairs 主函数 …

Spring Boot全局异常处理:“危机公关”团队

目录 一、全局异常处理的作用二、Spring Boot 实现全局异常处理&#xff08;附上代码实例&#xff09;三、总结&#xff1a; &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;可以多多支持一下&#xff0c;感谢&#x1…