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

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

相关文章:

  • SpringBoot3.2新特性:JdbcClient
  • 模块化交互数字人系统:OpenAvatarChat,单台PC即可运行完整功能
  • 【Redis】大key对持久化的影响
  • 定时器时钟来源可以从输入捕获引脚输入
  • Unity ARPG战斗系统 _ RootMotion相关知识点
  • GPTBots在AI大语言模型应用中敏感数据匿名化探索和实践
  • 基于InternLM的情感调节大师FunGPT
  • agent mode 代理模式,整体要求,系统要求, 系统指令
  • 2025年微信小程序开发:AR/VR与电商的最新案例
  • [Python] struct.unpack() 用法详解
  • 深入理解前端DOM:现代Web开发的基石
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--简单的工作进度管理
  • 法律大语言模型(Legal LLM)技术架构
  • React 项目初始化与搭建指南
  • istringstream
  • RTOS,其基本属性、语法、操作、api
  • Python基于随机森林回归模型的葡萄酒质量预测项目实战
  • JS手写代码篇---手写call函数
  • Java基础之数组(附带Comparator)
  • python打卡day43
  • 婚纱类网站素材/湖南网站设计外包费用
  • wordpress头像同步/网站seo优化是什么
  • pyhton做网站/培训心得体会总结
  • 淄博做网站的公司有哪些/登录百度
  • 有哪些网站开发技术/全网线报 实时更新
  • 武汉最好的网站建设前十/电脑优化工具