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

Spring AI之RAG入门

目录

1. 什么是RAG

2. RAG典型应用场景

3. RAG核心流程

3.1. 检索阶段

3.2. 生成阶段

4. 使用Spring AI实现RAG

4.1. 创建项目

4.2. 配置application.yml

4.3. 安装ElasticSearch和Kibana

4.3.1.  安装并启动ElasticSearch

4.3.2.  验证ElasticSearch是否启动成功

4.3.3. 安装并启动Kibana

4.3.4. 验证Kibana是否启动成功

4.4. 实现ETL

4.5. 实现相似性检索

4.6. 结合检索结果生成答案

4.7. 创建controller测试接口 

4.8. 启动应用并测试

4.8.1. 启动应用后到kibana查看自动创建的index​编辑

4.8.2. 调用controller的loadDocuments接口导入数据到ES​编辑

4.8.3. 调用controller的rag接口测试rag检索

5. 参考文档


前面的博文《Spring AI介绍及大模型对接》介绍了Spring AI的Models组件及聊天模型对接,本篇文章接着介绍下RAG组件,让我们基于Spring简洁的API和模块化设计快速集成RAG能力,掌握使用Spring AI构建企业级智能问答系统、动态知识引擎等场景应用的开发方法,为打造专业领域的AI解决方案提供可靠技术路径。

1. 什么是RAG

检索增强生成(Retrieval-Augmented Generation,RAG) 是一种结合信息检索与生成式AI的技术,它的核心思想是在生成答案前,先从外部知识库中检索与用户问题相关的信息,并将这些信息作为提示(Prompt)输入模型,从而弥补LLM的静态知识局限。

2. RAG典型应用场景

  • 智能问答系统:如企业内部知识库问答,用户可直接提问“公司年假政策是什么?”,系统检索员工手册并生成答案
  • 多轮对话增强:结合聊天会话内存(Chat Conversation Memory),支持上下文连贯的交互(如客服场景中的连续追问)
  • 文档分析与摘要:从长文本(如法律合同、研究论文)中提取关键信息并生成结构化摘要

3. RAG核心流程

RAG的实现可分为检索和生成两大阶段。

3.1. 检索阶段

  • 数据准备

        通过ETL流程(提取、转换、加载)处理外部知识库        

  • 相似性检索

        将用户查询向量化,并在数据库中搜索最相关的文档片段(如通过余弦相似度算法)

3.2. 生成阶段

  • 上下文注入

        将检索结果与用户问题结合,构造提示模板。例如:

以下是相关文档:[检索到的内容]  
用户问题:[原始问题]  
请基于上述文档生成回答:  
  • 生成优化

        通过调整提示词设计(如指定输出格式、限制回答范围)和模型参数(如温度值、最大生

        成长度),控制生成结果的质量与合规性

4. 使用Spring AI实现RAG

理解了上面介绍的RAG核心流程,接下来我们用Spring AI + 智谱AI(语言模型&向量模型) + elasticsearch(向量数据库)去编写代码实现属于我们自己的RAG。

4.1. 创建项目

  • 使用idea新建项目
  • 选择web和ai相关依赖

        (这里因为智谱也能用OpenAI的API对接,所以引入了OpenAI的依赖,当然按照spring ai官方

        文档引入spring-ai-starter-model-zhipuai也行)

  • pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springairag</artifactId><version>0.0.1-SNAPSHOT</version><name>springairag</name><description>springairag</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><spring-ai.version>1.0.0</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai&l
http://www.lryc.cn/news/2402812.html

相关文章:

  • 应用案例 | 设备分布广, 现场维护难? 宏集Cogent DataHub助力分布式锅炉远程运维, 让现场变“透明”
  • C#中的密封类与静态类:特性、区别与应用实例
  • LINUX 66 FTP 2 ;FTP被动模式;FTP客户服务系统
  • 网心云 OEC/OECT 笔记(2) 运行RKNN程序
  • vue-21 (使用 Vuex 模块和异步操作构建复杂应用)
  • #开发环境篇:postMan可以正常调通,但是浏览器里面一直报403
  • 将word文件转为kindle可识别的azw3文件的方法
  • 动态规划之01背包
  • Lua和JS的继承原理
  • 灵活控制,modbus tcp转ethernetip的 多功能水处理方案
  • boost::qvm 使用示例
  • go语言学习 第6章:错误处理
  • VMware 安装 CentOS8详细教程 (附步骤截图)附连接公网、虚拟机yum源等系统配置
  • Editing Language Model-based Knowledge Graph Embeddings
  • 深入了解linux系统—— 进程池
  • JavaScript 原型与原型链:深入理解 __proto__ 和 prototype 的由来与关系
  • 逻辑回归与Softmax
  • vscode .husky/pre-commit: line 4: npx: command not found
  • 光电耦合器:数字时代的隐形守护者
  • FPGA没有使用的IO悬空对漏电流有没有影响
  • 11. vue pinia 和react redux、jotai对比
  • 手机如何防止ip关联?3种低成本方案
  • Pandas和Django的示例Demo
  • 护网行动面试试题(1)
  • 【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE
  • 航道无人机巡检系统
  • 【JVM】Java虚拟机(一)——内存结构
  • 从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)
  • 《Linux运维总结:宝德服务器RAID开启(方式一)》
  • NY118NY120美光固态闪存NY124NY129