240922-chromadb的基本使用

在这里插入图片描述

A. 基本使用

ChromaDB 是一个专门为向量数据库和嵌入查询优化的数据库。它可以与嵌入模型结合使用,存储和查询高维向量数据,通常用于大规模语义搜索、推荐系统等领域。

以下是使用 ChromaDB 的步骤:

1. 安装 ChromaDB

你可以通过 pip 安装 ChromaDB:

pip install chromadb

2. 创建一个数据库并插入数据

你需要创建一个 Chroma 的实例,然后可以在这个实例中创建一个集合并添加向量数据。

import chromadb# 创建 ChromaDB 客户端
client = chromadb.Client()# 创建一个集合,用于存储向量数据
collection = client.create_collection(name="my_collection")# 插入向量数据
documents = ["Document 1", "Document 2", "Document 3"]
embeddings = [[0.1, 0.2, 0.3],  # 向量 1[0.4, 0.5, 0.6],  # 向量 2[0.7, 0.8, 0.9],  # 向量 3
]
metadata = [{"source": "A"}, {"source": "B"}, {"source": "C"}]collection.add(documents=documents,    # 文本embeddings=embeddings,  # 对应的嵌入向量metadatas=metadata      # 附加的元数据
)

3. 查询向量

你可以根据提供的查询向量进行相似性搜索,查找与查询向量相似的文档。

query_embedding = [0.2, 0.3, 0.4]  # 你的查询向量# 搜索最相似的文档
results = collection.query(query_embeddings=[query_embedding],n_results=2  # 返回最相似的 2 个文档
)# 输出结果
print(results)

4. 更新与删除数据

你可以根据需要更新或删除某些向量或文档:

更新:
collection.update(ids=["id_of_document"],  # 要更新的文档的 iddocuments=["Updated document"],embeddings=[[0.9, 0.8, 0.7]],  # 更新后的嵌入向量
)
删除:
collection.delete(ids=["id_of_document"])  # 删除特定 ID 的文档

5. 获取集合中的数据

如果你想获取某个集合中的所有数据,可以使用以下方法:

all_docs = collection.get()
print(all_docs)

6. 使用 OpenAI 生成的嵌入向量

你还可以结合 OpenAI 等模型生成文本的嵌入向量,然后存储到 ChromaDB 中:

import openai# 使用 OpenAI 模型生成嵌入
response = openai.Embedding.create(model="text-embedding-ada-002",input="This is a sample document."
)embedding = response['data'][0]['embedding']

生成嵌入后,你可以将其插入到 ChromaDB 中,用于后续的查询和分析。

总结

ChromaDB 的主要功能包括:

  • 存储和管理高维向量数据。
  • 快速进行相似性搜索。
  • 结合嵌入模型,用于语义搜索、推荐等应用。

如果你有更具体的需求或场景,可以进一步定制使用 ChromaDB 的操作。

B. 持久化与增量更新

在 ChromaDB 中,要实现持久化增量更新,可以利用以下机制:

1. 持久化存储

ChromaDB 默认使用内存中的数据库来存储数据,但它也支持将数据持久化到磁盘,以便在应用重启后仍然保留数据。要实现持久化存储,你可以指定一个路径来保存数据。

import chromadb# 创建持久化的 ChromaDB 客户端,指定存储路径
client = chromadb.Client(persist_directory="./chromadb_data")# 创建或加载集合
collection = client.create_collection(name="my_collection")# 插入文档和向量
documents = ["Document 1", "Document 2"]
embeddings = [[0.1, 0.2, 0.3],[0.4, 0.5, 0.6],
]
metadata = [{"source": "A"}, {"source": "B"}]collection.add(documents=documents,embeddings=embeddings,metadatas=metadata
)# 调用这个方法来保存数据到磁盘
client.persist()

每当你更新或插入数据后,可以调用 client.persist() 将数据写入磁盘,这样即使程序关闭后,数据依然存在。

2. 增量更新

增量更新指的是当有新数据时,不必重写整个数据库,而只对新数据进行添加或修改。

增量插入新数据

你可以使用 collection.add() 方法来增量添加新文档和嵌入向量:

# 插入新的文档和嵌入
new_documents = ["Document 3"]
new_embeddings = [[0.7, 0.8, 0.9]]
new_metadata = [{"source": "C"}]# 增量添加到现有的集合中
collection.add(documents=new_documents,embeddings=new_embeddings,metadatas=new_metadata
)# 持久化保存增量更新的数据
client.persist()
更新现有的数据

