暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于Vastbase向量版部署的DeepSeek本地知识库

海量数据库 2025-03-05
19

随着Deepseek的爆火,部署本地AI知识库,成为越来越多企业和个人的选择。本期海量智库,带您了解如何基于Vastbase部署您的专属AI助手。



Part 01

什么是LLM?什么是RAG?

LLM(Large Language Model)和RAG(Retrieval-Augmented Generation)是自然语言处理(NLP)领域中的两个重要概念。它们各自有不同的用途和特点,但有时也会结合使用以提升性能。


LLM:也就是大型语言模型,这些模型通常具有数十亿甚至更多的参数。它们在大量文本数据上进行训练,能够执行各种自然语言处理任务,如文本生成、翻译、问答等。


RAG:检索增强生成,一种将信息检索与 LLM 结合的框架,可以实时从外部知识库中检索相关信息,并利用 LLM 生成更准确、更有针对性且可靠的回答。

LLM的局限性

知识局限性:对于一些实时性的、非公开的或离线的数据是无法获取到的,这部分知识也就无从具备。

幻觉局限:回答内容的准确性存疑。

数据安全隐患:企业无法将私域数据上传到第三方平台进行训练,导致训练结果不准确、访问过程不稳定。


为解决以上问题,我们将LLM与RAG结合,基于Vastbase本地数据库,部署一个Deepseek本地知识库。为您提供更懂你、更安全、更可控的AI助手。




Part 02

为什么选择基于Vastbase的本地知识库?

性能稳定高效:海量数据库Vastbase向量版,是基于openGauss内核开发的纯国产数据库,性能优异、安全稳定,能让DeepSeek的RAG模型更精准理解你的需求。


灵活定制:本地部署意味着你可以根据自身需求,自由定制知识库内容和功能,打造更懂你的AI助手。


数据安全,隐私保障:敏感数据不出本地,杜绝信息泄露风险,安心使用无顾虑。


离线可用,稳定可靠:无需依赖网络,随时随地访问你的知识库,稳定流畅不卡顿。


成本可控,长期受益:一次部署,长期使用,无需持续支付高昂的云服务费用。




Part 03

实践准备:搭建基础环境

操作系统与 Python 环境配置

本试验所采用的操作系统为 centos7(x86_64),开发环境使用 python3.8.2。


验证是否成功:


[root@vastdata ~]# python3.8 --version

Python 3.8.2

[root@vastdata ~]#





Part 04

DeepSeek推理模型部署

解锁强大文本生成能力

安装Ollama服务

首先,我们需要下载 ollama 的 pypi 包,以便后续访问 ollama 服务:


[root@vastdata ~]$ pip3.8 install ollama


然后,我们可以使用官网提供的一键式部署脚本来部署 ollama 服务:


curl -fsSL https://ollama.com/install.sh | sh


如果遇到网络问题无法直接安装,我们可以考虑采用手动方案。


[root@vastdata ~]$ wget 

https://ollama.com/download/ollama-linux-amd64.tgz[test@localhost ~]$ tar -zxvf 

ollama-linux-amd64.tgz -C /usr/[test@localhost ~]$ which ollama/usr/bin/ollama


<<左右滑查看完整代码>>


安装成功后,我们可以启动 ollama 服务:


[root@vastdata ~]$ ollama serve &


选择关键模型:DeepSeek与nomic-embed-text的协同

在RAG应用中,文本嵌入模型和文本生成模型是至关重要的组成部分。在本次实践中,我们着重引入了DeepSeek家族中的deepseek-r1模型来承担文本生成这一核心任务。   


deepseek-r1 模型是基于先进的深度学习技术开发的,它具有独特的架构和训练方式,能够更好地捕捉文本中的语义信息,从而为文本生成带来更出色的效果。


同时,我们选用nomic-embed-text模型用于嵌入任务,该模型能够将文本转换为高维向量表示,为后续的检索和匹配提供了强有力的支持。二者协同工作,共同助力我们打造基于DeepSeek与Vastbase的本地AI知识库。


[root@vastdata ~]$ ollama --version

ollama version is 0.5.11

