用 OceanBase 4.3.3,搭建《黑神话:悟空》的专属游戏AI助手

news2024/11/26 11:23:29
本文分享了如何基于 OceanBase 4.3.3 bp1 社区版的向量检索能力,通过几条简单的命令,快速搭建一个定制化的专属游戏助手的过程。

背景

在 OceanBase 最新推出 V 4.3.3 免费试用的同时,也同时发布了几个基于OB Cloud 的向量能力,搭建 AI 应用的Demo教程。其中, 基于文档知识库搭建 AI 助手的Demo,受到了很多用户的关注,我们也在线下的 AI动手实验营里和大家一起进行了搭建。

这里,我们基于这个AI助手 Demo的基本步骤,用 OceanBase 社区版 4.3.3 bp1 ,改造搭建一个《黑神话:悟空》的 RAG 智能问答助手,也给大家分享一下搭建过程中如何避坑。

关于 OceanBase 的向量检索能力

OceanBase 在 4.3.3 bp1 版本中,支持了向量数据类型(Vector),提供的向量能力包括:新的向量数据类型、向量索引以及向量搜索 SQL 操作符等几项功能,它使得 OceanBase 数据库能够将文档、图像及其他非结构化数据的语义内容存储为 embedding 向量,并使用这些 embedding 向量快速进行相似性查询。

向量检索技术已经广泛应用于多个业务场景,现在也有越来越多的 OceanBase 用户,开始提出了向量检索的需求。以下是几个使用向量检索的具体例子:

  • 检索增强生成(RAG)
    • 利用向量检索能能力可以快速检索大型知识库中的相关文档向量,为生成式任务提供信息支撑,从而改善答案的质量和相关性;
    • 2023 年,RAG 是基于 LLM 系统最受欢迎的架构,有非常多的产品都是基于 RAG 构建。例如支付宝的智能体开发平台 “百宝箱”,以及蚂蚁集团开源的 DB-GPT 项目,就都是在此基础上进行的微调。
  • 生物识别
    • 典型的场景是人脸识别:利用一些特征提取的算法将人脸转换为数值特征向量,并在高维空间中快速匹配和检索相似特征,从而实现高效准确的身份辨识。
  • 多模数据搜索推荐:
    • 在实现多模态搜索时,向量检索是一种常用的技术。为了在不同数据模态之间进行检索,一般会先将所有模态的数据转换成统一的向量表示形式,即将图像、文本、音视频等数据编码为向量。一旦所有数据都被转换成向量形式,就可以在共同的向量空间中计算不同模态数据之间的相似度。
    • 文搜图,图搜文用的都是这个思路。

这里不多啰嗦,给各位推荐一个叫《向量数据库是什么?为啥 AI 大模型离不开它?》的视频,时长只有三分钟,可以帮助大家快速理解视频标题中的问题。

向量数据库是什么?为啥AI大模型离不开它?

构建你自己的专属答疑助手

组件介绍

AI 助手 Demo 中的介绍虽然是 “构建一个 RAG 聊天机器人,用来回答与 OceanBase 文档相关的问题”,不过大家可以偷梁换柱,把 OceanBase 官网文档改成任何你更感兴趣的数据源。

下面的内容,会记录通过试用 OceanBase 向量检索的能力的过程,为大家使用 OceanBase 构建专属的聊天机器人 “趟一遍坑”。

   

这张图画的是Demo教程中关于 AI 助手的简单架构,再补充说明几点:

  • OceanBase 在这个机器人中的作用,是存储和查询数据源对应的向量数据的数据库。
  • 先要通过 BGE-M3 模型,把数据源转换为向量。
  • 然后通过智谱 AI 的 LLM 能力分析用户问题,基于从 OceanBase 向量数据库中检索到的相关内容,给出答案。

趟坑记录

部署过程可以根据 AI 动手实验营里的步骤 https://github.com/oceanbase-devhub/ai-workshop-2024 来就行,我在一个从来没装过任何开发环境的 Mac 上试了下,只需要复制黏贴几条命令,整体还是比较顺畅的。这里简单记录几个部署过程中可能会踩到的小坑。

