作者:陈铨,货拉拉大数据技术与产品部高级大数据工程师

首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 “老纪的技术唠嗑局”,会持续更新和 #数据库、#AI、#技术架构 相关的各种技术内容。欢迎感兴趣的朋友们关注!

货拉拉成立于2013年,成长于粤港澳大湾区,是从事同城跨城货运、企业版物流服务、搬家、零担、跑腿、冷运、汽车租售及车后市场服务的互联网物流商城。截至2024年,货拉拉在全球拥有1670万月活用户和168万月活司机,业务覆盖全球11个市场、400+城市,并在全球设有6个数据中心。

一、大模型应用场景的挑战

货拉拉基于自身在物流领域 AI 落地的深厚积累,已在 14+ 个业务或部门,50+ 个真实业务场景探索和落地大模型应用。在引入大模型的过程中,面临着其在垂直领域知识的缺乏、时效性不足以及数据安全隐患等挑战。为应对这些问题,采用了业界较为通用的解决方案的解决方案——检索增强生成技术(Retrieval-Augmented Generation, RAG),通过引入外部数据,让大模型的回答从原来的“闭卷”变为“开卷”。RAG 通过整合领域专有知识、私有数据以及实时数据,显著降低了答案生成的不确定性,增强了数据安全性,从而有效解决了大模型的固有问题,提升了回答的准确性和实用性。

RAG 的核心在于将强大的语言模型能力与向量数据库的能力相结合,企业在实施 RAG 方案的过程中,通常需要结合一个向量数据库。向量数据库在处理多模数据和语义检索方面具有独特的优势,具体体现在以下几个方面:

存储非结构化数据:向量数据库能够有效存储和管理多模态数据,如音频、视频、图片和文本等。这些数据通常具有规模庞大、信息密度高、处理成本高的特点。

向量化表示:通过神经网络提取数据特征,将其转换为高维空间中的坐标点。向量化表示赋予数据语义表达能力,使其适用于相似性检索。

检索非结构化数据:通过计算向量间的距离(如内积或欧氏距离),识别出最相似的向量。检索过程涉及近邻图的遍历,需要进行大量的浮点运算,以实现高效的相似性匹配。

二、向量数据库选型思考

(一)原有架构与痛点

现有的架构包含基础设施层(CPU 和 GPU 两种机型)、存储层(向量数据库、ES等)、检索层(以图索引为主,多种检索类型)、接入层与入口层。并且在国内外共有 5 个集群,单集群内存配置在 380 +GB,单表数据量最大为2000万。

痛点1:动态 schema

随着业务的快速发展,频繁的字段增删操作成为常态。目前的解决方案是通过新建表、导入现有数据并最终重建索引来实现,这一流程相对繁琐。对于某些数据量较大的表,索引重建的耗时可能长达十几个小时。此外,索引重建过程对 CPU 和内存资源消耗极大,容易引发线上业务抖动。

痛点2:混合检索

向量检索在相似语义检索和多模态数据理解方面具有显著优势,而全文检索则在精准匹配、短文本及低频词汇检索上表现优异。在企业应用中,仅依赖单一检索方式难以满足业务对检索精度的高要求。为了弥补全文检索的缺陷,引入了Elasticsearch来作为全文检索引擎,这也导致了整体架构的复杂性增加,同时提升了系统的维护难度。对于用户而言,需要在应用层实现复杂的reranking逻辑,并且得到的相似度得分难以统一,从而增加了使用成本。因此,业务希望引入一站式混合索引能力。

痛点3:运维难度大

稳定性能力弱:向量数据库本身存在不稳定性,BUG 较多;缺乏专家经验使得问题排查变得困难;监控指标有限,问题定位困难。

扩展性不足:节点的横向扩展能力较差,数据迁移依赖人工;数据分片的管理和运维过程复杂。

权限认证能力弱:现有的权限认证机制不够完善,容易引发数据泄漏和安全问题,需要自行实现权限管理,增加了开发和运维的复杂性。

