当前位置: 首页 > news >正文

向量检索+大语言模型,免费搭建基于专属知识库的 RAG 智能助手

随着生成式人工智能技术的飞速发展,越来越多的人和企业开始应用AI到日常的工作和生活中。但公域的AI助手其数据来自互联网上的大量公开文本,虽然具有广泛的知识,但在面对一些特定领域的专业问题时,可能会出现回答不够准确或深入的情况,需要用户自行甄别和进一步研究。因此,也有很多企业开始研究基于向量检索的能力实现检索增强生成(RAG)架构的智能助手

RAG 智能助手是什么?

RAG 可以基于特定的私有数据集构建,这些数据可以是企业知识库、内部文档、数据库、行业报告等,因此,针对特定领域的问题,它可以直接从相关的专业数据中检索出准确的信息,并结合生成式模型进行优化,提供更精准、专业的回答。

下图就是 OceanBase 基于RAG搭建的AI助手的示例:

OceanBase 在近期发布的 4.3.3 GA 版本中,在关系型数据库的基础上,新增了向量检索能力,支持向量数据类型、向量索引以及基于向量索引的搜索功能。结合 OceanBase 在海量数据分布式存储方面的优势,以及对多模数据类型和多种索引方式的支持,为 RAG 应用搭建提供了更加便捷的方式。

今天,我们就一起来看看,如何用OceanBase 的免费试用,加上大语言模型,快速的免费搭建一个RAG 智能助手。

RAG 的应用架构

在开始搭建之前,我们先了解一下基于OceanBase搭建 RAG应用的架构。

如下图所示,智能助手将文档以向量的形式批量存储在 OceanBase 数据库内。用户通过 UI 界面提问,程序使用 BGE-M3 模型将提问内容嵌入成为向量并在数据库中检索相似向量,得到相似向量对应的文档内容后,应用将它们会同用户提问一起发送给 大语言模型(LLM),LLM 会根据提供的文档生成更加准确的回答。

一起来搭建 RAG智能助手 吧

下面,我们就一起用 OceanBase的文档库做为数据源,用免费的OceanBase云数据库和大语言模型,快速搭一个RAG 助手的Demo吧。

注意操作的电脑或服务器上,要先提前安装好 python(3.9 及以上版本 )和相应 pip。

1、免费开通 OceanBase 云数据库

OceanBase 云数据库 提供 365 天的免费试用,可前往 OceanBase 官网,页面导航上有“免费试用”入口,点击进入页面后,选择“个人试用”,只需简单的几步,就可以创建一个免费的数据库实例了。注意搭建 RAG应用需要开通的是  共享实例-事务型(MySQL模式)。

实例创建后,在实例控制台创建用户、创建数据库、获取连接串,就可以通过公网连接OB Cloud数据库了。

然后在实例工作台中设置 ob_vector_memory_limit_percentage 参数,以启用向量检索功能。推荐设置值为 30

2、注册大模型LLM账号

这里我们用阿里云的通义千问模型来做,他提供了一定的免费使用额度。开通阿里云百炼的账号并开通大模型服务,然后获取 API 密钥。使用过程中请关注免费额度使用情况,超出将会产生费用。

大家也可以使用其他的大模型来搭建。选用其他 LLM 需要更新 .env 文件中的 API_KEYLLM_BASE_URL 和 LLM_MODEL

3、克隆代码仓库

为了简化 demo的搭建,官方在Github和gitee上都准备了预制的代码仓库,我们复制gitee的代码:

git clone https://gitee.com/oceanbase-devhub/ai-workshop-2024
cd ai-workshop-2024

4、安装poetry,设置变量,连接数据库

安装 Poetry,可参考命令:

python3 -m pip install poetry

配置环境变量

cp .env.example .env
如果您使用通义千问提供的 LLM 能力,则需要把 API_KEY 和 OPENAI_EMBEDDING_API_KEY 更新为您从阿里云百炼控制台获取的 API KEY 值,并将 DB_ 开头的变量更新为您的数据库连接信息,然后保存文件。
vi .env

使用官方准备好的脚本来尝试连接数据库,以确保数据库相关的环境变量设置成功

bash utils/connect_db.sh

5、将样本文档转换为向量并插入到 OceanBase 数据库

克隆 OceanBase 相关组件的开源文档仓库并处理它们,生成文档的向量数据和其他结构化数据后,将数据插入到 OceanBase 数据库。