首先需要 clone 这个项目下来,文档里虽然没写,但是大家肯定也都知道。

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

然后文档里写了需要安装 Python 3.9+,详见:Python Releases for macOS | Python.org。这里注意版本千万不能选最新发布的 3.13,否则可能绘因为各种依赖的组件还没适配这个最新版本,导致一些意外。因为这个问题,遇到好几个报错,一个个都解完了(为解决这几个报错,还安装了 Fortran 编译器和 Rust),最后才看到是 Python 版本过高导致的(前面的那些报错的根因其实也都是 Python 版本的问题,血的教训):

error: the configured Python interpreter version (3.13) is newer than PyO3's maximum supported version (3.12)

推荐直接去官网下载 pkg 安装包。我降级到 Python 3.12 的时候是编译安装的,超级慢,强烈不推荐。

最后如果你已经有了 OceanBase 4.3.3 bp1 及以上版本的测试环境,直接用就行,好像只会创建一张由向量数据类型组成的表而已,没必要重新通过 docker 部署一个新的 OceanBase 集群。表结构如下:

MySQL [test]> desc corpus;
+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| id             | varchar(4096) | NO   | PRI | NULL    |       |
| embedding      | VECTOR(1024)  | YES  |     | NULL    |       |
| document       | longtext      | YES  |     | NULL    |       |
| metadata       | json          | YES  |     | NULL    |       |
| component_code | int(11)       | NO   | PRI | NULL    |       |
+----------------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

其中的 embedding 列就是一个超多维的向量类型,用于快速进行相似性查询。

准备数据

嘿嘿,大家可以在这一步做些手脚,对应原文档里的 5.2 小节。文档中的描述是 “克隆 OceanBase 开源文档仓库并处理它们,生成文档的向量数据和其他结构化数据后将数据插入到我们部署好的 OceanBase 数据库中”。

但是 OceanBase 官网文档实在太多,导入和解析会非常耗时(取决于网络和其他硬件资源)。恰巧前一段儿时间 “试用” 了下《黑神话:悟空》,觉得其中的《影神图》(游戏角色人物小传)写得十分精彩。为了能够早点儿回家打虎先锋,这里偷懒,对原文档的命令进行了一点儿调整。

我把原始步骤里的一大批 OceanBase 文档替换成了游戏里的《影神图》(这里需要注意的是,数据源的原始资料暂时还只支持 markdown 格式的文件),执行的内容被 “篡改” 成了如下命令序列:

cd doc_repos

git clone --single-branch --branch master https://github.com/liboyang0730/black-myth-wukong-portraits.git

cd ..

poetry run python convert_headings.py \
  doc_repos/black-myth-wukong-portraits/docs

poetry run python embed_docs.py --doc_base doc_repos/black-myth-wukong-portraits/docs

效果展示

展示之前,需要先关掉 “仅限 OceanBase 相关问题” 的选项:

展示一下试用效果,先问它三个《影神图》中存在的信息:

   

   

   

如果你要问它数据源里不存在的内容,它可能就要一本正经地胡说八道,或者让你 “听君一席话,如听一席话” 了。例如:

   

       

所以如果希望进一步提升这个游戏助手的智能程度,那就还需要更多的数据源作为输入,只靠《影神图》还是不够的。个人理解,如果要想让游戏助手回答上面的一个问题,指导玩家如何打赢敌人,至少还需要再导入 “战斗系统” 和 “游戏玩法” 的资料。

   

虽然网络上有很多游戏资料和攻略,但是本文终究只是个示例,就不再赘述后续如何逐步完善这个助手的过程了。

By the way:回答问题时,如果有显示相关参考文档的需求,在 rag/doc_rag.py 里仿照 oceanbase-doc 加一行 black-myth-wukong-portraits 的内容,然后在页面设置里勾上 “显示参考文档” 就好了。

