向量数据库Chroma初步了解学习记录

目录

前言

一、Chroma是什么?

二、使用步骤

1.安装

2.连接Chroma

内存模式

client模式

Server模式

3.创建数据集

4.写入数据

5.查询数据

 6.完整代码

7.更多参考

三、瞅瞅chroma之sqlite

总结


前言

大模型很强大,但是大模型也存在知识的局限性,即大模型的知识受限于大模型训练日期,大模型的知识是有截止日期的,不是实时的;再一个有些数据是私有的,大模型也无从知晓。

那么RAG就有了用武之地。而Rag这块就不得不提到向量数据库。

虽然传统数据库也可以进行数据查询检索,但是传统数据库是基于关键词,是没有语义理解的。而向量数据库可以进行语义理解,本质上其实是将语言文字做了向量化,即语义空间,语义相近的向量信息也接近。

向量数据库目前也有很多产品,入门简单的首推Chroma,今天就介绍下


一、Chroma是什么?

ChromaDB(也称为Chroma)是一个开源的向量数据库,主要用于AI和机器学习场景。它的主要功能是存储和查询向量数据,这些数据通常是通过嵌入(embedding)算法从文本、图像等数据转换而来的。ChromaDB的设计目标是简化大模型应用的构建过程,允许开发者轻松地将知识、事实和技能等文档整合进大型语言模型(LLM)中。

ChromaDB的特点包括:

  1. 轻量级: 它是一个基于向量检索库实现的轻量级向量数据库。
  2. 易用性: 提供简单的API,易于集成和使用。
  3. 功能丰富: 支持存储嵌入及其元数据、嵌入文档和查询、搜索嵌入等功能。
  4. 集成: 可以直接插入LangChain、LlamaIndex、OpenAI等。
  5. 多语言支持: 包括Python和JavaScript客户端SDK。
  6. 开源: 采用Apache 2.0开源许可。

ChromaDB的一些限制包括目前只支持CPU计算,不支持GPU加速,且功能相对简单。不过,它计划未来推出托管产品,提供无服务器存储和检索功能,支持向上和向下扩展,让开发者更易于使用。

二、使用步骤

1.安装

ChromaDB的安装简单,可以通过pip或npm进行安装。在Python中,可以通过运行pip install chromadb来安装ChromaDB。

2.连接Chroma

内存模式

数据存在内存,程序运行完数据也就没了

import chromadb
from chromadb.config import Settings

chroma_client = chromadb.Client(Settings(allow_reset=True))

# 为了演示,实际不需要每次 reset()
# chroma_client.reset()

client模式

直接连接本地数据库文件,类似sqlite(看了下,Chroma底层存储就是基于sqlite,后面可以简单说下)

import chromadb
# chroma_client = chromadb.Client()
chroma_client = chromadb.PersistentClient(path="E:\Data\chroma\mydb.db")

Server模式

cmd

chroma run --path E:\Data\chroma\test

这个时候会以命令中指定的路径,创建数据库文件,并启动Chroma服务

回到代码

​import chromadb
chroma_client = chromadb.HttpClient(host='localhost', port=8000)

3.创建数据集

collection类似关系型数据库的表

collection = chroma_client.get_or_create_collection(name=collection_name)

4.写入数据

collection.add(
        # embeddings=self.embedding_fn(documents),  # 每个文档的向量
        documents=documents,  # 文档的原文
        ids=[f"id{i}" for i in range(len(documents))]  # 每个文档的 id
    )

embeddings参数是文档的向量,这里一般需要调用大模型的embedding模型接口

如果不设置,那么会使用内置的embedding模型

5.查询数据

res=collection.query(
        query_texts=["查询内容"],
        n_results=5
    )

 6.完整代码

import chromadb

# collection名称
collection_name="test_01"

def init_db_client():
    """初始化数据库客户端"""
    chroma_client = chromadb.HttpClient(host='localhost', port=8000)
    return chroma_client

def create_collection(collection_name):
    """创建collection"""
    chroma_client = init_db_client()
    collection=chroma_client.get_or_create_collection(name=collection_name)
    return collection

