AI原生嵌入式矢量模型数据库ChromaDB-部署与使用指南
在人工智能大模型领域, 离不开NLP技术,在NLP中词向量
是一种基本元素,如何存储这些元素呢? 可以使用向量数据库ChromeDB
Chroma
Chroma 是 AI 原生开源矢量数据库。Chroma 通过为 LLM 提供知识、事实和技能,使构建 LLM 应用程序变得容易。同时也是实现大模型RAG技术方案的一种有效工具。
简介
-
Chrome提供以下能力:
- 存储嵌入类型数据(embeddings)和其元数据
- 嵌入(embed)文档和查询
- 对嵌入类型的检索
-
Chrome 的原则:
- 对用户的简单性,并保障开发效率
- 同时拥有较好的性能
-
Chroma 作为服务器运行,同时提供客户端的SDK(支持Java, Go,Python, Rust等多种语言)。
安装与运行
- 首先要确保有安装有
Python
运行环境 - 安装
Chroma
模块pip install chromadb
- 创建数据库存储目录
mkdir db_data
- 运行
Chroma
服务并指定路径chroma run --path db_data
如图所示,Chroma
服务就成功启动啦!😄
将Chroma
作为服务常态化运行
将chromadb.service
配置文件放在/etc/systemd/system/
目录并用命令systemctl start chromadb
启动服务即可。
附赠一份配置模板,具体参数按实际情况配置即可。
[Unit]
Description=ChromaDB Service
After=network-online.target[Service]
ExecStart=/root/anachonda3/bin/chroma run --path /chromadb/db_data
User=root
Group=root
Restart=always
RestartSec=3
export CHROMA_SERVER_HOST=127.0.0.1
Environment=CHROMA_SERVER_HTTP_PORT=8881
ANONYMIZED_TELEMETRY=False
[Install]
WantedBy=default.target
Python客户端使用指南
- 导入模块并创建数据库连接
import chromadb chroma_client = chromadb.Client() # chroma_client = chromadb.HttpClient(host='localhost', port=8000)
- 创建数据库
集合
(collection)
因为collection = chroma_client.create_collection(name="my_collection") #chroma_client = chromadb.PersistentClient(path="/path/to/save/to") # 设置持久化路径
Chroma
在 url 中使用集合名称,因此命名有一些限制:- 名称的长度必须介于 3 到 63 个字符之间。
- 名称必须以小写字母或数字开头和结尾,并且中间可以包含点、破折号和下划线。
- 名称不得包含两个连续的点。
- 名称不得是有效的 IP 地址。
- 集合的一些便捷方法
# 返回集合中前10项的一个列表
collection.peek()
# 返回集合中的项目个数
collection.count()
# 重命名集合
collection.modify(name="new_name")
- 添加
文档
(documents)到集合
(collection)中collection.add( embeddings=[[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]], documents=["This is a document", "This is another document"], metadatas=[{"source": "my_source"}, {"source": "my_source"}], ids=["id1", "id2"] )
- 查询文档 n 个最相近的结果
results = collection.query( query_texts=["This is a query document"], n_results=2 )
- 便捷方法
chroma_client.heartbeat() # 纳秒级心跳,确保与服务端连接状态 chroma_client.reset() # 重置数据库,清除已有信息
查询集合
使用.query
方法查询集合
collection.query(query_embeddings=[[11.1, 12.1, 13.1],[1.1, 2.3, 3.2], ...],n_results=10,where={"metadata_field": "is_equal_to_this"},where_document={"$contains":"search_string"}
)
更新集合数据
使用.update
方法更新集合
collection.update(ids=["id1", "id2", "id3", ...],embeddings=[[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2], ...],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],documents=["doc1", "doc2", "doc3", ...],
)
使用upsert
更新数据,若不存在则新增。
collection.upsert(ids=["id1", "id2", "id3", ...],embeddings=[[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2], ...],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],documents=["doc1", "doc2", "doc3", ...],
)
从集合中删除数据
使用delete
方法删除数据
collection.delete(ids=["id1", "id2", "id3",...],where={"chapter": "20"}
)
总结
通过这次学习,了解到了使用ChromeDB
的基本方法,真是太好啦。
欢迎关注 公-众-号【编程之舞】,获取更多技术资源。
相关文章:

AI原生嵌入式矢量模型数据库ChromaDB-部署与使用指南
在人工智能大模型领域, 离不开NLP技术,在NLP中词向量是一种基本元素,如何存储这些元素呢? 可以使用向量数据库ChromeDB Chroma Chroma 是 AI 原生开源矢量数据库。Chroma 通过为 LLM 提供知识、事实和技能,使构建 L…...

c# 画一个正弦函数
1.概要 c# 画一个正弦函数 2.代码 using System; using System.Drawing; using System.Windows.Forms;public class SineWaveForm : Form {private const int Width 800;private const int Height 600;private const double Amplitude 100.0;private const double Period…...