liboyang@B-N7YMPHGD-0333 ai-workshop-2024 % git diff rag/doc_rag.py
diff --git a/rag/doc_rag.py b/rag/doc_rag.py
index c385256..4a9f88a 100644
--- a/rag/doc_rag.py
+++ b/rag/doc_rag.py
@@ -74,6 +74,7 @@ def doc_search_by_vector(
 supported_components = cm.keys()

 replacers = [
+    (r"^.*black-myth-wukong-portraits", "https://github.com/liboyang0730/black-myth-wukong-portraits/blob/master"),
     (r"^.*oceanbase-doc", "https://github.com/oceanbase/oceanbase-doc/blob/V4.3.3"),
     (r"^.*ocp-doc", "https://github.com/oceanbase/ocp-doc/blob/V4.3.0"),
     (r"^.*odc-doc", "https://github.com/oceanbase/odc-doc/blob/V4.3.1"),

最后欢迎大家试用 OceanBase 4.3.3及以上版本的向量能力,通过几条简单的命令,快速搭建一个定制的 “智能答疑机器人”~

What's more?

  • 11 月 28日晚 7点,OceanBase 视频号将为你带来 《AI 动手实战营 :基于 OceanBase + LLM 打造属于你的智能助手》,欢迎大家扫码预约

     
     
  • 上海的朋友,也欢迎参加 12月7日的 OceanBase 城市交流会 ,现场也有 AI动手实验营。点击报名 >>
  • oceanbase-devhub 除了本文介绍的答疑机器人,还介绍了如何利用 OceanBase 的向量能力,通过几条命令构建一个以图搜图的应用,详见:https://github.com/oceanbase-devhub/image-search

参考资料

  • OceanBase 项目仓库:https://github.com/oceanbase/oceanbase
  • OceanBase 数据库 V4.3.3 版本发布记录:https://www.oceanbase.com/product/oceanbase-database-community-rn/releaseNote#V4.3.3
  • OceanBase AI workshop:https://github.com/oceanbase-devhub/ai-workshop-2024
  • OceanBase Image Search:https://github.com/oceanbase-devhub/image-search
  • B 站视频《向量数据库是什么?为啥 AI 大模型离不开它?》:https://www.bilibili.com/video/BV1ph411A7Ke
  • 《黑神话:悟空》中的《影神图》:https://github.com/liboyang0730/black-myth-wukong-portraits

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

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

相关文章

tableau练习-制作30个图表

一、导入数据 1、导入数据 -添加-添加连接-到文件-excel格式用第一个excel导入,csv格式用第二个文本格式导入 2、连接数据 -从旁边这里直接拖到中间 标头连接 -日期若不一致需调节日期格式 3、保存数据 点击数据提取-再保存数据,保存为twbx格式 二、设计…

QT QHorizontalSpacer控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…

第六届智能控制、测量与信号处理国际学术会议 (ICMSP 2024)

重要信息 2024年11月29日-12月1日 中国陕西西安石油大学雁塔校区 大会官网:www.icmsp.net 大会简介 第六届智能控制、测量与信号处理国际学术会议(ICMSP 2024)由西安石油大学、中海油田服务股份有限公司、浙江水利水电学院与中国石油装备…

Qt中2D绘制系统

目录 一、Qt绘制系统 1.1Qt绘制基本概念 1.2 绘制代码举例 1.3画家 1.3.1 QPainter的工作原理: 1.3.2 自定义绘制饼状图: 1.4画笔和画刷 1.4.1画笔 1.4.2 画刷填充样式 1.5 反走样和渐变 1.6绘制设备 1.7坐标变换 1.8QPainterPath 1.9绘制文…

Linux——Uboot命令使用

什么是Uboot? 1)Uboot是一个裸机程序,比较复杂。类似我们PC机的BIOS程序。 2)Uboot就是一个bootloader,作用就是用于启动Linux或者其他系统,Uboot最主要的工作是初始化DDR,因为Linux的运行是运行…

2024智能机器人与自动控制国际学术会议 (IRAC 2024)

主办,承办,支持单位 会议官网 www.icirac.org 大会时间:2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 (IRAC 2024)由华南理工大学主办,会议将于2024年11月29日-12月1日在中国广…

