向量检索新选择:FastGPT + OceanBase,快速构建RAG

随着人工智能的快速发展,RAG(Retrieval-Augmented Generation,检索增强生成)技术日益受到关注。向量数据库作为 RAG 系统的核心基础设施,堪称 RAG 的“记忆中枢”,其性能直接关系到大模型生成内容的精准度与实用价值。

FastGPT 作为开源 AI Agent 开发框架,集成了即开即用的数据处理和模型调用能力,用户可通过 Flow 可视化界面灵活配置工作流,轻松实现复杂场景的快速部署。

然而,随着应用规模的不断扩大、数据量的持续增长,以及更高维度的向量模型(如上千维的 Embedding)和更复杂的检索逻辑(如先按类别筛选再找相似内容)的出现,传统数据库在向量处理方面的局限性逐渐显现。

为了满足日益增长的高性能、高扩展性和高易用性需求,FastGPT 宣布正式上线 OceanBase!

OceanBase 作为一款高性能的分布式数据库,在向量功能方面展现出了显著优势,是 FastGPT 向量 Embedding 存储的更优选择。

向量数据处理之困:传统数据库在 RAG 中的瓶颈

在向量数据这种 “新物种” 面前,FastGPT 原本使用的某传统数据库在实际应用中暴露出三大核心问题,具体表现如下:

图片

1、向量维度限制:“高维模型放不下”

当训练完成的高性能 Embedding 模型维度达到 2048 维或更高时,传统数据库的 HNSW 索引仅支持最高 2000 维的全精度存储。开发者若想使用高维模型,要么进行降维处理,而这将导致模型精度损失;要么面临无法存储的困境,限制模型优化空间。

2、混合检索的 “坑”:“我想精准找,怎么这么难?”

在实际业务场景中,RAG 系统需要在特定条件下进行向量检索。比如,仅在“技术文档” 类别中查找与“数据库优化” 相关的内容,这种 “先过滤、再搜索” 的需求,就是混合检索。

然而,某传统数据库的 HNSW 索引缺乏原生混合过滤能力,需要先通过 HNSW 召回大量向量,再于应用层或数据库层面进行二次过滤。这种处理方式不仅效率不佳,在数据删改频繁的情况下,旧数据 (死元组) 可能干扰 HNSW 的召回过程,导致过滤后关键数据丢失。

即便引入递归搜索进行优化,在实际测试中,仍存在查询性能下降、索引失效的情况,增加 SQL 编写复杂度,整体使用体验不佳。

3、VACUUM 的 “痛”:“空间回收跟不上”

某传统数据库依赖 VACUUM 机制回收数据删除或更新后产生的空余资源,适用于文本、数字等数据。但向量数据体量较大,单个向量可达到数 KB 以上。在大规模数据删改更新的场景下,某传统数据库的 VACUUM 处理效率跟不上数据更新的速度,导致数据库文件持续膨胀。开发者需要手动、频繁地执行 VACUUM FULL 操作,该过程会造成锁表,或者被迫给 Autovacuum 分配更多的系统资源,显著增加运维成本。

 OceanBase 为 RAG 定制向量存储方案

面对上述挑战,OceanBase 凭借其分布式架构与创新技术,为 RAG 应用的向量数据库提供了更具竞争力的向量存储方案,在 FastGPT 项目升级中展现出显著优势:

图片

1、轻松驾驭 4096 维,还能更高!

OceanBase 的向量索引默认支持高达 4096 维的向量存储,且该维度的上限可以通过配置灵活扩展,最高支持 16000 维的 Float 类型的稠密向量。开发者可以放心地选用更高维度的模型来追求更好的效果,不用因为数据库限制而牺牲模型精度。

2、原生混合检索:精准、高效,一步到位!

OceanBase 的向量索引原生支持混合检索,可以直接在查询时就告诉它:“嘿,帮我在 ‘这个分类’ 并且 ‘那个标签’ 下,找和 ‘这个描述’ 最相似的向量”。OceanBase 可以在索引层面一边进行精确的标量过滤,一边进行高效的向量相似度搜索。这种优势显而易见:

👉 精准: 先框定范围再搜索,提高查询效率,避免数据丢失。

👉 高效: 索引层直接搜索,避免应用层二次过滤的开销,提升查询速度,避免索引失效,降低 SQL 开发难度。

3、空间回收更 “智能”:自动管理,省心省力!

OceanBase 基于与某传统数据库不同的 LSM-Tree 架构,拥有更完善、更自动化的空间回收机制,能高效处理向量数据的增删改操作,对于向量这种体积大、更新频繁的数据类型更加友好。