def add_documents(collection, documents):
    """写入数据"""
    collection.add(
        # embeddings=self.embedding_fn(documents),  # 每个文档的向量
        documents=documents,  # 文档的原文
        ids=[f"id{i}" for i in range(len(documents))]  # 每个文档的 id
    )

def db_test():
    collection = create_collection(collection_name)
    datas=[
        "小明喜欢吃苹果", 
        "小红喜欢吃榴莲",
        "小明的女朋友是小丽",
        "王老师是一个好老师",
        "小李喜欢吃香蕉",
        "小王的男朋友是大帅哥"
    ]

    add_documents(collection, datas)

    # 查询数据
    res=collection.query(
        query_texts=["谁是老师"],
        n_results=5
    )

    print(res)

db_test()

7.更多参考

向量数据库Chroma极简教程 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/665715823?utm_id=0

三、瞅瞅chroma之sqlite

看下chroma数据库文件可以发现其数据库实际名称是:chroma.sqlite3

然后我试着用sqlite数据库工具是可以打开这个数据库文件的,有一些固化的表,随便看了下,也是可以找到我写入的数据的。

比如:

collections:新建一个collection这里就有一条记录

embedding_fulltext_search:我写入的数据,这里都有

embedding_fulltext_search_content:同上,不过多了一列id

embedding_fulltext_search_data:这个表数据做编码处理了

embedding_metadata:我写入的数据,这里都有,不过又多了几列


总结

以上就是今天要讲的内容,本文主要对chroma向量数据库进行了基本介绍,然后又介绍了chroma的安装、连接、创建数据、写入数据、查询数据等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

格灵深瞳,实现核心能力高强度保护与灵活交付

格灵深瞳,AI领域的领先企业,借助泰雷兹圣天诺技术,实现核心能力高强度保护与灵活交付,引领行业风向,安策信息助力AI行业企业实现产品核心能力保护、销售模式创新以及软件产品的灵活交付。 格灵深瞳,AI领域的…

量子密钥分发系统的设计与实现(二):光路子系统初步讨论

通过上一篇文章,我们对量子密钥分发系统的基本架构、硬件结构以及密钥分发流程进行了初步的总体介绍,从本文开始,我们就基于系统顶层的架构设计,开始从模块到器件,从硬件到软件开始详细讨论QKD系统的设计与实现。本文主…

Python爬取猫眼电影票房 + 数据可视化

目录 主角查看与分析 爬取可视化分析猫眼电影上座率前10分析猫眼电影票房场均人次前10分析猫眼电影票票房占比分析 主角查看与分析 爬取 对猫眼电影票房进行爬取,首先我们打开猫眼 接着我们想要进行数据抓包,就要看网站的具体内容,通过按F12…

注塑机自动喷雾程序 报警自动关机

/***参数设置,开模数计数,秒脉冲计时***************/ /***实现功能:检测报警信号,脱模剂开模数计数信号***/ /***参数:1:脱模剂开模数 2:喷雾时间 3:延时时间 ***/ /***串口接收触摸屏参数设置字符串,接收并保存******/ /***端子输入口读开模数,比较设定值后输出到电磁阀**/ /…

Emmet表达式

目录 Emmet语法简介 Emmet作用 Emmet在HTML中的使用 Emmet在CSS中的使用 Emmet语法简介 Emmet语法的前身是Zen coding,它使用缩写,来提高HTML的编写速度,VScode内部已经集成该语法。 Emmet作用 快速生成HTML结构语法快速生成CSS样式语法 Emmet在HTML中的使用…

python连接数据库失败怎么解决

Python 连接数据库失败怎么解决? 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。…

Vue_管道符“|”(单竖线)的用处

目录 1、管道符是什么 2、应用场景 背景:项目中偶遇在 {{ }} 插值表达式里用了 “|”此写法,一开始误以为是写错了,应该是写成 “||” 双竖线( 逻辑或运算符 ),结果询问…

为什么用云渲染农场?3D云渲染农场助力影视动画行业发展

​计算机图形技术的进步使得3D渲染成为多个产业发展的重要推动力。设计师和艺术家利用这项技术将创意实现,创造出震撼的视觉作品。但是,高质量的渲染需要大量的计算资源。云渲染农场通过提供这些资源,有效提高了渲染的速度和效率,…