社区活跃度差:虽然项目仍在维护,但更新频率较低,社区贡献和开发者参与度有限,且社区功能和生态发展缓慢,无法满足业务未来的需求。

(二)选型标准与过程

基于上述痛点,我们在2024年底重新进行了一次向量数据库选型。选型的标准主要从业务诉求和运维诉求两方面来考虑,如下图所示。

在选型过程中,将10款向量数据库列入候选集,并通过多维度的详细对比,基于业务和运维痛点进行了第一轮筛选,首先,由于我司采用多云架构,因此希望数据库可以跨云部署,排除了云商数据库。其次,基于业务对于向量维度有更高的需求,排除PostgreSQL。另外从稳定性和权限管理方面考虑,排除了Weaviate。

经过初步筛选,Milvus、Elasticsearch 和 OceanBase 成为入围的候选产品。在第二轮筛选中,重点关注稳定性和运维成本:

Milvus:实时风控场景对向量数据库的稳定性要求极高。由于 Milvus 的整体架构较为复杂,确保其稳定性需要投入更多的运维成本。此外,Zilliz 的云版本和货拉拉的线上服务是跨地区部署,存在一定的稳定性隐患,因此暂时排除 Milvus。

OceanBase:在搭建 OceanBase 社区版环境后,进行了全面的向量能力测试,并与业务部门联合对线上真实场景进行了压力测试和对比。结果表明,OceanBase 在功能和性能方面均能满足业务需求。此外,OceanBase经过各大厂多年的打磨,稳定性方已经得到验证。同时,OceanBase 社区活跃度高,定期更新向量能力和性能,并提供技术支持。

Elasticsearch:Elasticsearch 在全文检索和混合检索能力上表现比较优秀,但基于公司内部团队的实际情况,最终在 Elasticsearch 和 OceanBase 之间选择了后者。

在完成选型后,面临的关键决策是选择自建还是上云。首先对这两种方案进行了详细对比,其次考虑到公司内部大量DB 都存在上云趋势,上云后能够实现很好的弹性扩缩容,同时有更可靠的SLA保障 ,且现阶段我们更关注的是业务接入,在运维上不希望投入过多的人力,最终选择在云上构建向量数据库底座。

三、向量数据库落地场景

(一)资损代码识别

资损代码识别是 OceanBase 向量检索在货拉拉的重要应用场景。由于研发质量问题或代码中的潜在漏洞,可能导致公司面临严重的财务损失。过去主要依靠人工审核来识别资损代码,效率低下且难以全面覆盖线上服务,导致资损风险无法完全规避。为解决这一问题,结合大模型能力与 OceanBase 向量检索,开发了自动化代码风险识别系统。该系统通过向量化历史案例数据并检索相似代码,利用大模型进行分析和判断资损风险,从而提高代码审查的效率和准确性,控制开发过程中的风险。

具体流程如下:首先,基于历史真实发生的资损代码场景和案例数据,通过大模型进行分类打标处理,得到数据集并经人工二次确认后,将数据灌入向量数据库。在开发者提交代码构建时,触发代码检测流程,将用户提交的代码与向量数据库中保存的资损代码进行向量相似度检索,将检索结果及相关数据提供给大模型进行资损风险判断。若判断代码存在风险,则熔断代码构建流程,防止其发布到线上平台。这一项目的实施,提高了资损代码识别的效率和准确性,为公司有效的规避潜在的资损风险。

(二)数仓 AI 答疑助手

数仓 AI 答疑项目是 OceanBase 向量检索在货拉拉的另一个重要落地场景,同时也是一个非常典型的应用场景。货拉拉的大数据数仓体量庞大,拥有几十万张Hive表,每天都有大量用户需要查询数据。然而,用户通常缺乏足够的业务背景知识,难以快速找到所需数据,只能通过数仓开发人员的帮助,这给数仓开发同学带来了巨大的工作负担。为了解决这一问题,我们将向量检索的能力应用于数仓 AI 答疑助手,提高数据查询效率,减轻了数仓开发人员的工作压力。