简单来说,开发者无需再为 VACUUM 维护投入大量精力,OceanBase 会在后台更平稳、高效地处理空间回收,减少了数据库膨胀的烦恼,也大大减轻了运维负担,让开发者能更专注于业务逻辑。

OceanBase 还有一些加分项:

单表多列索引支持:OceanBase 支持在单表中对多个不同的向量列 (比如标题向量、内容向量) 建立索引,满足复杂业务场景需求。

分布式弹性扩展: OceanBase 作为原生分布式数据库,在高并发、大数据量的场景下具备水平扩展能力与高可用性。虽然 FastGPT 暂时规模不大,但 OceanBase 可适应业务规模动态增长。

国产适配能力: OceanBase 可为有国产适配需求的项目提供专业可靠的技术支撑。

综上所述,选择 OceanBase 作为 RAG 应用的向量数据库,能让开发者拥抱更高维模型、实现精准高效混合检索、摆脱繁琐的 VACUUM 维护,显著提升 RAG 应用的性能、功能和易用性。

 实战部署:基于 OceanBase 快速构建 FastGPT

准备工作:

📜 注册并获取 Sealos Cloud 账号权限。

📜 熟悉 OceanBase 的基本部署概念,确认目标 OceanBase Docker 镜像版本。官方文档地址:

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013494 

步骤一:在 Sealos Cloud 控制台创建应用

登录 Sealos Cloud (sealos.run),进入 Sealos Cloud 控制台后,导航至 “应用管理” 或 “应用启动台” 功能模块,点击 “新建应用” 或 “创建无状态服务” 按钮,开始配置新的应用部署。

步骤二:配置应用基本信息与网络

参考如图所示界面,进行如下配置:

图片

🔎 容器镜像 (Image Name):输入 OceanBase 数据库 Docker 镜像名称。请确保镜像是官方或可靠来源提供的,并注明版本(例如 oceanbase/oceanbase-ce)。

🔎 应用名称 (App Name):为 OceanBase 部署设置一个易于识别的名称。

🔎 计算资源 (CPU/内存):根据 OceanBase 的资源需求和使用场景,配置合适的 CPU 和内存资源。

🔎 网络配置 (Network Configuration):开启 TCP 协议端口暴露。点击 “添加端口”,容器端口 (Container Port) 设置为 OceanBase 数据库默认监听的服务端口,通常是 2881。设置对应的服务端口 (Service Port) 并选择适当的 暴露方式 (Exposure Method)(例如选择公网暴露,以便外部客户端连接到您的数据库)。

步骤三:配置环境变量

在 “高级设置” 或 “环境变量” 区域,根据 OceanBase Docker 镜像的官方文档,添加启动和配置 OceanBase 实例所需的环境变量。例如:

💡 OB_SERVER_IP: OceanBase 节点的服务 IP 地址。

💡 OB_TENANT_NAME: 要创建或连接的租户名称。

💡 OB_TENANT_PASSWORD: 租户的密码。

💡 OB_SYS_PASSWORD: SYS 租户的密码(用于管理)。

步骤四:配置持久化存储

🔑 数据库的数据、日志等核心文件需要持久化存储,以防止容器重启或删除导致数据丢失。

🔑 在 “本地存储” 或 “持久化存储” 区域,参考下图所示的挂载配置,为 OceanBase 容器挂载持久化存储卷。

🔑 点击 “添加存储卷”,选择或创建一个存储卷,并将其挂载到 OceanBase 容器内部存放数据、日志和配置文件的关键路径。请务必查阅 OceanBase 镜像的官方文档,确认需要挂载哪些具体的路径。

图片

步骤五:仔细检查所有配置项

包括镜像名、资源、端口、环境变量和存储挂载路径,确保信息准确无误。

🔧 点击页面底部的 “部署” 或 “启动” 按钮。

🔧 Sealos 将开始拉取 OceanBase 镜像,并根据配置创建并启动容器。数据库启动和初始化过程可能需要一些时间。

步骤六:验证部署并连接数据库

🔔 部署成功后,在 Sealos 控制台的应用详情页面查看 OceanBase 应用实例的状态。

🔔 查看日志输出,确认 OceanBase 数据库已成功启动并完成初始化。

🔔 获取 Sealos 分配的对外访问地址(URL)和端口。

🔔 使用 OceanBase 客户端工具(如 ODC - OceanBase Developer Center 或命令行客户端 obclient)连接到该地址和端口,并使用在环境变量中设置的用户名和密码来访问和管理 OceanBase 数据库。

