矢量数据库Chromadb的入门信息

news/2024/10/5 16:09:09/文章来源:https://www.cnblogs.com/netWild/p/18288045

一. 概述

 
Chromadb是比较年轻的矢量数据库,也是LangChain默认使用的矢量数据库,使用简单,上手很容易。
官网地址:https://docs.trychroma.com/
Github:https://github.com/chroma-core/chroma
 

二. 安装

 
官网的指南:https://docs.trychroma.com/getting-started
 

三. 使用模式

 

  1. 内存模式
     
    该模式下,数据不会被持久化。
import chromadb
# 创建客户端
chroma_client = chromadb.Client()
# 创建集合
collection = chroma_client.create_collection(name="my_collection")
# 添加数据
collection.add(documents=["Document 1", "Document 2"],ids=["id1", "id2"]
)
# 查询数据
results = collection.query(query_texts=["Document"],n_results=2
)
print(results)

 
2. 本地模式
 
该模式下,可在指定位置创建sqlite数据库进行持久化。

import chromadb
client = chromadb.PersistentClient(path="/path/to/data")

 
3. 服务模式
 
首先启动Chroma服务:

chroma run --path /db_path

之后在程序中连接该服务:

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

 
使用服务模式时,客户端不需要安装全部的chromadb模块,只需要安装chromadb-client即可:
pip install chromadb-client
此包是用于服务模式下的轻量级HTTP客户机,具有最小的依赖占用。
 

四. 创建和管理集合

 
集合(collection)是ChromaDB中存储嵌入,文档和元数据的地方,类似于关系数据库中的表(table)。你可以用客户端对象的create_collection方法创建一个集合,指定一个名称:
collection = chroma_client.create_collection(name="my_collection")
 
还有一些其他常用的方法:

# 获取一个存在的Collection对象
collection = chroma_client.get_collection("testname")# 如果不存在就创建collection对象,一般用这个更多一点
collection = chroma_client.get_or_create_collection("testname")# 查看已有的集合
chroma_client.list_collections()# 删除集合
chroma_client.delete_collection(name="my_collection")

 

五. 矢量模型

 
Chroma默认使用的是all-MiniLM-L6-v2模型来进行embeddings。
也可以直接使用官方预训练的托管在Huggingface上的模型:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('model_name')

选择非常多,可以点击官网查看每种预训练模型的详细信息:https://www.sbert.net/docs/sentence_transformer/pretrained_models.html

 
还可以使用其他第三方模型,包括第三方平台,例如:

openai_ef = embedding_functions.OpenAIEmbeddingFunction(api_key="YOUR_API_KEY",model_name="text-embedding-ada-002"
)

 
比较吸引我的是,chromadb还支持集成Ollama中的模型进行embedding:

import chromadb.utils.embedding_functions as embedding_functionsollama_ef = embedding_functions.OllamaEmbeddingFunction(url="http://localhost:11434/api/embeddings",model_name="llama2",
)embeddings = ollama_ef(["This is my first text to embed","This is my second document"])

 
记录一个适合中文矢量化的模型:coROM中文通用文本表示模型。
这是阿里旗下的Embedding模型,基于Pytorch的,等以后尝试加载到Ollama,用起来就更方便了。
 

六. 链接

 
ChromaDB python 使用教程及记录
向量数据库Chroma极简教程(含案例)

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

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

相关文章

【Linux系列】Linux 性能调优工具的 9 张图

性能观察工具静态性能工具性能压测工具性能调优工具sarperf-tools追踪工具BPF性能工具

「杂文」算法竞赛之黑话大赏

欢迎投稿。写在前面 欢迎投稿。 罚时 一种根据选手完成题目的耗时,用于对通过题目数量相同的选手,进行排名的指标。 仅有选手成功通过的题目,才会计算罚时。 一道成功通过的题目的罚时为:选手第一次通过该题目时间,距离比赛开始时间之差,再加上未成功提交的罚时惩罚。 选…

汇编语言 5. [BX] 和 loop | 实验 4 : [BX] 和 loop 的使用

1) 2)向内存 0:200 - 0:23F (0020:0 ~ 0020:3f) 依次传递数据 0~63 , 只用9个指令 使用 bx 即用于偏移地址[bx] 也用于普通寄存器 bx assume cs:codecode segmentmov ax,0020hmov ds,ax ; ds : 0020h mov cx,64mov bx, 0s: mov [bx],bxinc bxloop s mov ax,4c00hint …

WAF 大全

WAF 大全 宝塔网站防火墙

替换背景 工具

https://modelscope.cn/studios/iic/ReplaceAnything?spm=a2c6h.13066369.question.1.57fb7d45DCg601ReplaceAnything as you want: Ultra-high quality content replacement我们发现,在严格保持某个“物体ID”不变的情况下生成新的内容有着很大的市场需求,同时也是具有挑战…

算法入门(4) 7.6

[NOIP2008 普及组] ISBN 号码 题目描述 每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 $9$ 位数字、$1$ 位识别码和 $3$ 位分隔符,其规定格式如 x-xxx-xxxxx-x,其中符号 - 就是分隔符(键盘上的减号),最后一位是识别码,例如 0-670-82162-4就是一个标准的 …

安装Nexus3和使用Nexus3搭建私有docker镜像仓库

1、官网下载Nexus3: https://help.sonatype.com/en/download.html 2、上传到服务器后解压:tar -xf nexus-3.69.0-02-java8-unix.tar.gz3、修改运行nexus配置 【1】修运行nexus所使用的用户:vim /opt/nexus3/nexus-3.69.0-02/binexus.rc #修改默认登陆用户为admin #run_as_us…

(9)逻辑综合添加约束(时序、DRC)

一、前言dc综合是一个不断迭代的过程,如果设计的RTL代码不满足时序约束的需求,则需要重新进行修改,然后再去综合,一直迭代到时序满足需求。 二、面积约束面积约束指令:set_max_area 100面积约束的定义有三种,一种指的是两输入与非门的个数,一种是晶体管的个数,第三种是…

深度解析 Raft 分布式一致性协议

深度解析 Raft 分布式一致性协议本文参考转载至:浅谈 Raft 分布式一致性协议|图解 Raft - 白泽来了 - 博客园 (cnblogs.com) 深度解析 Raft 分布式一致性协议 - 掘金 (juejin.cn) raft-zh_cn/raft-zh_cn.md at master maemual/raft-zh_cn (github.com)本篇文章将模拟一个KV数…

nacos学习笔记之服务发现中心

一.什么是服务发现 在微服务中,服务的消费方需要调用服务的生产方,这样服务的消费方就需要知道服务的消费方的网络地址(ip+端口号)。 二、流程上图中服务实例本身并不记录服务生产方的网络地址,所有服务实例内部都会包含服务发现客户端(例如spring cloud中的ribbon)。 (…

第一次学习Java的碎碎念

2024年夏新的学习开始了; 今天做了什么? 在B站上收藏了黑马程序员学习Java的教学视频,观看了几篇入门教程,暂时学会了如何打开CMD,以及几个常见的CMD命令,例如盘符名称:、dir、cd目录、cd..、cls、exit等等,做了一个练习(利用cmd打开qq),学会了如何把应用程序的路径…

测试标题

测试摘要\[a /ge b /eq c \]