DRF 序列化类serializer单表

【五】序列化类serializer单表 【1】主要功能 快速序列化 将数据库模型类对象转换成响应数据,以便前端进行展示或使用。这些响应数据通常是以Json(或者xml、yaml)的格式进行传输的。 反序列化之前数据校验 序列化器还可以对接收到的数据进行…

学习 Rust 的第六天:所有权问题

大家好, 欢迎来到学习 Rust 的第 6 天,过去 5 天我们学到的内容在几乎每种语言中都是一样的。所有权是 Rust 的一个独特概念。 介绍 所有权是一种独特的内存管理系统,其中每个值都有一个指定的所有者,在所有者超出范围时自动释…

java实现wav的重采样

原因是之前写的TTS文件,需要指定采样率和单声道 但是TTS是用的Jacob调用COMsapi实现的 javaWNI10JACOB方式 SAPI底层支持的是C,C#【官方文档】 SpAudioFormat SetWaveFormatEx method (SAPI 5.4) | Microsoft Learn 用C实现的方式【可指定输出的WAV…

算法练习第19天|222.完全二叉树的节点个数

222.完全二叉树的节点个数 222. 完全二叉树的节点个数 - 力扣(LeetCode)https://leetcode.cn/problems/count-complete-tree-nodes/description/ 题目描述: 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。题目数据保…

【Python】穿越Python的迭代之旅:while,for 循环的奇妙世界

欢迎来到CILMY23的博客 本篇主题为: 穿越Python的迭代之旅:while,for 循环的奇妙世界 个人主页:CILMY23-CSDN博客 系列专栏:Python | C | C语言 | 数据结构与算法 感谢观看,支持的可以给个一键三连&…

spring的redis注解@Cacheable @Cacheput @CacheEvict的condition、unless

概述 redis的注解使用的过程中总会遇到condition和unless这两个属性,而且不同的注解使用注意事项不一样。本人也是错误使用之后详细查询了一下,作了如下的总结。 Cacheale 这个注解的使用和意义这里不多说,可以查看我的其他文档。这里主要说…

【C++】二维数组传参方式

最近刚开始刷剑指offer,刚做到第三题的时候,发现C二维数组的传参方式和C语言略有些不同,所以在这篇博客中,会列出C/C常见的二维数组传参方式。(本方式和代码都是基于vs环境所编写) 一.C语言二维数组传参方式…

18.读取指定目录下的txt文档时,调用另外一个python文件

1.题目 遍历4K_phone和4K_VR目录下的所有txt文件,并将它们的内容合并到一个名为4k_decoding.txt的文件中。 但是,假设你有一个名为another_script.py的Python文件,你想在合并txt文件之前执行它生成要处理的txt文档。 最后统计完原始的txt文件…

算法与数据结构要点速学——通用 DS/A 流程图

通用 DS/A 流程图 这是一个流程图,可以帮助您确定应该使用哪种数据结构或算法。请注意,此流程图非常笼统,因为不可能涵盖每个场景。 请注意,此流程图仅涵盖 LICC 中教授的方法,因此排除了像 Dijkstra 等更高级的算法。…

eclipse配置SVN和Maven插件

3、 安装SVN插件 使用如下方法安装 Help–Install New Software 注意:目前只能安装1.8.x这个版本的SVN,如果使用高版本的SVN,在安装SVN和maven整合插件的时候就会报错,这应该是插件的bug。 点击Add name: subclipse location…

区块链知识总结——比特币中的密码学原理

比特币中的密码学原理: 比特币的本质:crypto-currency. 比特币用到密码学中的两个功能: 1.哈希函数(cryptographic hash function) 三个重要性质: (1)抗碰撞性collison resista…

3 xgboost

目录 1 定义 1.1 模型定义 1.2 损失函数 1.3 化简损失函数 xgboost比赛以及工程利器。目前存在大量有关算法文档。 XGBoost(eXtreme Gradient Boosting)是一种基于决策树集成的机器学习算法,被广泛应用于分类、回归和排名等任务。XGBoost…