图片

将 FastGPT 连接到此 OceanBase 实例

按照上述步骤成功部署并验证了 OceanBase 数据库后,接下来可以在 Sealos Cloud 上部署 FastGPT 应用,并将其配置为使用此 OceanBase 实例作为数据存储。

重要参考文档:

📕 FastGPT 官方文档: 

https://doc.fastgpt.cn/docs/

📕 FastGPT GitHub Docker 示例 (OceanBase):

https://github.com/labring/FastGPT/tree/main/deploy/docker/docker-compose-oceanbase

技术融合:OceanBase 与 FastGPT 共探 AI 时代

OceanBase 与 FastGPT 的深度融合,标志着 RAG 应用在向量存储领域进入全新发展阶段。通过 OceanBase 的技术赋能,开发者可以突破传统架构限制,实现更高维度的模型应用、更精准高效的检索能力,以及更智能的运维管理。

这种技术创新不仅为 AI 应用开发者提供了更优的解决方案,也为金融、政务、医疗等行业的智能化升级注入新动能。未来,双方将持续深化技术合作,共同探索向量数据库在更多复杂场景下的创新应用,推动 RAG 技术生态的繁荣发展。

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

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

相关文章

dify对接飞书云文档,并且将图片传入飞书文档

前面讲了如何让dify展示图片,但是如果想让智能体回答的带图片的内容生成个文档该怎么弄呢?今天来实践一下。 dify工具带的有飞书云文档,正好,咱们就利用飞书云文档。 1、首先配置飞书云文档的key跟secret 注意要开头左侧的权限&a…

Linux系统之设置开机启动运行桌面环境

Linux 开机运行级别介绍与 Ubuntu 桌面环境配置指南 一、Linux 开机运行级别(Runlevel) 在传统的 Linux 系统(如 SysV init 初始化系统)中,运行级别定义了系统启动时加载的服务和资源。常见的运行级别如下: 运行级别模式用途0Halt(停机模式)关闭系统1Single User Mode…

Spring Cloud Gateway配置双向SSL认证(完整指南)

本文将详细介绍如何为Spring Cloud Gateway配置双向SSL认证,包括证书生成、配置和使用。 目录结构 /my-gateway-project ├── /certs │ ├── ca.crt # 根证书 │ ├── ca.key # 根私钥 │ ├── gateway.crt # 网关证书 │ ├── …

【虚幻5蓝图Editor Utility Widget:创建高效模型材质自动匹配和资产管理工具,从3DMax到Unreal和Unity引擎_系列第二篇】

虚幻5蓝图Editor Utility Widget 一、基础框架搭建背景:1. 创建Editor Utility Widget2.根控件选择窗口3.界面功能定位与阶段4.查看继承树5.目标效果 二、模块化设计流程1.材质替换核心流程:2.完整代码如下 三、可视化界面UI布局1. 添加标题栏2. 构建滚动…

LabVIEW实现DMM与开关模块扫描测量

该程序基于 LabVIEW,用于控制数字万用表(DMM)与开关模块进行测量扫描。通过合理配置触发源、测量参数等,实现对多路信号的自动化测量与数据获取,在电子测试、工业测量等领域有广泛应用。 ​ 各步骤功能详解 开关模块…

OpenAvatarChat要解决UnicodeDecodeError

错误信息如下 ailed to import handler module client/h5_rendering_client/client_handler_lam Traceback (most recent call last):File "E:\Codes\Python\aigc\OpenAvatarChat\src\demo.py", line 82, in <module>main()File "E:\Codes\Python\aigc\O…

数据库中的主键(Primary Key)

数据库中的主键&#xff08;Primary Key&#xff09; 主键是数据库表中用于唯一标识每一行记录的一个或多个列的组合&#xff0c;是关系型数据库中的重要概念。 主键的核心特性 唯一性&#xff1a;主键值必须唯一&#xff0c;不能重复非空性&#xff1a;主键列不能包含NULL值…

MySQL 9.3 正式发布!备份、用户管理与开发支持迎来革命性升级

开源数据库领域的标杆产品MySQL迎来重大更新——MySQL 9.3正式发布&#xff01;作为企业级数据库的“扛把子”&#xff0c;此次版本更新聚焦备份效率、用户管理精细化、开发支持增强三大核心领域&#xff0c;同时在高可用性和性能优化上实现突破。以下为你逐一解读新版本的亮点…

Rmarkdown输出为pdf的方法与问题解决

