​RAG与LLM原理及实践(8)--- Chroma 应用场景及限制

前言

通过前面几节的介绍,你应该对Chroma的运作原理有相当透彻的理解。Chroma的设计正如之前描述的:

Chroma提供的工具:

存储文档数据和它们的元数据:store embeddings and their metadata
嵌入:embed documents and queries
搜索: search embeddings
Chroma在设计上优先考虑:

足够简单并且提升开发者效率:simplicity and developer productivity
搜索之上再分析:analysis on top of search
追求快(性能): it also happens to be very quick

它非常适合在属于自己的垂直LLM RAG库上运行。当你的应用主要集中在LLM领域,且要求最好能本地快速部署,又需要兼顾查询效率时,Chroma 绝对是你的local LLM RAG首选。但不得不说,任何事物都有他的限制。说直白点,还是应用场景。如果你的应用或存储信息维度超过了 文本,元数据,url 这些内容,逐步向图片,甚至影音过渡时,Chroma 就显得有些力不从心。我会从代码逻辑及整体思路上给出分析。但熟悉Chroma 的朋友都知道,他有user  交互模块并不断update,毕竟Chroma vector DB 的API 接口适配了目前所有vector DB 共同遵循的接口,未来根据适用场景,包含client 模式,server模式,local 模式,同样会衍生出其他功能的版本。只是当下判断,如果你的应用聚焦在图片或是影音应用,Chroma不是很好的选择。

Chroma场景及限制

机制层

LLM处理的核心,query的语义相似度查询。你如果非常熟悉我前面的几篇文章,Chroma采用了 暴力+HNSW 结合的方式,或者你说是KNN query 也对,进行query 分析。底层采用了 consine,l2,ip 丈量distance方式。

需要指出的是 cosine 方式并不适合做picture,甚至 audio,video 的相似度处理查询处理。提到检测相似度,你可能第一反应就是 cosine 比较,这本身没有问题,但问题是被比较的事物是否可以很好的被向量化,或者说在比较事物向量化的过程中,他们是否丢失了很多信息。LLM与audio , video 的最大不同,前者在于语义相关,后者在于大量信息的存储相关。语义相关的问题,被高维向量表达后,依然能保持其语义的基本特征。虽然这种特征是面向计算机的,就像LLM中的 encoder,attention,decoder 一样。但你如果把audio,video用高维向量进行编码压缩,丢失的信息可能太多,这也是为什么LLM model 与 pictures,audio,video model 中使用的手段不同的原因。在LLM中你很少看到大量 CNN 卷积网络被使用,而在视频相关领域,为了捕获图片,视频等信息,需要多个 filter对甚至一张 picture进行轮番迭代,以求计算机能很好的把握住他的特征。比如相关的yolo 识别物体的训练,无论是v几版本,你可以看到神经网络路径都比较长,且经过多步卷积,池化等操作。所以这也就能说明为什么Chroma 可能在图像方面并不合适的原因。毕竟实现原理及思路限制了他的用途,当然你也可以反过来说,压根我Chroma 就不是为图而生的,我的目标在LLM领域。但另一个vector db, milvus 似乎支持了图片,甚至是audio,video,有时间我再写写他们。但是这里依旧是聚焦在 chroma 上。

实现层

从实现层上来说,至少目前看也是这样。实现者的重心在 LLM,并不在图片上。我们可以看到下面的源码:

这是 collection的add 实现源码:

紧接着,你看到 images 被无情的抛弃了,是我哪里不好吗?你要抛弃我,其实不是,只是在后面 add 的时候,在 collection 的 add 上,就没有image 什么事情了,继续看源码:

很清楚,image 已经没有了。Chroma在底层处理时,虽然想到了image,从给出的sqlite3的数据库字段描述来说,还是有image 的容身之地,但是毕竟可能不太完整。

但尽管如此,chroma 在 LLM 的处理上,非常优秀,而且体积很小,只有7.5k,可以说是 目前 local RAG 最漂亮的实现。你读完了他的源码,内功一定会得到增强。今天就先写到这里。

如何应对图片及video的query

万事都有折中方案,虽然Chroma对image支持目前来说,不太好,但压根儿那就不是别人的强项,主赛道还是在LLM上。如果我硬要用Chroma 可不可以支持图片呢?答案是肯定的,那你在uris 做点文章也能很好支持。

只是说,如果就图片本身而言,你要很好的支持 query,需要采用 CNN 等大型卷积神经网络来处理,有兴趣的可以看看 Yolo,现在发展到YoloV10了,但最经典的我认为还是YoloV2,有时间我也会讲下Yolo 系列的算法。今天先写到这里

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

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

相关文章

粗糙度轮廓仪功能简介:一体型轮廓仪功能亮点

在精密制造和质量控制领域,表面粗糙度和轮廓的精确测量是至关重要的。一体型轮廓仪为这一需求提供了全面的解决方案。它采用超高精度纳米衍射光学测量系统、超高直线度研磨级摩擦导轨、高性能直流伺服驱动系统、高性能计算机控制系统技术,为用户提供了一…

使用机器学习,通过文本分析,轻松实现原本复杂的情感分析

01、案例说明 本期分享案例是:文字分析-情感分析,内容是关于某部电影评论好坏的分析,使用大量的已知数据,通过监督学习的方法,可以对于未知的评论进行判断其为正面还是负面的评价。 对于数据分析,原来都是…

Go语言学习:每日一练3

Go语言学习:每日一练3 目录 Go语言学习:每日一练3方法接口继承类型断言 方法 方法是一类有接收者参数的函数。 接收者的类型定义和方法的声明必须在一个包里 type MyInt intfunc (m MyInt) Add(add int) int {return int(m) add } //OR func (m *MyInt)…

