OceanBase + DeepSeek:5分钟免费搭建企业知识库

news/2025/2/26 7:46:29
aidu_pl">

过去一个月,DeepSeek 在全球范围内引发了热烈讨论。其突破性的 AI 能力使其日流量显著超越 Claude 和 Perplexity,吸引了众多企业和技术专家的高度关注。随着 AI 技术的不断进步,企业正面临一场深刻的智能化变革——如何通过 AI 重构业务,提升效率、创新力和竞争力,已成为企业必须应对的战略课题。

然而,随着 AI 解决方案的广泛应用,企业在部署过程中面临的挑战也日益复杂,尤其是在数据隐私和合规性方面。为了确保数据安全、满足法规要求,并对关键业务数据进行全面掌控,越来越多的企业选择将 AI 应用和知识库系统部署在私有化环境中。私有化部署不仅能有效降低数据泄露风险,还能显著提升系统响应速度和稳定性,保障业务的连续性和高效运营。

本文将深入探讨如何通过结合 OceanBase和 DeepSeek 的优势,构建私有化知识库的方案。借助 DeepSeek 的低成本推理、OceanBase 的低成本存储及一体化数据库能力,帮助企业打造安全、实时、低成本的知识库系统,在保障数据安全与合规性的同时,提升业务的智能化与敏捷性。

1、OceanBase向量能力带来哪些变化

OceanBase 在 4.3.3 版本首次引入了向量检索能力,在关系型数据库的基础上新增向量检索能力,支持向量数据类型、向量索引以及基于向量索引的搜索能力。用户可以通过 SQL 及 Python SDK 两种方式灵活使用 OceanBase 的向量检索能力。同时结合 OceanBase 对海量数据的分布式存储能力以及对多模数据类型及多类型索引的支持,提供更加丰富的融合查询能力,极大简化 AI 应用的技术栈,加速 RAG、智能推荐、多模态搜索等业务场景的落地。

在 OceanBase 4.3.5 版本中,作为面向 AP 场景的第一个长期支持(LTS)版本,向量检索能力得到了进一步完善。除了增强向量索引的稳定性外,OceanBase 将向量索引支持的最大维度从 2000 维提升至 4096 维,并新增了对 cosine 距离算法的支持。用户在创建索引时,可以选择合适的距离算法(如 cosine 距离算法),并在执行查询时灵活地通过指定 cosine_distance 过滤条件,提升检索精度和查询效率。这些持续迭代和优化,使 OceanBase 在大规模 AI 场景中具备更强的适应性,能够为企业提供一个可扩展、低延迟、高性能的 AI 数据底座,满足未来复杂多变的 AI 应用需求。

2、基于OceanBase和DeepSeek私有化部署知识库

在这篇文章中,我们将介绍如何基于 OceanBase 和 DeepSeek 构建一个 RAG(Retrieval-Augmented Generation)聊天机器人,该 RAG 以 OceanBase 文档为例,用于回答 OceanBase 用户的相关问题。

我们将使用 OceanBase 文档作为多模数据源,将文档内容转化为向量和结构化数据,存储到 OceanBase 数据库中。通过该方法,用户提出的问题会被转化为向量,随后在数据库中进行向量检索,结合相关文档内容,借助 DeepSeek 的大语言模型为用户提供更准确的答案。我们使用的 BGE-M3 文本嵌入模型和 DeepSeek 大语言模型均通过 SiliconFlow 提供的 API 服务。

(一)项目组成

该 RAG 机器人将由以下几个组件组成:

🚩 文本嵌入服务:将文档转换为向量的文本嵌入服务,在这里我们使用 BGE-M3 模型。

🚩 数据库:提供存储和查询文档向量和其它结构化数据能力的数据库(推荐使用 4.3.5 LTS版本)。

🚩 大语言模型(LLM):若干分析用户问题、基于检索到的文档和用户问题生成回答的 LLM 智能体,利用 DeepSeek 大语言模型能力进行构建。

🚩 聊天界面:机器人与用户交互的聊天界面,采用 Streamlit 搭建。

(二)交互流程

图片

1️⃣ 用户在 Web 界面中输入想要咨询的问题并发送给机器人;

2️⃣ 机器人将用户提出的问题使用文本嵌入模型转换为向量;

3️⃣ 将用户提问转换而来的向量作为输入在 OceanBase 中检索最相似的向量;

4️⃣ OceanBase 返回最相似的一些向量和对应的文档内容;

5️⃣ 机器人将用户的问题和查询到的文档一起发送给大语言模型并请它生成问题的回答;