Docker学习(3):镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。 一、列出镜像列表 可以使用 docker images 来列出本地主机上的镜像。 各个选项说明: REPOSITORY&am…...

【Git】版本控制工具——Git介绍及使用
目录 版本控制版本控制系统的主要目标分类小结 分布式版本控制系统——GitGit特点Git与SVN的区别Git的工作机制 Git安装Git 团队协作机制团队内协作跨团队协作远程仓库远程仓库的作用有以下几个方面远程仓库操作流程/团队协作流程 Git分支什么是分支分支的好处 Git的常用命令Gi…...

面试八股之JVM篇3.6——垃圾回收——强引用、弱引用、虚引用、软引用
🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 🏃人生之义,在于追求,不在成败,勤通…...
博客摘录「 Sql Server 收缩日志文件原理及always on 下的实践」2024年5月22日
四、Always on 环境下实践 先对数据库进行完整备份: EXEC sp_configure show advanced options, 1; RECONFIGURE; EXEC sp_configure xp_cmdshell, 1; RECONFIGURE; DECLARE DbName NVARCHAR(1000); DECLARE myCursor CURSOR LOCAL STATIC FOR S…...
每日一题(5)——StringBuffer操作
编写程序,对StringBuffer对象进行追加,插入和修改缓冲区长度等操作; class StringDemo{public static void main(String[] args){boolean btrue;int i321;long l123456;String s1new String("Hello,world!");StringBuffer s2new S…...

默认路由实现两个网段互通实验
默认路由实现两个网段互通实验 **默认路由:**是一种特殊的静态路由,当路由表中与数据包目的地址没有匹配的表项时,数据包将根据默认路由条目进行转发。默认路由在某些时候是非常有效的,例如在末梢网络中,默认路由可以…...

ComfyUI完全入门:图生图局部重绘
大家好,我是每天分享AI应用的萤火君! 这篇文章的主题和美女有关,不过并不是教大家生产美女视频,而是讲解 ComfyUI 的图生图局部重绘,其中将会以美女图片为例,来展示局部重绘的强大威力。 先看看效果&…...
基于UDP的网络多人聊天室
UDP服务器 #include <myheader.h>//宏定义打印错误信息 #define PRINT_ERR(msg) \do \{ \printf("%S,%D,%S\n",__FI…...
美国FDA认证是什么,食品FDA注册申请流程
美国FDA认证是什么? 美国FDA认证,全称为美国食品药品监督管理局(Food and Drug Administration)的认证,是美国政府为了确保食品、药品、医疗器械等产品的安全性和有效性所设立的重要制度。FDA认证的种类繁多&#x…...
golang的context和chan 的使用
1. context 作用 context包的context的接口,主要是控制协程执行上下文的时间,以及取消程序的执行,以及上下文中传递数据等作用,golang中耗时或者需要协同的操作都会见到context的身影。 context有几个常用的方法 1.1 context.B…...

洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)
洛谷 P 3574 [ P O I 2014 ] F A R − F a r m C r a f t (树形 d p ) \Huge{洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)} 洛谷P3574[POI2014]FAR−FarmCraft(树形dp) 文章目录 题意题目说明 思路标程 题目…...

vue/core源码中ref源码的js化
起源: 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后,突发奇想想看下转化成js有多少行。 进行转化: let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…...
准备打ccf
准备打ccf...

k8s遇到的错误记录
时隔四年有开始重新鼓捣k8s了,重新安装后遇到的错误记录如下: Error: Package: kubelet-1.14.0-0.x86_64 (kubernetes) Requires: kubernetes-cni 0.7.5 Available: kubernetes-cni-0.3.0.1-0.07a8a2.x86_64 (kubernetes) …...

全局平均池化笔记
全局平均池化(Global Average Pooling, GAP)是一种用于卷积神经网络(CNN)中的池化操作,其主要作用和优点包括: 减少参数数量:全局平均池化层将每个特征图通过取其所有元素的平均值,压…...
【数仓系列】maxcompute、postgresql、sparksql等行转列数据处理实战总结(其他类型持续总结更新)
1.熟悉、梳理、总结项目研发实战中的SQL开发日常使用中的问题、经验总结,都是常用的开发技能,可以省去很多时间,时间长就忘记了 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.maxcompu…...

用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见
在充满挑战的2024,企业如何以最小化的资源投入和试错成本,挖掘新的增长机会,实现确定性发展? “简单点”是当前商业环境的应对策略,也是奇点云2024 StartDT Day的核心理念。 5月28日,由奇点云主办的2024 S…...

Cloneable接口和深拷贝
在java中如何对对象进行拷贝呢?我们可以使用Object类中的clone方法。 一、浅拷贝 在使用clone方法对对象进行拷贝的时候,需要注意: 1.需要重写clone方法; 2.clone方法的返回值是Object类,需要强制类型转化…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...