Linux网络——NAT/代理服务器

一.NAT技术 1.NAT IP转换 之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题,NAT 技术就是当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能。 NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是一种将私有 IP 和全局IP 相互转化的技术方法: 很…

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构(Enterprise Architecture,EA)是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念,转念一想必定和我们软件架构…

亚信安全发布《2024年第三季度网络安全威胁报告》

《亚信安全2024年第三季度网络安全威胁报告》的发布旨在从一个全面的视角解析当前的网络安全威胁环境。此报告通过详尽梳理和总结2024年第三季度的网络攻击威胁,目的是提供一个准确和直观的终端威胁感知。帮助用户更好地识别网络安全风险,并采取有效的防…

【c++】模板详解(2)

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C 目录 前言 一、非类型模板参数 二、模板的特化 1. 概念 2. 场景举例 3. 函数模板的特化 4. 类模板的特化 全特化 偏特化 1. 部分特化 2. 对参数的…

红队笔记--W1R3S、JARBAS、SickOS、Prime打靶练习记录

W1R3S(思路为主) 信息收集 首先使用nmap探测主机,得到192.168.190.147 接下来扫描端口,可以看到ports文件保存了三种格式 其中.nmap和屏幕输出的一样;xml这种的适合机器 nmap -sT --min-rate 10000 -p- 192.168.190.147 -oA nmapscan/ports…

Qt/C++基于重力模拟的像素点水平堆叠效果

本文将深入解析一个基于 Qt/C 的像素点模拟程序。程序通过 重力作用,将随机分布的像素点下落并水平堆叠,同时支持窗口动态拉伸后重新计算像素点分布。 程序功能概述 随机生成像素点:程序在初始化时随机生成一定数量的像素点,每个…

十一月二十五

双向循环链表 class Node:#显性定义出构造函数def __init__(self,data):self.data data #普通节点的数据域self.next None #保存下一个节点的链接域self.prior None #保存前一个节点饿链接域 class DoubleLinkLoop:def __init__(self, node Node):self.head nodeself.siz…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! ⭐ 什么是深度学习? 人工智能、机器学习与…

UG NX二次开发(C++)-UIStyler-指定平面的对象和参数获取

文章目录 1、前言2、在UG NX中创建平面和一个长方体,3、在UI Styler中创建一个UI界面4、在VS中创建一个工程4.1 创建并添加工程文件4.2 在Update_cb方法中添加选择平面的代码4.3 编译完成并测试效果1、前言 在采用NXOpen C++进行二次开发时,采用Menu/UIStyler是一种很常见的…

C# 命令行运行包

环境:net6 nuget包:Cliwrap 3.6.7 program: 相当于cmd运行命令:nuget search json static async Task Main(string[] args) {var cmd Cli.Wrap("D:\\软件\\Nuget\\nuget.exe").WithArguments(args >args.Add("…

长三角文博会:Adobe国际认证体系推动设计人才评价新标准

2024年11月22日,由上海、江苏、浙江、安徽三省一市党委宣传部共同发起的第五届长三角文化博览会(简称“长三角文博会”)在上海国家会展中心盛大启幕。长三角文博会自2018年起已成功举办多届,已成为展示区域文化产业发展成果、推动…

音视频基础扫盲之视频码率控制策略(CBR、VBR还是ABR)

视频码率控制策略 CBR(Constant Bit Rate)、VBR(Variable Bit Rate)和ABR(Average Bit Rate)是三种常见的比特率控制方式,以视频码率控制为例,视频码率控制策略主要是在保证视频质量…

【C语言】传值调用与传址调用:深度解析与实现

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯什么是传值调用和传址调用?1. 传值调用(Call by Value)2. 传址调用(Call by Reference) 💯传值调…

C++《二叉搜索树》

在初阶数据结构中我学习了树基础的概念以及了解了顺序结构的二叉树——堆和链式结构二叉树该如何实现,那么接下来我们将进一步的学习二叉树,在此会先后学习到二叉搜索树、AVL树、红黑树;通过这些的学习将让我们更易于理解后面set、map、哈希等…