R 是一种在数据分析与统计计算领域广泛使用的编程语言。其关键优势之一是能够生成高质量的报告和文档&#xff0c;这些报告和文档可以使用 RMarkdown 轻松定制和更新。在本文中&#xff0c;我们将探讨使用 R 从 RMarkdown 文件生成.pdf 文件 1.生成方法 新建Rmarkdown&#xf…

毕业设计-基于机器学习入侵检测系统

选题背景与意义 随着互联网技术的飞速发展&#xff0c;网络在人们的生活、工作各个领域都发挥着至关重要的作用。但与此同时&#xff0c;网络安全问题也日益严峻&#xff0c;各类网络攻击事件频发&#xff0c;给个人、企业乃至国家都带来了巨大的经济损失和安全威胁。入侵检测…

React 实现爱心花园动画

主页&#xff1a; import React, { useEffect, useRef, useState } from react; import /assets/css/Love.less; import { Garden } from /utils/GardenClasses;// 组件属性接口 interface LoveAnimationProps {startDate?: Date; // 可选的开始日期messages?: { // 可…

从零开始了解数据采集(二十一)——电子制造行业趋势分析案例

这次分享一个偏行业性的趋势分析案例,在项目中为企业实实在在的提高了良品率。不懂什么是趋势分析的同学,可以翻看前面的文章。 在广东某电子制造厂中,管理层发现最近几个月生产良品率有所波动,但无法明确波动原因,也无法预测未来的趋势。为了优化生产过程并稳定良品率,…

在 Git 中,撤销(回退)merge 操作有多种方法

在 Git 中&#xff0c;撤销&#xff08;回退&#xff09;merge 操作有多种方法&#xff0c;具体取决于是否已提交、是否已推送&#xff0c;以及是否需要保留历史记录。以下是几种常见的撤销 merge 的方法&#xff1a; 1. 未提交 merge&#xff08;未 commit&#xff09; 如果 …

基于 Python 的实现:居民用电量数据分析与可视化

基于 Python 的实现:居民用电量数据分析与可视化 本文将介绍如何利用 Python 技术栈(包括 pymysql、pandas、matplotlib 等库)对居民用电量数据进行分析和可视化,以帮助我们更好地理解用电行为模式。 数据准备 在MySQL数据库中创建数据,,数据库表结构如下: date:记录…

Flow原理

fun main() {runBlocking {launch {flow4.collect{println("---collect-4")}println("---flow4")}}val flow4 flow<Boolean>{delay(5000)emit(false) } 我们分析下整个流程 1.flow为什么之后在collect之后才会发送数据 2.collect的调用流程 我…

设备接入与APP(应用程序)接入华为云iotDA平台的路径元素有哪些不同?

目录 壹、设备接入华为云iotDA &#x1f3e2; 形象比喻&#xff1a;设备 员工&#xff0c;IoTDA 平台 安保森严的总部大楼 一、&#x1f4cd; 平台接入地址 总部大楼地址 二、&#x1f9fe; 接入凭证 出入证 / 门禁卡 / 工牌 1. 设备密钥或证书 2. 预置接入凭证密钥&a…

JavaScript基础知识合集笔记2——数组排序、数组转换字符串、迭代方法

文章目录 排序方法reverse()sort() 转换方法join() 迭代方法some()every()forEach()filter()map() 排序方法 组有两个方法可以用来对元素重新排序&#xff1a; reverse()sort() reverse() 顾名思义&#xff0c;将数组元素方向反转。会直接改变原数组&#xff0c;请谨慎使用…

Redis 笔记(三)-Redis 基本知识及五大数据类型

一、redis 基本知识 redis 默认有 16个 数据库&#xff0c;config get databases 查看数据库数量 127.0.0.1:6379> config get databases # 查看数据库数量 1) "databases" 2) "16"默认使用的是第 0个 16 个数据库为&#xff1a;DB 0 ~ DB 15&am…

springboot项目文件上传到服务器本机,返回访问地址

文件上传到服务器本机&#xff0c;然后给出访问地址&#xff1a; 具体如下&#xff1a; 1、添加必要的工具类依赖 <!-- 文件上传工具类 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId>…

巧用 Element - UI 实现图片上传按钮的智能隐藏

引言 在前端开发中&#xff0c;使用 Element - UI 组件库来构建用户界面是非常常见的操作。其中图片上传功能更是在许多项目中频繁出现&#xff0c;比如用户头像上传、商品图片上传等场景。有时候&#xff0c;我们会有这样的需求&#xff1a;当上传图片达到一定数量后&#xf…