1)从gitee上clone 文档

git clone --single-branch --branch V4.3.4 https://gitee.com/oceanbase-devhub/oceanbase-doc.git doc_repos/oceanbase-doc

2)将文档标题转换为标准 Markdown 格式

poetry run python convert_headings.py \doc_repos/oceanbase-doc/zh-CN \

3)将文档转换为向量并插入 OceanBase 数据库

官方提供了embed_docs.py 脚本,通过指定文档目录和对应的组件后,该脚本就会遍历目录中的所有 markdown 格式的文档,将长文档进行切片后使用嵌入模型转换为向量,并最终将文档切片的内容、嵌入的向量和切片的元信息(JSON 格式,包含文档标题、相对路径、组件名称、切片标题、级联标题),一同插入到 OceanBase 的同一张表中,作为预备数据待查。

这个时间会比较长,也可以挑选先挑选部分文档做尝试。

poetry run python embed_docs.py --doc_base doc_repos/oceanbase-doc/zh-CN/640.ob-vector-search

6、启动 RAG 智能助手的 聊天界面

执行以下命令启动聊天界面:

poetry run streamlit run --server.runOnSave false chat_ui.py

访问终端中显示的 URL 来打开聊天机器人应用界面。

  You can now view your Streamlit app in your browser.Local URL: http://localhost:8501Network URL: http://172.xxx.xxx.xxx:8501External URL: http://xxx.xxx.xxx.xxx:8501 # 这是您可以从浏览器访问的 URL

然后就可以和智能助手开始互动问答了啦! 

(注意,因为数据源是OB 的文档库,所以请提问 OceanBase 相关的问题)

还有更多

上面的演示,是一个简单的demo,可以在本机运行,大家可以更换数据源,将他变成自己的小助手,比如可以基于游戏文档搭一个游戏助手,或换成书的资料变成一个学习助手。

此外,OceanBase还在陆续上线各种 AI 场景的搭建教程,例如,配合开源的 LLM 低代码平台Dify去搭建一个应用级的RAG智能助手;或者,搭建一个 text2SQL应用,用自然语言生成对应的查询 SQL ……

可以访问 OceanBase 官网上的“AI 动手实战营”视频课程,内容正在不断上新中,可以点击关注。OceanBase AI 实战视频课


现在,立即开通OceanBase 免费试用,开启 你的 AI 体验之旅吧!

相关文章:

向量检索+大语言模型,免费搭建基于专属知识库的 RAG 智能助手

随着生成式人工智能技术的飞速发展,越来越多的人和企业开始应用AI到日常的工作和生活中。但公域的AI助手其数据来自互联网上的大量公开文本,虽然具有广泛的知识,但在面对一些特定领域的专业问题时,可能会出现回答不够准确或深入的…...

基础11C++中的异常处理以及swap

一、异常处理手段 抛出异常:throw 异常 作用:让调用者看见这个异常,如果调用者不理睬,就让调用者的调用者看见 接住异常: try {可能异常的code} catch(异常类型) {处理方式} 异常类型:一般为const &,防…...

写作词汇积累:得偿所望、可见一斑、搭腔

得偿所望 【得偿所望】是指经过长时间的期盼和努力,最终实现了自己的愿望或目标。 【得偿所望】强调了愿望实现后的满足感和成就感,是一个充满正能量和积极情感的词语。 【得偿所望】与【得偿所愿】在表达上也具有相似的含义,都指愿望得到了…...

android jetpack compose Model对象更新变量 UI不更新、不刷新问题

以前是搞老本行Android原生开发的,因为工作原因,一直在用vue小程序;因为一些工作需要,又需要用到Android原生开发,建了个项目,打开源码一看,天塌了!!!我以前的…...

数据库概论

目录 1、数据库管理系统(DBMS) 1.1 DBMS的主要功能 1. 数据库的定义功能 2. 数据库的操纵功能 3. 数据库的运行控制功能 4. 数据库的维护 5. 数据字典(Data Dictionary,DD) 2、数据模型 2.1 信息和数据(了解) 2.2 数据模型的三个层次 2.3 信息世界中的基…...

基于python使用UDP协议对飞秋进行通讯—DDOS