6️⃣ 大语言模型分片地、流式地将答案返回给机器人;

7️⃣ 机器人将接收到的答案也分片地、流式地显示在 Web 界面中,完成问答。

(三)准备工作

1️⃣ 安装 Python 3.9+(参考资料 1) 和 pip(参考资料 2)。如果您的机器上 Python 版本较低,可以使用 Miniconda 来创建新的 Python 3.9 及以上的环境,具体可参考 Miniconda 安装指南(参考资料 3)。

2️⃣ 安装 Poetry(参考资料 4),可参考命令 python3 -m pip install poetry。

3️⃣ 安装 Docker(参考资料 5)(可选,如果您计划使用 Docker 在本地部署 OceanBase 数据库则必须安装)。

4️⃣ 安装 MySQL 客户端,可参考 yum install -y mysql 或者 apt-get install -y mysql-client(可选,如果您需要使用 MySQL 客户端检验数据库连接则必须安装)。

5️⃣ 确保您机器上该项目的代码是最新的状态,建议进入项目目录执行 git pull。

6️⃣ 注册硅基流动(SiliconFlow)(参考资料 6)账号并获取 API Key。

图片

图片

(四)构建聊天机器人

1、获取 OceanBase 数据库

我们首先要获取 OceanBase 4.3.3 版本及以上的数据库来存储我们的向量数据。您可以通过以下两种方式快速获取 OceanBase 数据库:

🚩 使用 OB Cloud 云数据库免费试用版,平台注册和实例开通请参考 OB Cloud Free Trial 免费试用(参考资料 7);

🚩 使用 Docker 启动 OceanBase 单机版(推荐使用 4.3.5 LTS 版本)。

📕 注册 OB Cloud 并开通实例

进入 OB Cloud 免费试用(参考资料 7)页面,点击“立即试用”按钮,注册并登录账号,填写相关信息,开通MySQL模式的事务型实例,等待创建完成。

📕 获取 OB Cloud 数据库实例连接串

进入实例详情页的“实例工作台”,点击“连接”-“获取连接串”按钮来获取数据库连接串,将其中的连接信息填入后续步骤中创建的 .env 文件内。
 

图片

📕 修改实例参数启用向量模块

进入实例详情页的“参数管理”,将 ob_vector_memory_limit_percentage 参数修改为 30 以启动向量模块。

图片

2、安装依赖

接下来,您需要切换到动手实战营的项目目录:

cd ~/ai-workshop-2024

我们使用 Poetry 来管理聊天机器人项目的依赖项。您可以使用以下命令安装依赖项:

poetry install

如果您正在使用动手实战营提供的机器,您会看到以下消息,因为依赖都已经预先安装在了机器上:​​​​​​​

Installing dependencies from lock file
No dependencies to install or update

3、设置环境变量

我们准备了一个 .env.example 文件,其中包含了聊天机器人所需的环境变量。您可以将 .env.example 文件复制到 .env 并更新 .env 文件中的值。​​​​​​​

cp .env.example .env# 更新 .env 文件中的值,特别是 API_KEY 和数据库连接信息vi .env

.env.example 文件的内容如下,如果您正在按照动手实战营的步骤进行操作(使用 DeepSeek 作为大语言模型),您需要把 API_KEY 和 OPENAI_EMBEDDING_API_KEY 更新为您从硅基流动平台上获取到的 API KEY 值,如果您使用 OB Cloud 的数据库实例,请将 DB_ 开头的变量更新为您的数据库连接信息,然后保存文件。​​​​​​​​​​​​​

# 请填写获取到的 API_KEYAPI_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLLM_MODEL="deepseek-ai/DeepSeek-V3"LLM_BASE_URL="https://api.siliconflow.cn/v1"
HF_ENDPOINT=https://hf-mirror.comBGE_MODEL_PATH=BAAI/bge-m3
OLLAMA_URL=OLLAMA_TOKEN=
# OPENAI_EMBEDDING_API_KEY 一项请填写和 API_KEY 一样的值OPENAI_EMBEDDING_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxOPENAI_EMBEDDING_BASE_URL="https://api.siliconflow.cn/v1/embeddings"OPENAI_EMBEDDING_MODEL=BAAI/bge-m3
UI_LANG="zh"
# 请根据 OBCloud 实例的连接信息更新下面的变量DB_HOST="127.0.0.1"DB_PORT="2881"DB_USER="root@test"DB_NAME="test"DB_PASSWORD=""

4、连接数据库

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

