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

2024-04-13 00:52

本文主要是介绍向量数据库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 Settingschroma_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_clientdef create_collection(collection_name):"""创建collection"""chroma_client = init_db_client()collection=chroma_client.get_or_create_collection(name=collection_name)return collectiondef 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的安装、连接、创建数据、写入数据、查询数据等。

这篇关于向量数据库Chroma初步了解学习记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898708

相关文章

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态