首页 > 数据库 >矢量数据库Chromadb的入门信息

矢量数据库Chromadb的入门信息

时间:2024-07-06 23:09:09浏览次数:20  
标签:chromadb 入门 矢量 chroma collection client embedding Chromadb name

一. 概述

 
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_functions

ollama_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极简教程(含案例)

标签:chromadb,入门,矢量,chroma,collection,client,embedding,Chromadb,name
From: https://www.cnblogs.com/netWild/p/18288045

相关文章

  • 算法入门(4) 7.6
    [NOIP2008普及组]ISBN号码题目描述每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括$9$位数字、$1$位识别码和$3$位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码......
  • 算法入门(6) 7.5
    小鱼的航程(改进版)题目背景题目描述有一只小鱼,它平日每天游泳$250$公里,周末休息(实行双休日),假设从周$x$开始算起,过了$n$天以后,小鱼一共累计游泳了多少公里呢?输入格式输入两个正整数$x,n$,表示从周$x$算起,经过$n$天。输出格式输出一个整数,表示小鱼累计游泳了多少公......
  • 零基础STM32单片机编程入门(八)定时器PWM输入实战含源码视频
    文章目录一.概要二.PWM输入框架图三.CubeMX配置一个PWM输入例程1.硬件准备2.创建工程3.调试四.CubeMX工程源代码下载五.讲解视频链接地址六.小结一.概要脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用单片机数字输出(1或0)来对外部模拟......
  • bluez 入门
    **核心模块**:位于系统的最底层,直接与蓝牙硬件进行交互。核心模块实现了蓝牙的基础协议如HCI(HostControllerInterface),并通过DBUS提供API给上层应用。**服务守护进程(bluetoothd)**:作为系统的守护进程运行,它处理所有的蓝牙服务和配置,如设备配对、连接管理、配置文件(Profiles)等*......
  • 【C语言入门】初识C语言:掌握编程的基石
    ......
  • “只讲干货!!”{java入门篇} 勇闯java的勇士们 别问我java行不行 不行也是你不行,不努力
    面向对象编程(Object    Oriented    Programing)神速熟悉面向对象        学完本节,如果还有点糊涂,很正常,本节仅是你的“初恋对象”。本节仅仅是为了方便大家入门,更快的了解面向对象。后面,才是真正开始“面向对象”,真正为了“结婚”、为了“开......
  • 栈溢出入门03 ret2syscall ROP NX绕过
    本例题会使用ROP技术来绕过堆栈不可执行保护(NX保护),随着NX保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。攻击者们也提出来相应的方法来绕过保护,目前主要的是ROP(ReturnOrientedProgramming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段......
  • 数论函数从入门到进门
    1.定义1.1基础定义数论函数:定义域为正整数的函数称为数论函数。因其在所有正整数处均有定义,故可视作数列。加性函数:若\(\foralla,b\in\mathbb{N}^{+},a\perpb,f(ab)=f(a)+f(b)\),则称\(f\)为加性函数。积性函数:若\(\foralla,b\in\mathbb{N}^{+},a\perpb,f(ab)=f(a)f......
  • 【跟我学K8S】45天入门到熟练详细学习计划
    目录一、什么是K8S核心功能架构组件使用场景二、入门到熟练的学习计划第一周:K8s基础和概念第二周:核心对象和网络第三周:进阶使用和管理 第四周:CI/CD集成和监控第五周:实战模拟和案例分析第六周:综合练习和准备面试一、什么是K8SKubernetes(常简称为K8s)是一个开源的......
  • Docker Compose 快速入门
    这是一个非规范性示例,仅突出显示了使用Compose可以执行的关键操作。第2步:在Compose文件中定义服务Compose简化了整个应用程序堆栈的控制,使您可以轻松地在单个易于理解的YAML配置文件中管理服务、网络和卷。在您的项目目录中创建一个名为的文件compose.yaml并粘贴以下......