Chroma 向量数据入门

news2024/12/26 9:52:59

Chroma 是 AI 原生的开源矢量数据库。Chroma 使知识、事实和技能可插入 LLM,从而可以轻松构建 LLM 应用程序。Chroma 是 AI 原生的开源矢量数据库。Chroma 使知识、事实和技能可插入 LLM,从而可以轻松构建 LLM 应用程序。

🌟Chroma是一个文档检索系统,它存储了一组文档以及它们相应的嵌入向量。当接收到嵌入向量后,Chroma会根据其内部的索引结构快速查找最相关的文档。 

尝试 

import chromadb
chroma_client = chromadb.Client()
collection = chroma_client.create_collection(name="my_collection")

collection.add(
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges"
    ],
    ids=["id1", "id2"]
)
results = collection.query(
    query_texts=["This is a query document about hawaii"], 
    n_results=2 
)
print(results)

💥 输出:

{'ids': [['id1', 'id2']], 'distances': [[1.0404009819030762, 1.2430802583694458]], 'metadatas': [[None, None]], 'embeddings': None, 'documents': [['This is a document about pineapple', 'This is a document about oranges']], 'uris': None, 'data': None, 'included': ['metadatas', 'documents', 'distances']}

import chromadb
# 创建 ChromaDB 客户端实例
chroma_client = chromadb.Client()
# 获取一个集合
collection = chroma_client.get_or_create_collection(name="my_collection")
# 插入或更新文档
collection.upsert(
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges"
    ],
    ids=["id1", "id2"]
)
# 查询:
results = collection.query(
    query_texts=["This is a query document about florida"],
    n_results=2 
)
print(results)

💥输出:

  • 'ids': 返回的文档 ID 列表。['id2', 'id1'] 表示查询结果中最相关的两个文档是 id2id1

  • 'distances': 每个查询文本与其对应结果之间的距离(相似度)。数值越小表示相似度越高。[1.1462138891220093, 1.3015375137329102] 表示 id2 的相似度高于 id1

  • Chroma 将存储文本并自动处理嵌入和索引,我们也可以自定义嵌入模型。

  • 默认情况下,Chroma 使用Sentence Transformers all-MiniLM-L6-v2模型来创建嵌入。

也可以通过docker下载chroma: 

docker pull chroma/chroma
# 拉取 ChromaDB 镜像
docker run -p 8000:8000 chroma/chroma
# 运行 ChromaDB 容器

验证 ChromaDB 服务是否正在运行 

curl http://localhost:8000

 启动持久 Chroma 客户端

import chromadb
client = chromadb.PersistentClient(path="/home/ma-user/work/chroma_ku")

💯使用 PersistentClient 创建的客户端会将所有的数据(包括集合、文档、嵌入等)持久化到磁盘上。这意味着即使你关闭了应用程序并重新启动,之前添加的数据仍然会被保留。

# client是持久的客户端
collection = client.create_collection(name="my_collection")
  • path是 Chroma 将其数据库文件存储在磁盘上并在启动时加载它们的地方
  • client.reset() 重置数据库

在客户端-服务器模式下运行Chroma 

🧊Chroma 客户端连接到在单独进程中运行的 Chroma 服务器。

🧊上面我们创建了客户端,现在可以启动 Chroma 服务器:

🧊我们在浏览器输入http://localhost:8000 :

  • 会看到一个错误页面(404 Not Found),因为 ChromaDB 服务器默认不提供静态页面,而是提供 API 端点 

🌟 然后使用 Chroma HTTP 客户端连接到服务器:

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

然后就可以操作了~~

操作集合

import chromadb
path = "E:\\AI-1\\Chroma_ku"
client = chromadb.PersistentClient(path=path)
# PersistentClient 会从指定的路径加载现有的数据库文件

from sentence_transformers import SentenceTransformer

# 加载预训练的句子嵌入模型
model = SentenceTransformer('all-MiniLM-L6-v2')

# 定义嵌入函数
def emb_fn(texts):
    return model.encode(texts, convert_to_tensor=True).cpu().numpy()

collection = client.get_collection(name="my_collection", embedding_function=emb_fn)
collection.upsert(
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges"
    ],
    ids=["id1", "id2"]
)

我们可以使用 按照名称检索现有集合.get_collection,并使用 删除集合.delete_collection。还可以使用.get_or_create_collection获取集合(如果存在)或创建集合(如果不存在)。 