基于飞秋的信息传输 声明:笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 老规矩,封面在文末! 飞秋介绍 (…...

数据库管理-第275期 Oracle 23ai:画了两张架构图(20241225)

数据库管理275期 2024-12-25 数据库管理-第275期 Oracle 23ai:画了两张架构图(20241225)1 系统管理分片2 用户定义分片总结 数据库管理-第275期 Oracle 23ai:画了两张架构图(20241225) 作者:胖…...

使用Streamlit部署机器学习模型

机器学习: 计算机能够从经验中学习,而无需明确编程。机器学习是目前最热门的领域之一,世界各地的顶级公司都在使用它来改善他们的服务和产品。但是没有使用在Jupyter Notebook中训练的机器学习模型。因此,我们需要部署这些模型&am…...

依图科技简介

依图科技(YITU Technology)是中国一家全球领先的人工智能(AI)公司,成立于2012年,总部位于上海。公司专注于计算机视觉、语音识别和自然语言处理等核心AI技术,致力于推动AI技术在医疗、安防、金融…...

苍穹外卖day07缓存部分分析

苍穹外卖Day07部分聚焦于缓存功能的实现与优化,通过引入redis缓存机制,结合Spring Cache 注解,降低了数据库负载,提升其响应速度。 以下是清除缓存功能代码: RestController RequestMapping("/admin/dish"…...

OCR实践-Table-Transformer

前言 书接上文 OCR实践—PaddleOCR Table-Transformer 与 PubTables-1M table-transformer,来自微软,基于Detr,在PubTables1M 数据集上进行训练,模型是在提出数据集同时的工作, paper PubTables-1M: Towards comp…...

HarmonyOS NEXT 实战之元服务:静态案例效果---电台推荐

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index import { authentica…...

微信小程序 不同角色进入不同页面、呈现不同底部导航栏

遇到这个需求之前一直使用的小程序默认底部导航栏,且小程序默认入口页面为pages/index/index,要使不同角色呈现不同底部导航栏,必须要在不同页面引用不同的自定义导航栏。本篇将结合分包(subPackages)展开以下三步叙述…...

MATLAB符号计算-符号表达式基础运算操作

1.1.2符号变量取值域的限定 默认复数域 【例1-1-2】解不等式 1.1.3创建符号表达式 对符号对象进行各种运算(算术运算、关系运算、逻辑运算),即可创建符号表达式。 1.算术运算与转置 【例1-1-3】 f5是f4的共轭转置 f6是f4的转置 2.关系…...

服务器被攻击怎么办

当服务器遭受恶意流量攻击,如DDoS(分布式拒绝服务)或CC(Challenge Collapsar)攻击时,传统的防护措施可能不足以应对。此时,采用高防IP服务可以有效缓解攻击压力,确保业务连续性和数据…...

精准识别花生豆:基于EfficientNetB0的深度学习检测与分类项目

精准检测花生豆:基于EfficientNet的深度学习分类项目 在现代农业生产中,作物的质量检测和分类是确保产品质量的重要环节。针对花生豆的检测与分类需求,我们开发了一套基于深度学习的解决方案,利用EfficientNetB0模型实现高效、准…...

【UE5 C++课程系列笔记】13——GameInstanceSubsystem的简单使用

目录 概念 基本使用案例 效果 步骤 概念 UGameInstanceSubsystem 类继承自 USubsystem,它与 GameInstance 紧密关联,旨在为游戏提供一种模块化、可方便扩展和管理的功能单元机制。在整个游戏运行期间,一个 GameInstance 可以包含多个 UGa…...

实用工具推荐----Doxygen使用方法

目录 目录 1 软件介绍 2 Doxygen软件下载方法 3 Doxygen软件配置方法 4 标准注释描述 4.1 块注释 和 特殊描述字符 4.1.1 函数描述示例 4.1.2结构体数组变量示例 特别注意: 4.2单行注释 4.2.1 单个变量注释示例 特别注意: 4.2.2对于枚举变量…...

js垃圾回收机制详细讲解

JavaScript 垃圾回收机制(Garbage Collection, GC)负责自动管理内存的分配和释放,确保程序在运行时不会因为内存泄漏而崩溃。它的主要任务是回收不再使用的内存空间,防止内存泄漏。JavaScript 的垃圾回收通常由引擎自动完成&#…...

【Linux/踩坑】Linux中启动eclipse或HDFS因JAVA_HOME设置报错

Linux中启动eclipse或hadoop因JAVA_HOME设置报错 eclipseHadoop eclipse 错误提示: A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the follo…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...