SpringAI集成RAG实操(postgresql+pgvector)中(集成到项目中)

发布时间:2026/10/27 12:39:41

SpringAI集成RAG实操(postgresql+pgvector)中(集成到项目中) 1、在pom.xml 引入依赖!-- 自动整合 PGVector 向量存储 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-vector-store-pgvector/artifactIdversion1.0.0-M7/version/dependency2、application.yml 加入pgvector配置spring:ai:dashscope:# 需要替换为你自己的 keyapi-key:你的API-Keyembedding:options:model:qwen3.7-text-embeddingdimensions:1024################################################################# postgresql 向量数据库配置 ###################################################################vectorstore:pgvector:initialize-schema:true# 会自定初始化向量数据表 vector_storeindex-type:HNSW# 量索引的类型为 HNSW分层可导航小世界图。dimensions:1024# 存储的向量维度为 1024。distance-type:COSINE_DISTANCE# 相似度度量方式为“余弦距离max-document-batch-size:10000# Optional: Maximum number of documents per batchid-type:uuidtable-name:vector_store# 向量数据表表名schema-name:publicdatasource:url:jdbc:postgresql://localhost:5432/postgresusername:postgrespassword:123456项目启动时会自动创建向量数据表表名为vector_store3、测试向表中vector_store 插入数据service/** * 向量数据库表 vector_store 业务操作接口类 */publicinterfaceIVectorStoreService{/** * 简单示例往向量数据库中插入字符串类型的数据 * param knowledge * return */StringaddSimple(Stringknowledge);/** * 从向量数据库中筛选文档 * param content * return */ListDocumentsimilaritySearch(Stringcontent);}serviceImplServiceSlf4jpublicclassVectorStoreServiceImplimplementsIVectorStoreService{AutowiredprivatePgVectorStorepgVectorStore;AutowiredQualifier(openAiChatModel)privateChatModelchatModel;OverridepublicStringaddSimple(Stringknowledge){DocumentdocumentnewDocument(knowledge);pgVectorStore.add(List.of(document));return添加知识库成功;}/** * 根据内容相识度查询 * param content */publicListDocumentsimilaritySearch(Stringcontent){QueryquerynewQuery(content);ChatClient.BuilderchatClientBuilderChatClient.builder(chatModel);// 构建查询重写转换器RewriteQueryTransformerqueryTransformerRewriteQueryTransformer.builder().chatClientBuilder(chatClientBuilder).build();// 构建翻译成中文转换器/* QueryTransformer queryTransformer TranslationQueryTransformer.builder() .chatClientBuilder(chatClientBuilder) .targetLanguage(Chinese) .build();*/// 重写QuerytransformqueryTransformer.transform(query);SearchRequestsearchRequestSearchRequest.builder().query(transform.text())//搜索的查询文本,重写后的查询.topK(5)// 返回的最大结果数.similarityThreshold(0.5)// 相似度阈值分数用于筛选搜索结果。只有相似度得分大于或等于该“阈值”的文档才会被返回。请注意这是一个在客户端而非服务端执行的后处理步骤。阈值设为 0.0 表示接受任意相似度或禁用相似度阈值过滤阈值设为 1.0 则表示要求完全匹配。//.filterExpression(title in [如何提升自身魅力吸引潜在伴侣]) //基于文档元数据的过滤表达式.build();// Retrieve documents similar to a queryListDocumentresultspgVectorStore.similaritySearch(searchRequest);log.info(匹配到的知识库内容{},results.toArray());returnresults;}}测试方法这里就直接写controller了在页面上测试/** * 向量数据库接口 */RestControllerRequestMapping(/vectorStore)publicclassVectorStoreController{AutowiredprivateIVectorStoreServicevectorStoreService;/** * 新增数据 * 向vector_store插入数据 * param knowledge 字符串类型的知识 */PostMapping(/add)publicStringaddSimple(Stringknowledge){returnvectorStoreService.addSimple(knowledge);}/** * 查询-直接接口查询 * param content * return */GetMapping(/query)publicListDocumentsimilaritySearch(Stringcontent){returnvectorStoreService.similaritySearch(content);}}先测试下插入数据查看数据库发现插入成功embedding字段即为向量数组metadata元信息为空是因为我们暂时还没有设置。继续多插入几条测试下检索功能发现只匹配到一条分数为0.664、哪为什么会检索到这条呢先将用户输入的信息向量化再通过jdbc在数据库中匹配5、总结在这里其实我们对RAG中的向量化检索有初步的了解了。在这篇文章中主要是将向量数据库pgvector集成到项目中并用简单的插入表检索表了解了向量化。在检索文档前会将用户输入的文本转化为向量表示再从表中检索内容。【下图红色圈出部分】附上一张RAG的架构图
延伸阅读

