AI面试相关之后端、LLM与向量库(JAVA)

段段之前的帖子,讲了RAG与Doris,这次我将结合后端与大模型、向量数据库里一些比较常见的知识讲一讲,为大家的全局概念做一个补充。

讲之前先叠个甲:

1.段段是做的AIGC项目,但是很多东西接触不到,而且很多东西用不了,比较老旧和粗暴

2.AI相关的,我最近在面试,也在学习,也在结合项目思考

3.本文是自己思考和学习的结果,欢迎大家讨论,有问题请合理发言

如果你、我因为不懂AI而丢人,那就对了,因为我就是这么一步步过来的。

一、架构视角——后端与大模型到底什么关系

千万不要神话大模型,在后端眼里,大模型不是什么无所不能的神仙,它本质上是一个耗时很长,极其昂贵,很容易返回乱码的API。本质上,后端并不懂LLM内部的东西,顶多能了解,因为那是算法工程师干的活,LLM就是个黑盒API,我们的任务就是调用它,并且让他合理返回。

1.后端是喂饭的:你问大模型:小队长什么订单?LLM:小队长是谁,不认识好吧。所以我们后端的任务就是,去数据库查出小队长的订单,去redis里面查历史聊天记录,甚至去ES和向量库里查相关的说明,然后整合这些信息,拼成prompt,喂到大模型嘴里。

2.后端是善后的:大模型的返回,千奇百怪,什么格式不对,乱码,语序不对。后端要拿到这段返回,然后去做后置校验,Jackson校验。如果解析失败,还要@Retrable正则校验,甚至触发降级话术(小助手开小差了,等会再来吧!),没有这些流程,前端早就崩溃了。

3.后端是跑腿的:大模型只是个文字处理器,他不能帮你发邮件、退款、开发票。你需要通过大模型的指令后,去调用退款、邮件。发票等流程。

4.后端是兜底的:那我问个问题,是不是谁都能调用大模型?谁都能来花token?高并发场景怎么办?所以后端要做权限校验,要做高并发,要做限流,要做本地缓存,保证简单问题不调用大模型。

二、向量数据库

1、为什么要用向量数据库?

传统的关系数据库或者es库,靠的是倒排索引和关键词精确匹配,如果你去搜苹果手机,他绝对搜不到iphone15,你去搜山海经手机,他指定不知道是华为,你去搜华为od他知道是啥,但是搜牛客od他就不知道了。但是向量数据库能让计算机理解什么叫语义相似度,它是赋予大模型长期记忆和合外部知识库唯一可行的存储方案。

2、向量数据库怎么工作?

本质上就是把文字变成数字,但是有对应关系,只是这个关系计算很复杂,所以引入了Embedding 模型,我们调用一个Embedding模型,他会把一句话,转为成百上千的浮点数组成的数据(这就是向量,下一节展开说),本质上就是计算数字距离的流水线

3、相似度计算:

当用户提问时,也就是把问题变成一个坐标点,然后去数据库计算这个点和库里所有点的距离,目前最常用的事余弦相似度。

余弦相似度:cosine,最常用,两个向量夹角,越接近1越相似

欧氏距离:算两点之间绝对直线距离,越小越相似

内积:综合了夹角和长度

4、近似最近邻搜索(ANN索引):如果数据太多,一条条暴力距离太慢了,所以向量库底层会用HNSW(分层导航小世界)或者IVF(倒排文件),等算法建立索引。

5、向量数据库:重量级:Milvus,pinecone,qdrant,轻量级:chroma,传统转型:pgvector、es、redis都已经支持向量检索

段段用的:doris,自2.x版本之后,引入了vector和hnsw等向量倒排索引,它不仅能处理百亿级关系数据库统计,还能计算向量余弦相似度

三、Embedding与向量库

先引入案例,比如将“小队长风韵犹存”转为向量数据库的向量,结果是

然后将“小队长徐娘半老”转为向量数据库的向量,结果是

最后查看cosin余弦相似度≈0.92(92%),强相关

通过这个案例,我想讲清楚一点,为什么向量库能做到传统关系型数据库做不到的事情——向量化和余弦值匹配

向量库核心参数:

1、Deimension(维度):重中之重,最关键的是,他必须和Embedding完全一致,Embedding是768,维度必须是768,才能入库,而且如果后续要改维度,那么整个向量库必须推倒重建,所以这块的选择一定要谨慎。

2、Metric Type(距离度量):上个大点说的cosine余弦值,L2或者IP,余弦值是最常用的,一定要记住

3、Top-K:就是你要几条数据,把最相似的N条给我,一般3-5

4、Metadata(元数据/Payload):这点非常重要,你光存向量是没有用的,必须还得存储对应的时间、用户等标签

四、向量库增删改查

1、关于增删改查:

增:这个简单,数据向量化之后将id+向量入库

查:先调用Embedding将查询参数向量化,然后去查询,注意这里是混合查询,先查询出这个人的数据,再计算相似度。

改:重新调用Embedding生成新向量,根据ID进行覆盖

删:和传统数据库一样,进行覆盖删除

2、性能消耗

看到这里有些同学有疑问了,这个改和删是不是太消耗性能了?没错!以前确实是这种方式,但是现在已经优化了。

曾经的向量库,你去修改或者删除,改变节点,相当于在地图路径上把途经点抠了,这导致查询速度断崖式下跌,现在的神经网络,执行的是软删除,将要删除的id对应的bit标记为1(软删除),查询的时候,如果是1,那就跳过。