具体流程如下:首先,将库表的 Schema 信息、聊天答疑记录以及内部维护的文档进行处理,例如将库表信息处理成字段映射关系、将聊天答疑记录转化为 QA对形式等。然后,通过 Embedding 模型将这些数据转化为向量并存储到 OceanBase 向量数据库中。当用户提问时,系统首先进行意图识别,判断用户是找数场景、问口径场景还是普通知识答疑场景。接着,对用户的问题进行理解,将其复杂问题拆分成多个子问题,并进行实体识别,必要时采用多轮对话方式确定用户意图。之后进行知识召回,由于该场景对查询精度要求高,因此采用了多种检索方案,如向量检索、标量检索以及全文关键字检索。将召回的知识数据提供给重排序模型进行重排,将最相关答案提供给大模型进行总结生成,最终为用户提供准确的数据查询结果。这一项目的实施,降低用户找数门槛,减轻隐性的沟通负担,显著提高了数仓数据查询效率,降低了人力成本,提升了用户体验。

四、未来规划

随着 OceanBase 在货拉拉线上业务的稳定运行,未来将有更深入、更丰富的应用规划。

业务迁移:这一过程涉及支持一站式融合检索能力,业务改造适配,数据迁移等。

性能成本:随着用户数量的增加,性能和成本成为关注的焦点,将考虑引入标量量化索引 HNSW_SQ 或磁盘索引 IVF 等技术,同时支持表级别的 TTL 和冷热数据分层能力。

内部系统集成:将 OceanBase 集成到内部系统中,如大数据平台、监控告警系统和 DMS 数据库管理系统,以提供更丝滑的用户体验。

更多场景探索:正在在探索更多 OceanBase 的应用场景,如 OLAP、OBKV 等,希望解决在线存储的痛点。

老纪的技术唠嗑局 不仅希望能持续给大家带来有价值的技术分享,也希望能和大家一起为开源社区贡献力量。如果你对 OceanBase 开源社区认可,点亮一颗小星星 吧!你的每一个Star,都是我们努力的动力~

https://github.com/oceanbase/oceanbase