bash utils/connect_db.sh# 如果顺利进入 MySQL 连接当中,则验证了环境变量设置成功

5、准备文档数据

在该步骤中,我们将克隆 OceanBase 相关组件的开源文档仓库并处理它们,生成文档的向量数据和其他结构化数据后将数据插入到我们在步骤 1 中部署好的 OceanBase 数据库。

1️⃣ 克隆文档仓库

首先我们将使用 git 克隆 OceanBase 的文档到本地。​​​​​​​

git clone --single-branch --branch V4.3.4 https://github.com/oceanbase/oceanbase-doc.git doc_repos/oceanbase-doc# 如果您访问 Github 仓库速度较慢,可以使用以下命令克隆 Gitee 的镜像版本git clone --single-branch --branch V4.3.4 https://gitee.com/oceanbase-devhub/oceanbase-doc.git doc_repos/oceanbase-doc

2️⃣ 文档格式标准化

因为 OceanBase 的开源文档中有些文件使用 ==== 和 ---- 来表示一级标题和二级标题,我们在这一步将其转化为标准的 # 和 ## 表示。​​​​​​

# 把文档的标题转换为标准的 markdown 格式poetry run python convert_headings.py doc_repos/oceanbase-doc/zh-CN

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

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

为了节省时间,我们只处理 OceanBase 众多文档中与向量检索有关的几篇文档,在第 6 步打开聊天界面之后,您针对 OceanBase 的向量检索功能进行的提问将得到较为准确的回答。​​​​​​​

# 生成文档向量和元数据poetry run python embed_docs.py --doc_base doc_repos/oceanbase-doc/zh-CN/640.ob-vector-search

在等待文本处理的过程中我们可以浏览 embed_docs.py 的内容,观察它是如何工作的。

首先在该文件中实例化了两个对象,一个是负责将文本内容转化为向量数据的嵌入服务 embeddings;另一个是 OceanBase 对接的 LangChain Vector Store 服务,封装了 pyobvector 这个 OceanBase 的向量检索 SDK,为用户提供简单易用的接口方法。同时我们针对 OceanBase 组件建立了分区键,在需要定向查询某个组件的文档时能极大提升效率。​​​​​​​