更多相关文章

2026/10/25 4:30:12

FastAPI + SQLAlchemy2.0 异步数据库

FastAPI 集成 SQLAlchemy2.0 异步数据库 主流 Python ORM 对比 Python 生态有很多 ORM 库:SQLAlchemy、Peewee、Pony ORM、Tortoise‑ORM。 SQLAlchemy:生态最成熟,支持异步,社区活跃 SQLModel:FastAPI 作者开发&…

2026/10/25 10:11:26

mentor PRO操作要点

手动创建symbol_右键新建设置格点(0.1in)文本0.05引脚可以复制黏贴(改pin num和pin type)GND_1原点放在左下角Excel创建symbol需要.csv文件IC 新建symbol-右键import pin,引脚shift选中往里拖Padstack_edit---oblong(长宽)mm新建一…

2026/10/27 12:36:06

网站安全优化与高质量外链建设实战指南

1. 网站安全性优化实战指南在当今互联网环境中,网站安全性已成为影响SEO表现和用户体验的关键因素。一个存在安全漏洞的网站不仅会面临数据泄露风险,还会被搜索引擎降权处理。根据我的经验,90%的中小型网站都存在至少一个高危安全漏洞。1.1 H…

2026/10/27 12:36:06

网站安全优化与外链建设对SEO的影响与实战策略

1. 网站安全性优化实战指南 在当今互联网环境中,网站安全性已成为影响SEO表现和用户体验的关键因素。作为一名从业多年的SEO顾问,我见过太多因安全漏洞导致排名暴跌的案例。网站安全不仅关乎数据保护,更直接影响搜索引擎对站点的信任度。 1…

2026/10/27 12:36:06

交通参与者建模(TPM)与汽车列车术语的工程落地

1. 项目概述:这不是一篇“术语词典”,而是一次对汽车智能化底层逻辑的重新校准“自动驾驶TPM技术杂谈——汽车、挂车及汽车列车的术语和定义”这个标题,乍看像一份枯燥的国标文件索引,甚至容易让人误以为是某本教材的附录章节。但…

2026/10/27 12:36:06

Ubuntu服务器Swap调优:解决OOM Killer误触发与内存管理失衡

1. 为什么Ubuntu系统明明有空闲内存,却频繁触发OOM Killer?刚接手一台运行图像处理服务的Ubuntu服务器时,我遇到一个特别反直觉的现象:free -h显示还有2.3GB可用内存,但系统日志里却反复出现Out of memory: Kill proce…

2026/10/27 12:36:06

营销技能的本质:从执行者到操盘手的底层能力修炼

聊营销技能这个话题之前,先说一个我观察到的现象:这两年身边做市场、做运营的朋友,普遍有一种焦虑——平台规则天天变,去年还跑得通的打法,今年突然不灵了;有的同行靠一条内容一夜爆粉,可轮到自…

2026/10/27 12:31:05

TailwindCSS 背景渐变动效实战与优化

1. TailwindCSS 背景渐变动效实战指南在现代化前端开发中,背景渐变效果已成为提升界面视觉层次的关键手段。TailwindCSS 作为当下最流行的原子化 CSS 框架,其渐变系统却常被开发者低估。本文将深入解析如何突破默认配置限制,实现复杂渐变场景…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