OceanBase向量检索在货拉拉的探索和实践的更多相关文章

  1. 3D还原货拉拉女孩身亡真相,这一环值得反思!

    货拉拉女孩跳车身亡的消息,让人惋惜又震惊.司机多次偏离原始路线,女孩最终选择跳车,结果不幸身亡. 货拉拉女孩跳车真相被3D还原 有人质疑平台监管不力,造成如此惨剧,有人吐槽企业压榨员工,司机绕路是不得 ...

  2. [python] 向量检索库Faiss使用指北

    Faiss是一个由facebook开发以用于高效相似性搜索和密集向量聚类的库.它能够在任意大小的向量集中进行搜索.它还包含用于评估和参数调整的支持代码.Faiss是用C++编写的,带有Python的完 ...

  3. 从C10K到C10M高性能网络的探索与实践

    在高性能网络的场景下,C10K是一个具有里程碑意义的场景,15年前它给互联网领域带来了非常大的挑战.发展至今,我们已经进入C10M的场景进行网络性能优化. 这期间有怎样的发展和趋势?环绕着各类指标分别 ...

  4. NSIS:应用软件自动升级功能的探索与实践

    原文 NSIS:应用软件自动升级功能的探索与实践 记得以前轻狂曾分享过使用第三方软件实现应用软件自动升级功能 (详细http://www.flighty.cn/html/soft/20110106_1 ...

  5. FFM及DeepFFM模型在推荐系统的探索及实践

    12月20日至23日,全球人工智能与机器学习技术大会 AiCon 2018 在北京国际会议中心盛大举行,新浪微博AI Lab 的资深算法专家 张俊林@张俊林say 主持了大会的 搜索推荐与算法专题,并 ...

  6. FPGA加速:面向数据中心和云服务的探索和实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由columneditor 发表于云+社区专栏 作者介绍:章恒--腾讯云FPGA专家,目前在腾讯架构平台部负责FPGA云的研发工作,探索 ...

  7. zz深度学习在美团配送 ETA 预估中的探索与实践

    深度学习在美团配送 ETA 预估中的探索与实践 比前一版本有改进:   基泽 周越 显杰 阅读数:32952019 年 4 月 20 日   1. 背景 ETA(Estimated Time of A ...

  8. 深度学习在高德ETA应用的探索与实践

    1.导读 驾车导航是数字地图的核心用户场景,用户在进行导航规划时,高德地图会提供给用户3条路线选择,由用户根据自身情况来决定按照哪条路线行驶. 同时各路线的ETA(estimated time of ...

  9. 国产开源数据库:腾讯云TBase在分布式HTAP领域的探索与实践

    ​导语 | TBase 是腾讯TEG数据平台团队在开源 PostgreSQL 的基础上研发的企业级分布式 HTAP 数据库系统,可在同一数据库集群中同时为客户提供强一致高并发的分布式在线事务能力以及高 ...

  10. 网络Devops探索与实践 流程管理分析师

    https://mp.weixin.qq.com/s/OKLiDi78uB8ZkPG2kUVxvA 网络Devops探索与实践 王镇 鹅厂网事 2020-09-23  9月16日举办的2020 ODC ...

随机推荐

  1. 3.14 + 1e10 - 1e10 = 0 ? ——浮点数的本质

    3.14 + 1e10 - 1e10 = 0 ? --浮点数的本质 我们先看这样一个例子: #include <iostream> int main(int argc, char **ar ...

  2. vue实现不同用户权限的方法

    Vue 实现不同用户权限的方法 在项目中,实现不同用户的权限控制是常见的需求也是常见的功能模块,例如管理系统中不同角色(管理员.普通用户等)应有不同的访问权限,小程序.App等在不同角色登入的时候显示 ...

  3. 【CF比赛记录】Codeforces Round 1013 (Div. 3)

    比赛链接 本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验. 跳转链接:https://www.cnblogs.com/TianTianChaoFan ...

  4. 【Ubuntu】安装Eclipse

    [Ubuntu]安装Eclipse 零.前言 Eclipse是一个使用很广泛的代码编辑软件,最近换了Ubuntu系统,需要安装一下,故记录. 壹.下载 Eclipse到官网下载,或者到镜像源下载,官网 ...

  5. 移动应用APP购物车(店铺系列二)

    今天还是说移动app开发,店铺系列文章,我们经常去超市使用购物车,即一个临时的储物空间,用完清空回收.我大兄弟说, 平时很忙,录入订单的目录很多,临时有事回来要可以继续填写,提交订单后才算结束,这就是 ...

  6. study Rust-8【使用结构体的方法】

    1.方法 与函数类似:它们使用 fn 关键字和名称声明,可以拥有参数和返回值,同时包含在某处调用该方法时会执行的代码.2.不过方法与函数是不同的,因为它们在结构体的上下文中被定义(或者是枚举或 tra ...

  7. dijkstra的封装模版

    /** - swj - * />_____フ | _ _| /`ミ _x ノ / | / ヽ ? / ̄| | | | | ( ̄ヽ__ヽ_)_) \二つ **/ #include <bits ...

  8. 使用Python可视化偶极子的电场

    引言 在电学中,偶极子是一个非常重要且有趣的概念.它由两个电荷(一个正电荷和一个负电荷)组成,并且这两个电荷具有相同的大小和相反的符号.偶极子的电场分布具有独特的特点,能够帮助我们深入理解电场的性质. ...

  9. Laravel配置Route调用artisan

    //web调用artisan Route::get('/artisan', function(\Illuminate\Http\Request $request) { $all = \Illumina ...

  10. 《Deep Learning Inference on Embedded Devices: Fixed-Point vs Posit》(一)

    After the success of performing deep learning inference by using an 8-bit precision representation o ...