collection = client.get_collection(name="test") 
collection = client.get_or_create_collection(name="test") 
client.delete_collection(name="my_collection")

集合有一些实用的便捷方法:

collection.peek() # 返回集合中前十的列表
collection.count() # 返回集合中的项目数
collection.modify(name="new_name")  # 重命名

距离函数 

collection = client.create_collection(
        name="collection_name",
        metadata={"hnsw:space": "cosine"} 
    )

实例创建一个使用余弦相似度的集合,并插入一些文档:(保证chroma已经运行起来)

import chromadb
from sentence_transformers import SentenceTransformer

# 创建 HttpClient 实例
client = chromadb.HttpClient(host="localhost", port=8000)

# 加载预训练的句子嵌入模型
model = SentenceTransformer('all-MiniLM-L6-v2')

# 定义嵌入函数
def emb_fn(texts):
    return model.encode(texts, convert_to_tensor=True).cpu().numpy()

# 创建一个使用余弦相似度的集合
collection = client.create_collection(
    name="my_collection",
    metadata={"hnsw:space": "cosine"}
)

# 插入文档
collection.upsert(
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges"
    ],
    metadatas=[{"source": "internet"}, {"source": "local"}],
    ids=["id1", "id2"]
)

# 查询文档
results = collection.query(
    query_texts=["This is a query document about fruit"],
    n_results=2 
)

向集合添加数据:

collection.add(
    documents=["lorem ipsum...", "doc2", "doc3", ...],
    metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],
    ids=["id1", "id2", "id3", ...]
)
# 每个元数据项是一个字典,其中键值对表示文档的附加信息

🌟使用 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"}
)
  • 查询将按顺序返回n_results与每个 最接近的匹配项。可以提供可选的过滤词典,以便根据与每个文档关联的 进行过滤。此外,还可以提供可选的过滤词典,以便根据文档的内容进行过滤

从集合中删除数据 

删除特定 ID 且元数据中 chapter 为 "20" 的文档

collection.delete(
    ids=["id1", "id2", "id3",...],
	where={"chapter": "20"}
)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WIN2008 iis安装与ASP设置

win2008 IIS安装在 Windows Server 2008 系统中安装IIS - morgan363 - 博客园 如何在 Windows Server 2008 系统中安装 IIS 呢?且看如下分解: 1、鼠标右键 “计算机”,选择“管理”,打开“服务器管理器”。 2、在“服务器管理器”…

【永磁同步电机(PMSM)】 3. 基于Matlab 的仿真与控制

【永磁同步电机(PMSM)】 3. 基于Matlab 的仿真与控制 1. 电机的仿真与控制2. BLDC 电机与 PMSM 电机3. BLDC 的方波控制4. 磁场定向控制(FOC)5. 空间矢量调制 (SVM)6. PMSM 模型的频率响应估计 电机仿真和控制是能源生产、汽车、航…

C语言贪吃蛇小游戏演示和说明

C语言贪吃蛇小游戏演示和说明 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言。 游戏开始后,会在中间位置出现一条只有三个节点的贪吃蛇,并随机出现一个食物&am…

cpu路、核、线程、主频、缓存

路:主板插口实际插入的 CPU 个数,也可以理解为主板上支持的CPU的数量。每个CPU插槽可以插入一个物理处理器芯片。例如,一台服务器可能有2路或4路插槽,这意味着它最多可以安装2个或4个物理处理器。 核:单块 CPU 上面能…

代码随想录算法训练营第十四天|递归 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度

226.翻转二叉树 翻转一棵二叉树。 思路: 在这里需要注意的是,在递归的时候唯独中序遍历是不可用的,这是因为先对左子树进行了反转,又对自身进行了反转,对自身反转后原本的左子树变成了右子树,如果此时又轮…

npm依赖安装的时候vue版本号报错处理

以下报错显示vue版本不对,需要改成这个版本"vue": "2.6.14"对应的版本 先看一下package.json中vue版本是多少 解决: npm install vue2.6.14

【重要提示】由于找不到msvcr110.dll 无法继续执行的解决途径全面解析

在使用Windows操作系统时,您可能会遇到这样的问题:某些应用程序在启动时提示“由于找不到 msvcr110.dll,无法继续执行代码。重新安装程序可能会解决此问题。” 这种错误通常会导致应用程序无法正常运行,影响用户体验。本文将全面介…