如果你需要更新现有的文档或向量,可以使用 collection.update()

# 更新已有的文档,假设你要更新 ID 为 "doc_id_1" 的文档
collection.update(ids=["doc_id_1"],  # 更新文档的 IDdocuments=["Updated Document 1"],  # 新的文档内容embeddings=[[0.3, 0.4, 0.5]]  # 新的向量
)# 持久化保存更新
client.persist()
删除文档

如果需要删除某些文档,可以使用 collection.delete() 方法:

# 删除 ID 为 "doc_id_1" 的文档
collection.delete(ids=["doc_id_1"])# 持久化保存更新
client.persist()

3. 加载已有数据

当你启动应用时,ChromaDB 可以从指定的持久化路径中加载已经保存的数据:

# 创建持久化的 ChromaDB 客户端并加载数据
client = chromadb.Client(persist_directory="./chromadb_data")# 加载已有的集合
collection = client.get_collection(name="my_collection")# 现在你可以查询、更新或删除集合中的数据

总结

  1. 持久化:通过指定 persist_directory 来保存数据到磁盘,并使用 client.persist() 确保更新写入磁盘。
  2. 增量更新:可以使用 collection.add() 插入新数据,collection.update() 更新现有数据,或 collection.delete() 删除数据,增量更新不会影响已有数据。
  3. 加载持久化数据:在应用启动时,通过指定路径加载已经保存的数据库集合。

这种方式确保数据的持久性,并且支持高效的增量更新。

C. 参考文献

  • chroma-core/chroma: the AI-native open-source embedding database
  • alejandro-ao/langchain-ask-pdf: An AI-app that allows you to upload a PDF and ask questions about it. It uses OpenAI’s LLMs to generate a response.
  • VikParuchuri/marker: Convert PDF to markdown quickly with high accuracy
  • 240922-Ollama使用Embedding实现RAG-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

96. UE5 GAS RPG 实现闪电链技能(一)

闪电链有一个施法的过程,就是在按键按下的过程,会在按下的过程一直持续造成伤害,一直等到条件不满足(技能键位抬起,蓝量不足,被眩晕)时,将结束技能,并退出技能状态。 所以…

【WSL迁移】将WSL2迁移到D盘

首先查看WSL状态:wsl -l -v 以压缩包的形式导出到其他盘。 wsl --export Ubuntu D:\Ubuntu_WSL\ubuntu.tar 注销原有的linux系统 wsl --unregister Ubuntu 导入系统到D盘 wsl --import Ubuntu D:\Ubuntu_WSL D:\Ubuntu_WSL\Ubuntu.tar 恢复默认用户 Ubuntu co…

如何保护您的机器学习模型

在计算机技术领域,很少有领域像人工智能(AI)和机器学习(ML)一样受到如此多的关注。这门学科位于计算机科学和数据分析的交叉点,已成为移动应用程序、语音助手、欺诈交易检测、图像识别、自动驾驶甚至医疗诊断不可或缺的一部分。 背景介绍由于机器学习模型…

数据结构与算法——Java实现 9.习题——删除链表倒数节点

目录 19. 删除链表的倒数第 N 个结点 方法1 通过链表长度直接删除 方法2 递归加入哨兵节点 ListNode 方法3 快慢指针法 苦难,区区挫折罢了,而我必定站在幸福的塔尖 —— 24.9.22 19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第…

预付费计量系统整体概念