[root@vastdata ~]$ ollama pull deepseek-r1

[root@vastdata ~]$ ollama pull nomic-embed-text



Part 05

Vastbase安装部署

构建可靠数据存储基石

通过海量数据库Vastbase向量版存储本地私域知识,在快速检索的同时提供更加稳定、更加安全的数据防护。

具体的安装步骤可以参考官网


安装后启动数据库服务:


vb_ctl start


验证数据库安装成功:


[vastvector@vastdata ~]$ vsql -r -d vastbase

vsql ((Vastbase G100 V3.0 (Build 8) Beta) compiled at 2025-01-23 18:17:44 commit 24878 last mr  )

Non-SSL connection (SSL connection is recommended when requiring high-security)

Type "help" for help.

 

vastbase=#


<<左右滑查看完整代码>>




Part 06

构建RAG实例

实现知识的高效检索与生成

第一步:连接数据库

首先,我们需要下载 psycopg2 依赖:


[root@vastdata ~]$ pip3.8 install psycopg2


然后验证数据库连接:


import psycopg2

conn = psycopg2.connect(database="vastbase",user="tpcc",password="***",host="*******", port="5435")

 

cur = conn.cursor()

cur.execute("select version();")

rows = cur.fetchall()

print(rows)


<<左右滑查看完整代码>>


如果正确连接会显示如下结果:


[root@vastdata vastbase]# python3.8 connect1.py

['PostgreSQL 9.2.4 on x86_64-pc-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit',)]


<<左右滑查看完整代码>>

第二步:准备语料信息

我们的信息来源于Vastbase的知识库,部分数据信息为:


## 2. 如何查看海量数据库的版本?

 

常用的通过两种方式查看:

方式一:以数据库安装账号登录服务器(例如:vastbase),执行vsql -V

方式一:以客户端连接至数据库,执行select * from v$version;

 

## 3. vastbase数据库有哪些不同类型的产品?

 

海量数据库Vastbase G100是海量数据基于开源openGauss内核开发的企业级关系型数据库

海量数据库Vastbase M100符合国防标准的自主可控的数据库

海量数据库Vastbase G100向量版是兼具集中式特性的向量数据库,自主可控

 

## 4. 海量数据库支持哪些开发语言?

 

海量数据库支持多种主流开发语言,包括但不限于:Java、Python、Ruby、C/C++、PHP、Go、.NET、Perl、NodeJS等,这些语言都可以通过相应的驱动程序与海量数据库进行交互,实现数据的增删改查等操作。


<<左右滑查看完整代码>>


第三步:语料预处理


#预处理

file_path = '/home/vastbase/doc.md'

with open(file_path, 'r', encoding='utf-8') as file:

    content = file.read()

paragraphs = content.split('##')

for i, paragraph in enumerate(paragraphs):

    print(f'paragrapth {i + 1}:\n{paragraph}\n')

    print('-' * 20)


部分结果为:


--------------------

paragrapth 3:

2. 如何查看海量数据库的版本?

 

常用的通过两种方式查看:

方式一:以数据库安装账号登录服务器(例如:vastbase),执行vsql -V

方式一:以客户端连接至数据库,执行select * from v$version;


--------------------

paragrapth 4:

3. vastbase数据库有哪些不同类型的产品?

海量数据库Vastbase G100是海量数据基于开源openGauss内核开发的企业级关系型数据库

海量数据库Vastbase M100符合国防标准的自主可控的数据库

海量数据库Vastbase G100向量版是兼具集中式特性的向量数据库,自主可控


<<左右滑查看完整代码>>

第四步:语料嵌入

在前述章节里,我们已经准备好了nomic-embed-text嵌入模型。

这里进行简单测试如下:


#嵌入

def embedding(text):

    vector = ollama.embeddings(model="nomic-embed-text", prompt=text)

    return vector["embedding"]

text = "vastbase database"

emb = embedding(text)

dimensions = len(emb)

print("text : {}, embedding dim : {}, enbedding : {} ...".format(text, dimensions, emb[:10]))


<<左右滑查看完整代码>>

执行结果为:


text : vastbase database, embedding dim : 768, enbedding : [0.1809404492378235, 1.1703386306762695, -3.5179595947265625, -1.4564001560211182, 0.8982013463973999, 0.25169509649276733, 0.5886539220809937, 1.3106755018234253, -0.7848290801048279, -0.0866355374455452] ...


<<左右滑查看完整代码>>


第五步:数据导入

创建包含文本数据和向量数据的table,将处理好的语料数据向量化后导入到Vastbase中,并创建索引:


#建表

cur = conn.cursor()

cur.execute("DROP TABLE IF EXISTS {};".format(table_name))

cur.execute("CREATE TABLE {} (id INT PRIMARY KEY, content TEXT, emb floatvector({}));".format(table_name, dimensions))

conn.commit()


for i, paragraph in enumerate(paragraphs):

    emb = embedding(paragraph)

    insert_data_sql = f'''INSERT INTO {table_name} (id, content, emb) VALUES (%s, %s, %s);'''

    cur.execute(insert_data_sql, (i, paragraph, emb))

conn.commit()

#建索引

cur.execute("CREATE INDEX ON {} USING hnsw(emb floatvector_l2_ops);".format(table_name))

conn.commit()


<<左右滑查看完整代码>>


运行结果为:


vastbase=# \d+ tpcc.vastdb_data;

                            Table "tpcc.vastdb_data"

 Column  |       Type           | Modifiers | Storage    | Stats target | Description

---------+--------------------+-----------+-----------+--------------+-------------

 id          | integer              | not null    | plain        |                   |

 content  | text                  |                | extended  |                   |

 emb       | floatvector(768) |                | extended |                    |

Indexes:

    "vastdb_data_pkey" PRIMARY KEY, btree (id) TABLESPACE pg_default

    "vastdb_data_emb_idx" hnsw (emb) TABLESPACE pg_default

Has OIDs: no

Options: orientation=row, compression=no, fillfactor=80

 

vastbase=# select id, content from tpcc.vastdb_data limit 2;

 id |               content              

----+----------------------------------------

  0 | ---                                                 +

     | title: 'FAQ'                                     +

     | category: 'faq'                                +

     | ---                                                 +

     |                                                      +

     | # 常见问题                                      +

     |                                                      +

     |

  1 |  1. 海量数据库开源许可协议是什么?   +


<<左右滑查看完整代码>>


第六步:查询检索

我们尝试问如下问题,它会得到数据库内的结果:


question = "vastbase数据库有哪些不同类型的产品?"

 

emb_data = embedding(question)

dimensions = len(emb_data)

cur = conn.cursor()

cur.execute("select content from {} order by emb <-> '{}' limit 1;".format(table_name, emb_data))

conn.commit()

rows = cur.fetchall()

print(rows)

cur.close()

conn.close()


<<左右滑查看完整代码>>


结果如下:


[(' 3. vastbase数据库有哪些不同类型的产品?\n\n海量数据库Vastbase G100是海量数据基于开源openGauss内核开发的企业级关系型数据库\n海量数据库Vastbase M100是符合国防标准的自主可控的数据库\n海量数据库Vastbase向量版是兼具集中式特性的向量数据库,自主可控\n\n',)]


<<左右滑查看完整代码>>




Part 07

结合LLM实现RAG

首先,为对比RAG前后效果,我们直接询问大模型得到如下答案,结果并不理想:


question = "vastbase数据库有哪些不同类型的产品?"

SYSTEM_PROMPT = "你作为一个对话 AI 助手,结合上下文信息简练高效的回答用户提出的问题"

 

response: ChatResponse = chat(

    model="deepseek-r1",

    messages=[

        {"role": "user", "content": SYSTEM_PROMPT},

        {"role": "user", "content": USER_PROMPT}

    ],

)

print(response["message"]["content"])



<<左右滑查看完整代码>>


得到的结果如下:


[root@vastdata vastbase]# python3.8 deepseek.py

<think>

好,我现在需要回答用户关于VASTBASE数据库产品类型的问题。首先,我应该回顾一下之前提供的回答,确保覆盖所有关键点。