巴图制自动化Profinet协议转Modbus协议模块连接PLC和电表通信

1、免编写Modbus轮询程序实现PLC与电表通信的方法 在智能化时代,工业自动控制中的PLC和电表之间的通信是一个常见的需求。传统上,为了使PLC与电表通信,通常需要编写Modbus查询程序来读取和控制数据。然而,使用 巴图制自动化Prof…

235、二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自…

用 AI 生成绘本,含大量 prompt

画图过程,为了保证绘本输出的风格统一,角色连贯,画面内容与故事保持一致 1、画风统一的解决办法:固定一个插画师的风格,可以输入插画师的名字,或者垫图,即上传你需要借鉴风格的图片 2、角色连贯…

聚焦西安应博会|2024西安城市安全应急产业展9月精彩呈现

2024西安城市安全应急产业博览会 时间:2024年9月12日-14日 地点:西安国际会展中心 运营:西安西部文化产业博览会有限公司 【展会简介】 为推动安全应急装备向智能化、成套化、专业化方向发展,迎接新质生产力在应急产业新技术…

linux下Java11无jre文件夹的问题

项目升级需要更高级的Java版本,于是下载了jdk-11.0.22_linux-x64_bin.tar.gz,解压后jdk-11.0.22下没有jre,导致eclipse下“build path”无法加载jre。 Java11以上版本不在提供jre,Java11安装后,需要如下处理&#xff1…

ElementUI中的el-table解决宽度问题 - 根据内容自动撑开

在使用element-ui中,会发现表格组件el-table在未指定宽度情况下,会自动计算并给表格宽度赋值。但实际开发中,有时需要根据内容实际长度自动撑开显示,由内容的多少而决定表格的宽度,而不是默认宽度为100%。在默认情况下…

监控平台zabbix对接grafana

目录 1.安装grafana并启动 2.浏览器访问 3.导入zabbix数据,对接grafana 4.如何导入模板 5.使用zabbix监控nginx并发量连接数 5.1 修改nginx配置 5.2 编写监控数据脚本 5.3 设置键值 5.4 在zabbix web端完成自定义监控项 5.5 连接到grafana 以上一篇博客&l…

使用CubeIDE调试项目现stm32 no source available for “main() at 0x800337c:

使用CubeIDE调试项目现stm32 no source available for "main() at 0x800337c: 问题描述 使用CubeIDE编译工程代码和下载都没有任何问题,点击Debug调试工程时,出现stm32 no source available for "main() at 0x800337c 原因分析&a…

VirtualBox Ubuntu Sever配置双网卡

Ubuntu 版本:Ubuntu Server 2404 vitrualBox 网卡配置: 如上配置后,ifconfig 只能看到 网卡1 应用了。要应用 网卡2 需要更改文件 /etc/netplan/50-cloud-init.yaml(不同的ubuntu版本这个文件名可能不同) 首先 ifcon…

Android设备信息(DevInfo)

软件介绍 设备信息(DevInfo)一款评分非常不错的手机硬件及各种信息检测应用,安卓设备硬件检测工具。可以全面查看手机的各种信息、包括:Android系统版本的详细信息、芯片CPU处理器的详细信息、全球卫星定位、测试功能、硬件温度、…

Ansys Zemax|场曲跟畸变图的前世今生

实现 OpticStudio通过在X和Y方向(弧矢和子午方向)的傍轴光线追踪确定近轴图像平面的Z坐标,并测量该近轴焦平面与系统图像平面的Z坐标之间的距离。 切向数据是沿Z轴从图像平面到近轴图像平面在切向(YZ)平面测量的距离…

Qt Creator配置以及使用Git

Qt Creator配置以及使用Git 引言一、Qt Creator配置git二、Qt Creator使用git2.1 创建git仓库 or git项目导入Qt2.2 配置远端,拉代码 or 上传代码2.3 查看更改2.4 更多细节可参考官方文档 三、参考的博客以及文档 引言 Qt Creator配置Git之后,可以看作是…

【AIGC】DiffuToon:稳定的视频卡通化技术方案

论文:https://arxiv.org/pdf/2401.16224 github:https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/Diffutoon 网络结构 两个主要分支:主要的卡通化管线和编辑分支 重要技术 使用了fastblend(无需模型的视频帧之间的平滑…

不同操作系统下的换行符

1. 关键字2. 换行符的比较3. ASCII码4. 修改换行符 4.1. VSCode 5. 参考文档 1. 关键字 CR LF CRLF 换行符 2. 换行符的比较 英文全称英文缩写中文含义转义字符ASCII码值操作系统Carriage ReturnCR回车\r13MacIntosh(早期的Mac)LinefeedLF换行/新行\…

【C语言】指针经典例题

题1&#xff1a; #include <stdio.h>int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的结果是什么&#xff1f; 解答如下&#xff1a; 题2&#xff1a; #include <std…

Coze终于顶不住了?开始收费了

&#x1f914;各位老铁都知道&#xff0c;之前Coze以免费出圈&#xff0c;香碰碰&#xff0c;字节一个月几个亿补贴用户。现在终于顶不住了&#xff0c;开始收费了&#xff01; 我们来看看具体情况吧&#xff01; &#x1f4b8;收费情况一览 目前国内版本还没有开始收费&#x…

企业该如何选择工时管理工具?

在数字化时代&#xff0c;企业的管理效率直接关系到其市场竞争力。工时管理作为企业管理的重要一环&#xff0c;不仅关乎员工的工作效率&#xff0c;还直接影响到企业的成本控制和决策质量。那么&#xff0c;面对市场上琳琅满目的工时管理工具&#xff0c;企业应该如何做出明智…