3、墓碑机制与异步后台

update操作:在底层,update = delete + insert,也就是扔一个墓碑标记到旧数据上,进行软删除,然后将新向量追加到内存里,因为都是顺序操作,所以I/O非常快,根本不需要现场改底层图索引。

异步后台:但是都是软删除和新增,垃圾数据是不是越来越多?这些数据怎么解决?向量库会自己开几个线程,做数据合并,他会在业务低峰期,偷偷的把墓碑数据清除掉,重新生成HNSW图像,然后替换掉旧的,无缝衔接,业务零感知。

补充Doris场景:因为段段用的是Doris,Doris底层是有Unique key和Merge on write底层合并机制,Doris会在引擎层自动处理好新旧版本生效问题,而且他的向量索引是依附在列上的,自动跟着标量数据保持一致性,这对我们Java开发太有好了,像写sql一样顺滑,这段内容,重点记忆墓碑机制、Doris写时合并。

以上就是本期的全部内容了,写稿不易,学习更难,欢迎大家一起讨论。AI

#AI求职实录#
全部评论
Metadata才是灵魂嘿嘿
1 回复 分享
发布于 03-11 14:35 湖南
小队长风韵犹存
1 回复 分享
发布于 03-11 14:07 北京
段哥这是要往南方走了吗
点赞 回复 分享
发布于 03-11 14:34 江苏
高并发不兜底?Token烧穿老板钱包
点赞 回复 分享
发布于 03-11 14:34 广东
直接整个库重来吗…
点赞 回复 分享
发布于 03-11 14:34 北京
这模型竟然不认识小队长,该打
点赞 回复 分享
发布于 03-11 14:32 浙江
LLM不是神,是昂贵API啊
点赞 回复 分享
发布于 03-11 14:31 安徽

相关推荐

04-16 15:44
厦门大学 Java
一、面试官问题清单(共24题)(一)AI相关问题(6题)1. 若AI回答出现错误/幻觉,有哪些优化方案?2. 常规AI Agent的核心组成模块/能力模块有哪些?3. AI Agent的记忆机制分为哪几类?4. 长期记忆和短期记忆分别有哪些?5. RAG属于长期记忆还是短期记忆?6. 是否了解React框架?(二)Java相关问题(7题)1. JDK 1.8中ConcurrentHashMap的底层实现原理?2. JVM运行时数据区域的组成部分?3. OOM(内存溢出)的排查思路?4. Java中sleep和wait方法的区别?5. synchronized的作用和底层原理?6. Volatile的作用和底层原理?7. MySQL事务的四大特性是什么?(三)数据库&缓存相关问题(4题)1. MySQL事务四大特性的实现方式?2. MySQL索引的底层数据结构?3. B+树的结构是怎样的?4. Redis中Zset的底层实现?5. 跳表的节点晋升机制是怎样的?(四)Spring相关问题(2题)1. Spring有哪些依赖注入的方式?2. Bean的作用域有哪些?(五)计算机网络相关问题(3题)1. 计算机网络5层协议模型及每层协议(可讲OSI七层模型)?2. Cookie和Session的区别?3. HTTPS如何保证安全性?4. HTTPS四次握手的流程?(六)算法题(1题)算法题 无重复字符的最长子串 哭死了一个地方一直没调出来,最后面试官让我讲下思路就下了ps:记错时间让面试官白等我8分钟,还是hr 打电话过来提醒才知道。真心向面试官道歉😭😭
查看25道真题和解析
点赞 评论 收藏
分享
攒人品!!! 大家都要拿到暑期实习的offer啊!!!项目一:1. 你这里的意图判断是怎么做的?直接交给模型做,还是这个用户的查询query做了一些其他处理。2. 为什么要设计这三层记忆架构,是一个通用的设计还是参考了什么论文。3. Agent 的评估是怎么做的4. 有没有评估过你的记忆架构,在没参考openclaw之前和之后的指标有什么变化,成功率有对比吗?5. 你之前向量检索加redis缓存是怎么做的? redis健和值是什么?6. 新的记忆加到文件里 是直接append吗? 覆盖?还是改写?7. 改的方式 模型改吗?模型调用editor去改文件是吗?8. 你觉得 redis+milvus向量存储 和mysql+文件系统+向量检索,他们的优劣如何?优点缺点分别是什么。9. 其实我比较感兴趣的是他们这两种方式的查询检索召回 效率的对比。10. 对于每一个用户,在系统中怎么保存这些不同用户的文档?11. 其实就是模型通过路径去读这些文件是吧,那如果两个人登了同一个账号,在同一时刻,这个文件会被两个不同的用户使用,在这个情况下,你们的系统如何处理?怎么解决这个问题?项目二:1. 你说你的文档准确率达到90%,具体做的改变是什么。2. 那为什么医院的问答项目里,不采用同样的实现3. 你说pdf表格密集,那假如用户就是问一个表格里,第二行是2025年,第三行是2024年,具体问2025年的值是多少,你的系统能做到吗?4. skill是自己写的吗 ,互相之间可以联动吗?5. 为什么不用skill-creator6. 你的数据集是怎么收集的,然后是怎么评估的呢?打分是谁在打分?人在打分 ,还是模型裁判员去打分?如果有很好用的模型裁判员,为什么不用裁判员模型7. 介绍一下KV cache8. 讲一下transfromer架构。算法题1. 字符串数字相减2. 字符串最长连续序列
查看21道真题和解析
点赞 评论 收藏
分享
评论
1
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务