VASTBASE提供结构化、半结构化和复杂数据管理解决方案,包括VAST,VASt+,以及数据治理工具如DataFlow和AQP。此外,有扩展版的产品如 VASTBASE 360和 VASTBASE Enterprise Module,还有专为特定行业的定制版本。

我应该检查每个产品类型是否有最新的更新或功能变化。例如,是否增加了AI驱动的分析或云原生支持?如果有,需要更新说明。

另外,用户可能想知道每个产品适合什么场景,比如VAST对于传统数据库替代者,VASt+则更加强大和灵活。数据治理工具可能帮助用户优化现有系统。

最后,我应该确保信息简洁明了,并按逻辑顺序排列,让用户容易理解。

</think>


VASTBASE 提供多种类型的产品来满足不同的数据管理需求:

1.**VAST**:作为结构化数据库的替代者,支持RDBMS兼容性,适合传统关系型数据库用户。

2.**VASt+**:半结构化和复杂数据管理解决方案,利用JS0N健模,适用于混合结构化和非结构化数据环境。

3.**DataFlow**:数据治理工具,帮助优化现有数据库性能,并通过实时分析增强洞察力。

4.**AOP (Advanced Query Processing)**:提供高级查询功能,支持复杂查询和数据分析。

5.**VASTBASE 360**:综合数据管理平台,集数据治理、分析和可视化于一体。

6.**VASTBASE Enterprise Module**:专为大型企业设计的扩展版解决方案,具备高性能和高可用性。

7.**行业定制版本**:针对特定行业的定制化解决方案,提供领域特定的功能和优化。

这些产品组合覆盖了从结构化到复杂数据管理,以及数据治理的需求。

[root@vastdata vastbase]#


<<左右滑查看完整代码>>


借助Vastbase检索结果作为上下文,将文档进行格式化处理,并为大模型制定PROMPT,基于ollama平台,我们采用deepseek-r1大模型进行知识问答:


context = "\n".join(row[0] for row in rows)

SYSTEM_PROMPT = "你作为一个对话 AI 助手,结合上下文信息简练高效的回答用户提出的问题"

USER_PROMPT = f"请结合{context}信息来回答{question}的问题,不需要额外的无用回答"

 

response: ChatResponse = chat(

    model="deepseek-r1",

    messages=[

        {"role": "user", "content": SYSTEM_PROMPT},

        {"role": "user", "content": USER_PROMPT}

    ],

)

print(response["message"]["content"])



<<左右滑查看完整代码>>


得到的回答为:


<think>

好的“我现在要帮助用户了解Vastbase数据库的不同类型。用户的问题比较直接,就是询问有哪些产品。首先,我得回顾一下之前提供的信息,确保涵盖所有类型。

根据之前的资料,Vastbase有三个主要产品:G100、M100和G100向量版。每个产品都有不同的特点,比如G100是基于开源的,适用于企业级关系型数据库;M100符合国防标准,自主可控;G100向量版是向量数据库,适合大模型。


接下来,我需要组织这些信息,用简洁明了的方式呈现出来。用户可能想知道每个产品的用途和优势,所以我会逐一列出,并简要说明每个产品的特点。


同时,要注意不要添加额外的信息,保持回答的准确性和简洁性。这样用户就能快速理解Vastbase数据库的产品类型,而不会感到信息过载。

</think>


Vastbase数据库有三种不同类型的产品:

1.**G100**:基于开源openGauss内核的企业级关系型数据库。

2.**M100**:符合国防标准的自主可控的数据库。

3.**G100向量版**:兼具集中式特性的向量数据库,自主可控。

[root@vastdata vastbase]#


<<左右滑查看完整代码>>




从上面的实例可以看出:基于海量数据库Vastbase向量版并结合deepseek搭建的RAG应用,能充分发挥出Vastbase高效存储和快速检索向量数据的特性,也能充分释放deepseek强大的文本生成能力和精准的文本嵌入能力,显著提高本地知识库的准确性、避免幻觉问题,是您搭建安全、高效、灵活本地知识库的优秀选择。




文章转载自海量数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论