文章目录一、引言从数据库到智能知识检索二、环境准备与安装说明2.1 连接 openGauss 数据库2.2 安装 Python 依赖三、gsql 基础操作体验从建表到查询3.1 创建数据库与表3.2 插入数据3.3 查询数据3.4更新与删除四、向量验证DataVec 的真正魅力4.1 创建带向量字段的表4.2 插入向量数据4.3相似度查询五、Python 实战从查询到检索增强生成5.1 检索脚本retrieve_topk.py5.2 生成答案generate_from_contexts.py5.3 实战测试六、性能体验与实践心得七、RAG 与数据库的融合方案八、总结构建 AI Ready 的数据库知识库一、引言从数据库到智能知识检索在构建 RAGRetrieval-Augmented Generation检索增强生成系统时我们通常需要一个能够同时存储文本与向量的数据库。最近我尝试使用openGauss来搭建知识库结果发现它不仅支持传统关系型数据管理还内置了DataVec 向量引擎可以直接在表中存储与检索向量字段实现语义级的相似度搜索。例如以下查询语句可以直接计算向量间距离并返回最相似结果SELECT*FROMitemsORDERBYembedding-[0.3, 0.1, 0.6]LIMIT5;这意味着我们无需额外部署 Milvus、FAISS 等独立的向量数据库就能在 openGauss 内完成向量检索与知识召回。本文将带你一步步完成以下目标✅ 使用 gsql 操作 openGauss 数据库创建库、表、增删改查✅ 使用 Python psycopg2 连接 openGauss✅ 构建一个 DataVec 向量化知识库✅ 结合 Sentence-BERT 实现 RAG 检索与生成二、环境准备与安装说明实验环境如下项目版本操作系统CentOS 7.6openGauss7.0.0Python3.10依赖库psycopg2-binary, sentence-transformers, transformers, torch, numpy2.1 连接 openGauss 数据库首先我们面临最大的问题就是如何连接openGauss数据库如果能连上那么就成功一大半了。我们用docker去拉镜像执行下面两行命令docker pull enmotech/opengauss:latest然后执行sudo apt update sudo apt install postgresql-client-y psql-h localhost-p5432-U gaussdb-W postgres可能会遇到下面的报错如果没有报错请跳过【解决方法】删除旧容器docker rm opengauss重新运行推荐密码示例Gaussdb123docker run-d \--name opengauss \-e GS_PASSWORDGaussdb123\-p5432:5432\ enmotech/opengauss:latest现在应该就能够正常访问了。我们下载一个Navicat链接一下看看有没有问题在这里也给一下下载链接Navicat 下载链接连接名填上gsql主机填上localhost,端口号填上8888出事数据库是postgres用户名是gaussdb密码是自己设置的密码。然后点击连接如果正常进入就说明能连上啦同时我们测试一下python代码能不能连上importpsycopg2 connpsycopg2.connect(databaseomm,usergaussdb,passwordLzy20030215,hostlocalhost,port8888)print(✅ 数据库连接成功)正常连接 恭喜你已经完成一大半的配置工作了我们用Navicat创建一个测试数据库 连接成功后创建测试数据库test同时使用命令创建表customer_t1。插入一条信息在python代码查看是否插入成功importpsycopg2 connpsycopg2.connect(databasetestdb,usergaussdb,passwordLzy20030215,hostlocalhost,port8888)print(✅ 数据库连接成功)# 创建游标cursorconn.cursor()try:# 查询所有数据cursor.execute(SELECT * FROM customer_t1)resultscursor.fetchall()print(\n 表中的所有数据)print(*80)print(f{c_customer_sk:15}{c_customer_id:15}{c_first_name:15}{c_last_name:15}{Amount:10})print(-*80)forrowinresults:# 处理可能为NULL的字段c_last_namerow[3]ifrow[3]isnotNoneelseNULLprint(f{row[0]:15}{row[1]:15}{row[2]:15}{c_last_name:15}{row[4]:10})print(f\n总计:{len(results)}条记录)exceptpsycopg2.Errorase:print(f❌ 查询失败:{e})finally:# 关闭游标和连接cursor.close()conn.close()print(✅ 数据库连接已关闭)能够正常显示恭喜你现在已经成功连接上openGauss数据库并能在里面插入数据用python读取查询了2.2 安装 Python 依赖用pip一键安装需要的依赖pipinstallpsycopg2-binary sentence-transformers transformers torch numpy主要是用于后面RAG的测试。三、gsql 基础操作体验从建表到查询3.1 创建数据库与表进入 openGauss 控制台gsqlpostgres# CREATE DATABASE testdb;CREATEDATABASEpostgres# \c testdbNon-SSL connection...You are now connectedtodatabasetestdbasuseromm.创建一张表CREATETABLEstudent(idINTPRIMARYKEY,nameVARCHAR(50),ageINT);3.2 插入数据INSERTINTOstudent(id,name,age)VALUES(1,张三,20);INSERTINTOstudent(id,name,age)VALUES(2,李四,22);3.3 查询数据SELECT*FROMstudent;输出id | name | age --------------- 1 | 张三 | 20 2 | 李四 | 223.4更新与删除UPDATEstudentSETage21WHEREid1;DELETEFROMstudentWHEREid2;四、向量验证DataVec 的真正魅力4.1 创建带向量字段的表CREATETABLEitems(idSERIALPRIMARYKEY,contentTEXT,embeddingvarchar(255));我们使用varchar存储向量字符串如[0.1,0.2,0.3]。DataVec 引擎支持-欧式距离、#余弦相似度等操作符。4.2 插入向量数据INSERTINTOitems(content,embedding)VALUES(华为是全球领先的ICT公司,[0.1,0.2,0.3]),(openGauss 是一款数据库系统,[0.4,0.1,0.7]);4.3相似度查询SELECTid,contentFROMitemsORDERBYembedding::vector# [0.3,0.1,0.6]::vectorLIMIT1;openGauss 会计算向量间的相似度并返回最相关的文本段落这正是构建 RAG 系统的关键能力。五、Python 实战从查询到检索增强生成实现完整 RAG 流程生成用户问题向量在 openGauss 中执行向量检索将检索结果交给生成模型回答5.1 检索脚本retrieve_topk.py#!/usr/bin/env python3importpsycopg2,json,tracebackfromsentence_transformersimportSentenceTransformerdefconnect():returnpsycopg2.connect(host192.168.24.15,port26000,dbnamemydb,useromm,passwordAdmin123.)defretrieve_topk(query,k3):modelSentenceTransformer(all-MiniLM-L6-v2)q_vecmodel.encode(query).tolist()connconnect()curconn.cursor()try:sqlSELECT content FROM items ORDER BY embedding - %s LIMIT %scur.execute(sql,(str(q_vec),k))rowscur.fetchall()exceptException:arr_text,.join(map(str,q_vec))cur.execute(fSELECT content FROM items ORDER BY embedding - ARRAY[{arr_text}]::vector LIMIT %s,(k,))rowscur.fetchall()finally:conn.close()return[r[0]forrinrows]if__name____main__:resretrieve_topk(什么是 openGauss)print(json.dumps(res,ensure_asciiFalse,indent2))输出示例[openGauss 是一款数据库系统,华为是全球领先的ICT公司]5.2 生成答案generate_from_contexts.pyfromtransformersimportpipelineimportjsonwithopen(contexts.json,r,encodingutf-8)asf:datajson.load(f)querydata[query]contextsdata[contexts]prompt根据以下内容回答问题\n\n.join(contexts)f\n问题{query}\n回答generatorpipeline(text-generation,modelgpt4)resgenerator(prompt,max_new_tokens200)print(res[0][generated_text])5.3 实战测试输入什么是openGauss输出openGauss 是一款由华为公司开源并社区化运营的企业级开源关系型数据库。它具备高性能、高安全、高可用等核心特性尤其在内核层面针对多核架构与AI场景进行了深度优化能够轻松应对高并发、海量数据的复杂业务场景。作为 openGauss 生态的基石它支持分布式部署、同城跨AZ部署提供全面的数据安全保护。其目标是打造一个融合、开放、创新的企业级数据库开源社区为各行各业提供稳定可靠的数据管理服务。六、性能体验与实践心得实际测试中未加索引时ORDER BY -查询 Top-3 平均响应约80ms启用HNSW 向量索引后降至30ms若使用MOT 内存表并启用并行检索性能进一步提升。这些结果表明 openGauss 的 DataVec 引擎在性能与可扩展性上都非常出色完全能满足向量检索与知识问答类应用需求。七、RAG 与数据库的融合方案在 RAG 系统中openGauss 主要承担知识库存储文档 向量向量相似度检索数据托管与查询优化开发者可使用任意嵌入模型SimCSE、Sentence-BERT、OpenAI Embeddings 等生成知识向量存入 openGauss并在检索阶段用查询向量找到最相关内容交由生成模型处理。这种架构简洁、高效、可控非常适合企业级智能问答、文档检索、AI 助手等场景。八、总结构建 AI Ready 的数据库知识库本文介绍了使用 openGauss DataVec 构建向量化知识库的完整流程从gsql 基础操作Python 连接与查询向量插入与相似度检索到 RAG 检索增强生成。整个过程表明openGauss 不只是一个关系型数据库它更像是一个AI Ready 的知识存储引擎一次部署即可支持结构化数据与智能问答系统的融合应用。未来 openGauss 还计划支持多模态向量如图像、音频届时可用于构建“文本 图像 知识图谱”的多模态 RAG 系统为智能检索与内容生成提供更广阔的可能。