embeddings = get_embedding(    ollama_url=os.getenv("OLLAMA_URL") or None,    ollama_token=os.getenv("OLLAMA_TOKEN") or None,    base_url=os.getenv("OPENAI_EMBEDDING_BASE_URL") or None,    api_key=os.getenv("OPENAI_EMBEDDING_API_KEY") or None,    model=os.getenv("OPENAI_EMBEDDING_MODEL") or None,)
vs = OceanBase(    embedding_function=embeddings, # 传入嵌入服务,将在插入文档时即时调用    table_name=args.table_name,    connection_args=connection_args,    metadata_field="metadata",    extra_columns=[Column("component_code", Integer, primary_key=True)],    partitions=ObListPartition(        is_list_columns=False,        list_part_infos=[RangeListPartInfo(k, v) for k, v in cm.items()]        + [RangeListPartInfo("p10", "DEFAULT")],        list_expr="component_code",    ),    echo=args.echo,)

接下来,该脚本判断所连接的 OceanBase 集群是否已开启了向量功能模块,如果没有开启则使用 SQL 命令进行启动。​​​​​​​

# 通过查询 ob_vector_memory_limit_percentage 参数判断是否已开启向量功能模块params = vs.obvector.perform_raw_text_sql(    "SHOW PARAMETERS LIKE '%ob_vector_memory_limit_percentage%'")# ...
# 通过将 ob_vector_memory_limit_percentage 参数设置为 30 来开启向量功能模块vs.obvector.perform_raw_text_sql(  "ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30")

最后,我们遍历文档目录,将文档内容读取并切片之后提交给 OceanBase Vector Store 进行嵌入和存储。​​​​​​​

if args.doc_base is not None:    loader = MarkdownDocumentsLoader(        doc_base=args.doc_base,        skip_patterns=args.skip_patterns,    )    batch = []    for doc in loader.load(limit=args.limit):        if len(batch) == args.batch_size:            insert_batch(batch, comp=args.component)            batch = []        batch.append(doc)
    if len(batch) > 0:        insert_batch(batch, comp=args.component)

6、启动聊天界面

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

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:8501  Network URL: http://172.xxx.xxx.xxx:8501  External URL: http://xxx.xxx.xxx.xxx:8501 # 这是您可以从浏览器访问的 URL

图片

3、写在最后

本文通过 OceanBase 与 DeepSeek 的实践演示,展示了如何将一体化数据库与大语言模型深度融合,构建安全、高效、可扩展的私有化知识库系统。值得一提的是,OceanBase 的一体化能力不仅适用于 DeepSeek,还能与其他主流大模型无缝对接,灵活适配多样化的 AI 应用场景,满足企业不同的智能化需求。

OceanBase 的一体化架构有效解决了传统方案多系统堆砌(如数据库、向量库、AI 模型)带来的运维复杂性和高成本问题。同时,借助强大的实时数据处理能力可避免因数据更新延迟导致的 AI 回答“过时”问题,尤其适用于对时效性要求极高的业务场景。

此外,OceanBase 的 SQL+AI 能力支持高效的向量检索,并能够处理向量数据与其他数据类型(如 GIS、关系型数据、文档等)的混合查询,显著简化技术栈,为复杂的 AI 应用提供强有力的底层支持。

未来,OceanBase 一体化能力将持续迭代升级,面向 AI 场景进一步增强向量检索和多模数据混合查询的处理性能,助力企业构建面向未来的 AI 数据底座,为复杂多变的智能化应用场景提供坚实的技术支撑。

参考资料

参考资料 1:安装 Python 3.9+

https://www.python.org/downloads/

参考资料 2:安装 pip

https://pip.pypa.io/en/stable/installation/

参考资料 3:Miniconda 安装指南

https://docs.anaconda.com/miniconda/install/

参考资料 4:安装 Poetry

https://python-poetry.org/docs/

参考资料 5:安装 Docker

https://docs.docker.com/engine/install/

参考资料 6:注册硅基流动(SiliconFlow)

https://cloud.siliconflow.cn/​​​​​​​

参考资料 7:开通 OB Cloud 免费试用

https://www.oceanbase.com/free-trial


http://www.niftyadmin.cn/n/5868328.html

相关文章

Eclipse 快捷键

Eclipse 快捷键 概述 Eclipse 是一款广泛使用的集成开发环境(IDE),在Java、C/C、Python等多种编程语言的开发中都有着重要的地位。熟练掌握Eclipse的快捷键可以提高工作效率,以下是Eclipse中常用的快捷键汇总,供您参…

网络安全学习-常见安全漏洞检测以及修复方法-1

渗*透测试 渗透测试就是模拟攻击者入侵系统,对系统进行一步步渗透,发现系统的脆弱环节和隐藏风险。形成测试报告提供给系统的所有者,所有者根据报告对系统进行加固,提升系统的安全性,防止真正的攻击者入侵。 渗透测试…

BUU41 [GYCTF2020]FlaskApp1【SSTI】

题目: 加密处没啥事,但是解密的地方提交{{7*7}}就会返回报错界面,顺便把代码也爆出来了 text_decode base64.b64decode(text.encode()) 先将字符串 text编码为字节对象,然后使用 base64.b64decode 函数对这个字节对象进行 Base…

【多语言生态篇三】【DeepSeek×Go:高并发推理服务设计】

第一章:项目背景与选型考量 1.1 DeepSeek推理服务的业务挑战 日均请求量突破1.2亿次(峰值QPS达38万) 典型请求特征:50ms超时限制 | 10KB输入+2KB响应 流量特征:工作日周期性波动(早10点至晚8点负载增长300%) 1.2 Go语言脱颖而出的五大优势 (敲黑板!这里用餐馆厨房…

自动驾驶两个传感器之间的坐标系转换

有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car,需要转换到相机坐标系下,旋转矩阵R_car2Cam,平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1:先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…

【JavaWeb13】了解ES6的核心特性,对于提高JavaScript编程效率有哪些潜在影响?

文章目录 🌍一. ES6 新特性❄️1. ES6 基本介绍❄️2. 基本使用2.1 let 声明变量2.2 const 声明常量/只读变量2.3 解构赋值2.4 模板字符串2.5 对象拓展运算符2.6 箭头函数 🌍二. Promise❄️1. 基本使用❄️2. 如何解决回调地狱问题2.1回调地狱问题2.2 使…

【SpringBoot】——分组校验、自定义注解、登入验证(集成redis)、属性配置方式、多环境开发系统学习知识

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

【uniapp】上传文件流图片

需求:从接口下载指定文件,把这个文件再上传到后端。 背景:文件的上传、下载接口都是现有的,原本在pc端下载使用的responseType为blob,在uniapp不支持。如果按照原本的方式请求接口,返回的值会是字符串&…