当前位置: 首页 > news >正文

【保姆级图文详解】RAG 实战(Spring AI + 本地知识库)旅游知识库问答

文章目录

  • 前言
  • 一、RAG 实战(Spring AI + 本地知识库)流程
    • 1.1、 开发步骤
    • 1.2、文档RAG过程(ETL 流程)
    • 1.3、实战开发
  • 二、RAG 实战(Spring AI + 云知识库)流程
  • 三、RAG 实战(Spring AI + PG知识库)流程

前言

亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力,谢谢大家!有问题请私信或联系邮箱:fn_kobe@163.com

一、RAG 实战(Spring AI + 本地知识库)流程

1.1、 开发步骤

  • 标准:文档收集切割→向量转换存储→切片过滤检索→查询增强关联。
  • 简化:文档准备→文档读取→向量转换存储→查询增强。

在这里插入图片描述

1.2、文档RAG过程(ETL 流程)

  • 借 Spring AI Alibaba的 文档,关键技术如下:
    • DocumentReader(读文档)
    • DocumentTransformer(转文档)
    • DocumentWriter(存文档),完成 “文档→向量库” 的抽取、转换、加载

在这里插入图片描述

1.3、实战开发

  • 1、引入依赖。
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-markdown-document-reader</artifactId><version>1.0.0-M6</version>
</dependency>
  • 2、编写文档加载器类。
@Component
@Slf4j
class LoveAppDocumentLoader {private final ResourcePatternResolver resourcePatternResolver;LoveAppDocumentLoader(ResourcePatternResolver resourcePatternResolver) {this.resourcePatternResolver = resourcePatternResolver;}public List<Document> loadMarkdowns() {List<Document> allDocuments = new ArrayList<>();try {// 这里可以修改为你要加载的多个 Markdown 文件的路径模式Resource[] resources = resourcePatternResolver.getResources("classpath:document/*.md");for (Resource resource : resources) {String fileName = resource.getFilename();MarkdownDocumentReaderConfig config = MarkdownDocumentReaderConfig.builder().withHorizontalRuleCreateDocument(true).withIncludeCodeBlock(false).withIncludeBlockquote(false).withAdditionalMetadata("filename", fileName).build();MarkdownDocumentReader reader = new MarkdownDocumentReader(resource, config);allDocuments.addAll(reader.get());}} catch (IOException e) {log.error("Markdown 文档加载失败", e);}return allDocuments;}
}// 通过配置(如 MarkdownDocumentReaderConfig )定制读取规则、添加元信息(如文件名)辅助检索。
  • 3、向量与查询,用内置 SimpleVectorStore(实现 VectorStore 接口,支持文档写入 ),先借 Embedding 模型转文档为向量,再存向量到内存数据库,简化实现。

在这里插入图片描述
在这里插入图片描述

  • 4、查询增强:靠 Advisor 特性(QuestionAnswerAdvisor/RetrievalAugmentationAdvisor ),用户提问时,QuestionAnswerAdvisor 从向量库查相关文档,附加到用户问题,为大模型生成回答提供上下文,用知识库辅助问答。QuestionAnswerAdvisor 源码含让 AI 基于知识库问答的 Prompt 。
@Configuration
public class AppVectorStoreConfig {@Resourceprivate AppDocumentLoader AppDocumentLoader;@BeanVectorStore AppVectorStore(EmbeddingModel dashscopeEmbeddingModel) {SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(dashscopeEmbeddingModel).build();// 加载文档List<Document> documents = AppDocumentLoader.loadMarkdowns();simpleVectorStore.add(documents);return simpleVectorStore;}
}

在这里插入图片描述

  • 5、引入Adviso依赖。
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-advisors-vector-store</artifactId>
</dependency>
  • 6、编写代码,进行单元测试。
@Resource
private VectorStore AppVectorStore;public String doChatWithRag(String message, String chatId) {ChatResponse chatResponse = chatClient.prompt().user(message).advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId).param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))// 开启日志,便于观察效果.advisors(new LoggerAdvisor())// 应用知识库问答.advisors(new QuestionAnswerAdvisor(lpVetorStore)).call().chatResponse();String content = chatResponse.getResult().getOutput().getText();log.info("content: {}", content);return content;
}
    @Testvoid doChatWithRag() {String chatId = UUID.randomUUID().toString();String message = "中国热门目的地的最佳旅游季节有哪些";String answer = TravelApp.doChatWithRag(message, chatId);Assertions.assertNotNull(answer);}
  • 7、结果验证。

在这里插入图片描述

二、RAG 实战(Spring AI + 云知识库)流程

待撰写

三、RAG 实战(Spring AI + PG知识库)流程

待撰写

http://www.lryc.cn/news/582454.html

相关文章:

  • 微软上线 Deep Research 预览版:o3+必应赋能研究自动化
  • OGRE 3D----6. 背景图片渲染实现详解
  • 【Unity3D】微信小游戏适配安全区域或胶囊控件(圆圈按钮)水平高度一致方案
  • element el-table渲染二维对象数组
  • 什么是 3D 文件?
  • 开源 python 应用 开发(三)python语法介绍
  • 【电脑】主要组成部分
  • 装备制造数字孪生底座平台
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_syn_retries
  • 利用AI技术快速提升图片编辑效率的方法
  • 数据结构 --- 栈
  • django-ckeditor配置html5video实现视频上传与播放
  • word中的单位详解
  • 算法化资本——智能投顾技术重构金融生态的深度解析
  • 使用阿里云/腾讯云安装完成mysql使用不了
  • 分库分表之实战-sharding-JDBC广播表
  • JavaScript基础篇——第二章 类型转换与常见错误解析
  • 《UE5_C++多人TPS完整教程》学习笔记42 ——《P43 瞄准(Aiming)》
  • 250708-Svelte项目从Debian迁移到无法联网的RHEL全流程指南
  • 计算机网络:(八)网络层(中)IP层转发分组的过程与网际控制报文协议 ICMP
  • [论文阅读] 软件工程 | 自适应CPS中的人机协作与伦理
  • 自动驾驶感知系统
  • 分水岭算法:图像分割的浸水原理
  • 【王树森推荐系统】召回12:曝光过滤 Bloom Filter
  • 大数据在UI前端的应用创新:基于社交网络的用户影响力分析
  • 深度学习——神经网络1
  • 基于物联网的智能交通灯控制系统设计
  • three案例 Three.js波纹效果演示
  • 【操作系统】进程(二)内存管理、通信
  • MySQL Galera Cluster部署