1.预付费计量系统整体概念 A Payment Metering System is a collective infrastructure that supports the contractual relationship between a supplier of goods or services and a customer. It includes processes, functions, data elements, system entities (devices a…

鸿蒙 OS 开发零基础快速入门教程

视频课程: 东西比较多, 这里主要分享一些代码和案例. 开关灯效果案例: 开灯 开关灯效果案例: 关灯 Column 和 Row 的基本用法 Entry Component struct Index {State message: string 张三;build() {// 一行内容Row() {// 一列内容Column() {// 文本内容Text(this.mess…

IDEA创建Web项目(详细版)

目录 1 新建Web项目 步骤如下 1 打开idea,选择新建项目 2 点击创建 3 点击项目结构,选择添加模块 ---web 2 配置Tomcat 步骤如下 1 点击Edit Configurations(编辑配置) 1.1 右上角当前文件下 选择编辑配置 1.2 点击菜单栏中run 选…

宝塔linux 安装code-server指定对应的端口无法访问

这个一般就是nginx搞的鬼,如果服务正常启动,就是访问不了;大概就是宝塔安装的nginx配置没有代理code-server服务对应的端口,一般就是nginx配置文件的问题 安装默认的nginx会有一个配置文件 直接拉到最后会有一行这个&#xff0c…

Linux 文件系统(下)

目录 一.文件系统 1.文件在磁盘上的存储方式 a.盘面、磁道和扇区 b.分区和分组 2.有关Block group相关字段详解 a.inode编号 b.inode Table(节点表) c.Data blocks(数据区) d.小结 二.软硬链接 1.软链接 a.软链接的创建…

springboot启动流程之总体流程梳理

springboot的启动流程相当复杂,我们需要先把控整体流程,后面会有若干文章一一讲解springboot启动流程中的重要的细节,springboot的启动经过了一些一系列的处理,我们先看看整体过程的流程图 篇幅有限,我们这里先聊聊实…

N叉树的前序与后续遍历(含两道leetcode题)

文章目录 589. N 叉树的前序遍历递归法迭代法 590. N 叉树的后序遍历递归法迭代法 589. N 叉树的前序遍历 589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由…

CSP-S 2024 提高组初赛第一轮初赛试题及答案解析

完整试题,CSP-S-2024 CSP-S 2024 提高组初赛第一轮初赛试题及答案解析 一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1 在 Linux 系统中,如果你想显示当前工作目录的…

哔哩哔哩自动批量删除抽奖动态解析篇(一)

本文的分析过程可能需要读者了解一点前后端数据交互和逆向分析的思路和基础,由于本人是新手,自己也处于摸索学习阶段,说的不对或者不好的地方敬请谅解。 一、删除动态流程分析 B站每条动态无论是转发他人的动态还是自己原创发布的动态都有一…

蓝桥杯1.小蓝的漆房

样例输入 2 5 2 1 1 2 2 1 6 2 1 2 2 3 3 3样例输出 1 2 import math import os import sys tint(input())#执行的次数 for j in range(t):n,kmap(int,input().split())#n为房间数 k为一次能涂的个数alist(map(int,input().split()))#以列表的形式存放房间的颜色maxvaluemath…

MySQL数据库的增删改查以及基本操作分享

1、登录MySQL数据库 首先找到你安装MySQL数据库的目录,然后在终端打开该目录,输入以下命令 mysql -u root -p然后输入密码就可以登录数据库了,看到如下页面就是登陆成功了 ***注意在终端操纵数据库时所有语句写完之后一定要加 &#xff1…

【基础算法总结】模拟篇

目录 一,算法介绍二,算法原理和代码实现1576.替换所有的问号495.提莫攻击6.Z字形变换38.外观数列1419.数青蛙 三,算法总结 一,算法介绍 模拟算法本质就是"依葫芦画瓢",就是在题目中已经告诉了我们该如何操作…

【记录】大模型|Windows 下 Hugging Face 上的模型的通用极简调用方式之一

这篇文是参考了这篇,然后后来自己试着搭了一下,记录的全部过程:【翻译】Ollama|如何在 Ollama 中运行 Hugging Face 中的模型_ollama 导入 huggingface-CSDN 博客 另外还参考了这篇:无所不谈,百无禁忌,Win11 本地部署无…

【大模型】AutoDL部署AI绘图大模型Stable Diffusion使用详解

目录 一、前言 二、AI绘图大模型概述 2.1 AI绘图大模型介绍 2.2 AI绘图大模型特点 2.3 AI绘图大模型优势 三、主流的AI绘图大模型介绍 3.1 Midjourney 3.1.1 Midjourney介绍 3.1.2 Midjourney功能特点 3.1.3 Midjourney使用场景 3.2 Stable Diffusion 3.2.1 Stable …

【WRF运行第二期(Ubuntu)】ARWpost安装

WRF运行第二期:ARWpost安装 1 ARWpost介绍2 ARWpost安装2.1 ARWpos_V3安装前准备2.2 安装ARWpos2.3 修改Makefile文件2.4 修改configure.arwp文件2.5 生成可执行文件EXE2.6 修改namelist.ARWpost 参考 1 ARWpost介绍 ARWpost 是WRF模型后处理程序之一,用…

前端组件库Element UI 的使用

一、准备工作 1.确保安装了开发软件 VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js 和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行…