django开发流程1

一、官方网站: Django documentation | Django documentation | Djangohttps://docs.djangoproject.com/en/5.1/ 1.安装 django : pip install django 2. django项目的配置文件 (settings.py) BASE_DIR 项目根路径 DEBUG 调试模式 INSTALLE…

如何在算家云搭建CodeFormer(照片修复)

一、CodeFormer简介 CodeFormer 是一款强大的人工智能工具,专为处理低质量、损坏或模糊的面部图像而设计,主要用于图像和视频的修复和增强。它基于深度学习技术,通过先进的生成对抗网络(GAN)和自监督学习技术&#xf…

【LeetCode热题100】模拟

这篇博客记录了模拟相关的题目&#xff0c;也就是按照题目的描述写代码&#xff0c;很锻炼代码实现能力&#xff0c;包括了替换所有的问号、Z字形变换、外观数列、数青蛙4道题。 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0 ; i <…

《数据结构与算法之美》学习笔记五之队列

前情提要&#xff1a;上一章学习了栈相关的知识&#xff0c;主要有下面的内容&#xff1a; 栈操作的时间复杂度&#xff0c;对于顺序栈&#xff0c;入栈时如果栈的空间不够涉及到数据搬移&#xff0c;此时使用摊还分析法&#xff0c;将数据搬移的耗时均摊到不需要搬移数据的入…

DeFi强势回归:新一轮DeFi牛市即将到来?

自2020年夏天的“DeFi之夏”以来&#xff0c;去中心化金融&#xff08;DeFi&#xff09;一直是加密行业的关键组成部分。“DeFi之夏”不仅将去中心化金融概念带入了实践&#xff0c;而且极大地推动了DeFi协议和应用的爆发式增长。尽管之后的市场经历了周期性的调整&#xff0c;…

【C++类的设计】题目(二):设计圆柱Column类

题目&#xff1a;设一个用于处理圆柱体的类Column&#xff0c;要求如下 (1)类中包含成员有&#xff1a;表示圆柱体底面半径的私有数据成员r&#xff0c;表示圆柱体高的私有数据成员h&#xff1b;构造对象时为私有数据成员赋值的构造函数&#xff0c;用于计算圆柱体表面积的函数…

OpenFeign使用详解

什么是OpenFeign&#xff1f; OpenFeign 是一个声明式的 HTTP 客户端&#xff0c;旨在简化微服务架构中不同服务之间的 HTTP 调用。它通过集成 Ribbon 实现了客户端负载均衡&#xff0c;并且能够与 Eureka、Consul 等服务发现组件无缝对接。使用 OpenFeign&#xff0c;开发者只…

如何使用ssm实现基于java web的防疫工作志愿者服务平台的设计与实现

TOC ssm693基于java web的防疫工作志愿者服务平台的设计与实现jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进…

Focalboard开源项目管理系统本地Windows部署与远程访问协同办公

文章目录 前言1. 使用Docker本地部署Focalboard1.1 在Windows中安装 Docker1.2 使用Docker部署Focalboard 2. 安装Cpolar内网穿透工具3. 实现公网访问Focalboard4. 固定Focalboard公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&am…

Redis 篇-深入了解在 Linux 的 Redis 网络模型结构及其流程(阻塞 IO、非阻塞 IO、IO 多路复用、异步 IO、信号驱动 IO)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 用户空间与内核空间概述 2.0 Redis 网络模型 2.1 Redis 网络模型 - 阻塞 IO 2.2 Redis 网络模型 - 非阻塞 IO 2.3 Redis 网络模型 - IO 多路复用 2.3.1 IO 多路复…

vscode【实用插件】Markdown Preview Enhanced 预览 .md 文件

安装 在 vscode 插件市场的搜索 Markdown Preview Enhanced点安装 使用 用 vscode 打开任意 .md 文件右键快捷菜单 最终效果 可打开导航目录

liunxcentos7下 跟目录空间不足docker load镜像报错空间不足

前两天在公司&#xff0c;做jenkins流水线项目&#xff0c;然后把项目放到docker容器里面运行&#xff0c;就在我把镜像打好包的时候正准备往服务器里面导入镜像的时候报错&#xff1a;如图所示 这时发现自己的根目录空间不足。 解决办法&#xff1a;重新加一块磁盘将磁盘挂载…